我想使用 Ubuntu VM 中安装的监控软件来管理模拟到 GNS3 中的网络,GNS3 也安装在 Ubuntu VM 中。
我的虚拟机中的接口是:
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:01:73:bd:8e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.221.143 netmask 255.255.255.0 broadcast 192.168.221.255
inet6 fe80::5f6a:96d3:65b9:4fe0 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:96:7f:80 txqueuelen 1000 (Ethernet)
RX packets 408 bytes 440051 (440.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 303 bytes 35261 (35.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 166 bytes 16050 (16.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 166 bytes 16050 (16.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:f8:73:7f txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
GNS3 中的网络有两个具有以下拓扑的路由器:
我使用虚拟桥接口 virbr0:192.168.122.1 将两个路由器 R1 和 R2 与 VM Ubuntu 连接。拓扑中的云代表与 Ubuntu VM 主机的连接。
我在 R1 和 R2 中使用 OSPF 路由协议。
R1的路由表:
R1#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 192.168.122.1 to network 0.0.0.0
C 192.168.122.0/24 is directly connected, GigabitEthernet0/0
10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
O 10.0.0.2/32 [110/2] via 10.1.1.2, 00:11:04, GigabitEthernet1/0
C 10.1.1.0/24 is directly connected, GigabitEthernet1/0
C 10.0.0.1/32 is directly connected, Loopback0
S* 0.0.0.0/0 [1/0] via 192.168.122.1
R2的路由表:
R2#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 10.1.1.1 to network 0.0.0.0
S 192.168.122.0/24 [1/0] via 10.1.1.1
10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C 10.0.0.2/32 is directly connected, Loopback0
C 10.1.1.0/24 is directly connected, GigabitEthernet0/0
O 10.0.0.1/32 [110/2] via 10.1.1.1, 00:32:36, GigabitEthernet0/0
O*E2 0.0.0.0/0 [110/1] via 10.1.1.1, 00:32:36, GigabitEthernet0/0
R1 和 R2 之间的通信正常。例如,它们可以 PING 彼此的环回接口。
R1 可以 PING 到 virbr0 接口 192.168.122.1。 R2 可以 PING 到 R1 的 g0/0(IP 192.168.122.2),但无法 PING 到 virbr0 IP 192.168.122.1。
在 Ubuntu VM 主机中,路由为:
$ ip route
default via 192.168.221.2 dev ens33 proto dhcp metric 100
169.254.0.0/16 dev ens33 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
192.168.221.0/24 dev ens33 proto kernel scope link src 192.168.221.143 metric 100
从 Ubuntu VM 中,我可以 PING R1 和 R2 的环回接口,但前提是我设置了输出接口:
$ ping -I virbr0 10.0.0.2
PING 10.0.0.2 (10.0.0.2) from 192.168.122.1 virbr0: 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=254 time=50.6 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=254 time=29.2 ms
看起来 Ubuntu VM 收到了来自路由器 R2(Lo:10.0.0.2)的 PING 请求,但它不知道使用哪个接口来返回 PING 回复。
此外,Ubuntu VM 的 PING 请求也存在同样的问题。我必须指出用于 PING 请求的接口。
我可以通过 virbr0 添加静态路由:
IP route add 10.0.0.0/24 via 192.168.122.1 dev virbr0
但这是一种只能在特定网络中工作的解决方案,不能在具有不同 IP 分配的一般场景中工作。另外,使用此特定网络中的此解决方案,我必须从 R2 进行 PING,指示源 IP 10.0.0.2,这是不希望的。
我想将最好的 Ubuntu VM 集成到 GNS3 网络中,以便 VM 可以直接连接到 R1 的接口 g0/0。
我不知道是否可以在Ubuntu VM中使用OSPF路由协议,并且它将解决VM和路由器之间的通信问题。
答案1
正如你提到的,这个:
从 Ubuntu VM 中,我可以 PING R1 和 R2 的环回接口,但前提是我设置了输出接口
是真的,因为:
它(VM)不知道使用哪个接口来返回 PING 回复。
因为虚拟机上没有 10.xxx IP 的特定路由,所以它将这些数据包发送到网关default
“default via 192.168.221.2 dev ens33”
虚拟机中应该存在一条路由,以便它知道将 10.xxx 的包发送到哪里,这就是为什么当您添加时一切正常:
IP route add 10.0.0.0/24 via 192.168.122.1 dev virbr0
您还可以在此路由上添加“更广泛”的范围,例如10.0.0.0/16
这是否有助于克服您提到的“特定网络”问题(并假设整个 10.xxx 网络未在其他任何地方使用)
为了避免手动添加路线,我可以想到两种可能的解决方案(我没有做过任何一个,所以我无法提供详细信息,但我会提到它们,以防它们对您有帮助)