如何将 Ubuntu 虚拟机连接到 GNS3 模拟网络

如何将 Ubuntu 虚拟机连接到 GNS3 模拟网络

我想使用 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)的 PI​​NG 请求,但它不知道使用哪个接口来返回 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 网络未在其他任何地方使用)

为了避免手动添加路线,我可以想到两种可能的解决方案(我没有做过任何一个,所以我无法提供详细信息,但我会提到它们,以防它们对您有帮助)

  • 您可以尝试像您提到的那样在 Linux VM 中启用 OSPF(可能使用 Quagga)。有关于此的一些信息是这里

  • 在启用的 DHCP 服务上,g0/0R1可以添加选项(33 或 121)将路由发送到 DHCP 客户端(如果 DHCP 服务器提供此功能)

相关内容