traceroute shows just * * * in linux ( in a virtual machine ), although displays all IPs in windows correctly

The packets that Windows tracert and Linux traceroute use by default are different. Windows tracert sends ICMP packets and Linux traceroute sends UDP packets. The UDP ports are blocked at each hop in your example but ICMP is allowed, so that explains the discrepancy you're seeing.

From Wikipedia: traceroute:

On Unix-like operating systems, traceroute sends, by default, a sequence of User Datagram Protocol (UDP) packets, with destination port numbers ranging from 33434 to 33534; the implementations of traceroute shipped with Linux, FreeBSD, NetBSD, OpenBSD, DragonFly BSD, and macOS include an option to use ICMP Echo Request packets (-I), or any arbitrary protocol (-P) such as UDP, TCP using TCP SYN packets, or ICMP.

On Windows, tracert sends ICMP Echo Request packets, rather than the UDP packets traceroute sends by default.

You can have traceroute use ICMP packets in Linux by adding the -I option.

From man traceroute:

traceroute

Print the route packets take to network host.

Syntax
traceroute [options] host [packetsize]

Options:

 -I    Use ICMP ECHO for probes

Tags:

Traceroute