如何使 GNS3 上的虚拟设备能够 ping 物理主机

网络工程 MAC地址 gns3
2022-02-25 20:57:15

我已经遇到过这个问题并弄清楚了它的原因。基本上问题是 GNS3 上的虚拟设备无法 ping 物理主机,物理主机也无法 ping GNS3 上的虚拟设备。原因是 GNS3 虚拟设备和主机使用相同的 MAC 地址


现在,我打算让 GNS3 虚拟设备能够 ping 物理主机,反之亦然。有人知道怎么做吗?有可能做到bridges吗?如果是这样,我怎样才能实现桥梁来实现我的目标?非常感谢一步一步的答案。

2个回答

我认为桥梁适用于此。1. 在您的窗口系统中创建一个环回接口。2、在GNS3中,选择一个云连接回环接口,这样虚拟设备(如路由器)就可以ping通你自己的系统了。

我在 Ubuntu 17.10 上。我做的第一件事是安装openvswitch

$ sudo apt install openvswitch-switch

然后,我按照本教程的前 11 分钟进行操作。


在执行教程步骤之前,我的 IP 地址是:

$ ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.122/16 brd 10.10.255.255 scope global dynamic enp2s0f2
       valid_lft 81401sec preferred_lft 81401sec
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff

脚步:

添加mybridge

$ sudo ovs-vsctl add-br mybridge

检查是否mybridge添加:

$ sudo ovs-vsctl show 
b6806445-d242-4102-9a58-7516aee68916
    Bridge mybridge
        Port mybridge
            Interface mybridge
                type: internal
    ovs_version: "2.8.1"

再检查一遍:

$ ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.122/16 brd 10.10.255.255 scope global dynamic enp2s0f2
       valid_lft 81023sec preferred_lft 81023sec
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ae:71:01:fd:5e:0f brd ff:ff:ff:ff:ff:ff
5: mybridge: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether f6:d4:f3:64:16:42 brd ff:ff:ff:ff:ff:ff

调出mybridge

$ sudo ip link set mybridge up

或者你可以用 deprecated 来做老派ifconfig

$ sudo ifconfig mybridge up

查看:

$ sudo ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.122/16 brd 10.10.255.255 scope global dynamic enp2s0f2
       valid_lft 80659sec preferred_lft 80659sec
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ae:71:01:fd:5e:0f brd ff:ff:ff:ff:ff:ff
5: mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether f6:d4:f3:64:16:42 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f4d4:f3ff:fe64:1642/64 scope link 
       valid_lft forever preferred_lft forever

将端口添加mybridgeenp2s0f2

$ sudo ovs-vsctl add-port mybridge enp2s0f2

查看:

$ sudo ovs-vsctl show
b6806445-d242-4102-9a58-7516aee68916
    Bridge mybridge
        Port "enp2s0f2"
            Interface "enp2s0f2"
        Port mybridge
            Interface mybridge
                type: internal
    ovs_version: "2.8.1"

尝试到ping外面的世界,不可能:

$ ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
From 10.10.1.122 icmp_seq=1 Destination Host Unreachable
From 10.10.1.122 icmp_seq=2 Destination Host Unreachable
From 10.10.1.122 icmp_seq=3 Destination Host Unreachable
From 10.10.1.122 icmp_seq=4 Destination Host Unreachable
^C
--- 1.1.1.1 ping statistics ---
5 packets transmitted, 0 received, +4 errors, 100% packet loss, time 4045ms
pipe 3

删除以前的 IP 地址enp2s0f2

$ sudo ip address del 10.10.1.122/16 dev enp2s0f2

或者你可以用 deprecated 来做老派ifconfig

$ sudo ifconfig enp2s0f2 0

查看:

$ sudo ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ae:71:01:fd:5e:0f brd ff:ff:ff:ff:ff:ff
5: mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f4d4:f3ff:fe64:1642/64 scope link 
       valid_lft forever preferred_lft forever

获取 IP 地址mybridge

$ sudo dhclient mybridge

查看:

$ sudo ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ae:71:01:fd:5e:0f brd ff:ff:ff:ff:ff:ff
5: mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.122/16 brd 10.10.255.255 scope global mybridge
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d4:f3ff:fe64:1642/64 scope link 
       valid_lft forever preferred_lft forever

检查路由,应该是通过mybridge接口:

$ sudo route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.12.12     0.0.0.0         UG    0      0        0 mybridge
10.10.0.0       0.0.0.0         255.255.0.0     U     0      0        0 mybridge

ping现在对外界来说是可能的:

$ ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=50 time=89.9 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=50 time=95.2 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=50 time=82.3 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=50 time=93.3 ms
^C
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 82.323/90.211/95.221/4.946 ms

也可以ping通过名称:

$ ping google.com
PING google.com (172.217.16.206) 56(84) bytes of data.
64 bytes from fra16s08-in-f14.1e100.net (172.217.16.206): icmp_seq=1 ttl=47 time=117 ms
64 bytes from fra16s08-in-f14.1e100.net (172.217.16.206): icmp_seq=2 ttl=47 time=110 ms
64 bytes from fra16s08-in-f14.1e100.net (172.217.16.206): icmp_seq=3 ttl=47 time=115 ms
64 bytes from fra16s08-in-f14.1e100.net (172.217.16.206): icmp_seq=4 ttl=47 time=114 ms
64 bytes from fra16s08-in-f14.1e100.net (172.217.16.206): icmp_seq=5 ttl=47 time=113 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 110.344/114.344/117.319/2.308 ms

添加一个tap以供稍后在 GNS3 中使用:

$ sudo ip tuntap add mode tap vport1

查看:

$ sudo ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ae:71:01:fd:5e:0f brd ff:ff:ff:ff:ff:ff
5: mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.122/16 brd 10.10.255.255 scope global mybridge
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d4:f3ff:fe64:1642/64 scope link 
       valid_lft forever preferred_lft forever
6: vport1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 12:85:60:b7:d1:3e brd ff:ff:ff:ff:ff:ff

提出vport1

$ sudo ip link set vport1 up

或者用 deprecated 做老派ifconfig

$ sudo ifconfig vport1 up

查看:

$ sudo ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f39e:90d0:970:b350/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 94:e9:79:2a:34:23 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ae:71:01:fd:5e:0f brd ff:ff:ff:ff:ff:ff
5: mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 70:4d:7b:3a:6e:2c brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.122/16 brd 10.10.255.255 scope global mybridge
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d4:f3ff:fe64:1642/64 scope link 
       valid_lft forever preferred_lft forever
6: vport1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 12:85:60:b7:d1:3e brd ff:ff:ff:ff:ff:ff

添加vport1mybridge

$ sudo ovs-vsctl add-port mybridge vport1

查看:

$ sudo ovs-vsctl show
b6806445-d242-4102-9a58-7516aee68916
    Bridge mybridge
        Port "enp2s0f2"
            Interface "enp2s0f2"
        Port mybridge
            Interface mybridge
                type: internal
        Port "vport1"
            Interface "vport1"
    ovs_version: "2.8.1"

现在在 GNS3 拓扑上:

在此处输入图像描述

用于vport1配置Cloud-1

在此处输入图像描述

现在可以从 GNS3 路由器内 ping 物理主机:

R1#show ip interface brief 
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            10.10.1.183     YES DHCP   up                    up      
FastEthernet0/1            172.31.0.1      YES NVRAM  up                    up      
NVI0                       unassigned      NO  unset  up                    up      
R1#     
R1#
R1#ping 10.10.1.122

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.1.122, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/10/16 ms

也可以从 GNS3 的虚拟 PC 中 ping 物理主机:

PC-1> show ip

NAME        : PC-1[1]
IP/MASK     : 172.31.0.2/24
GATEWAY     : 172.31.0.1
DNS         : 1.1.1.1  
DHCP SERVER : 172.31.0.1
DHCP LEASE  : 86135, 86400/43200/75600
MAC         : 00:50:79:66:68:00
LPORT       : 10010
RHOST:PORT  : 127.0.0.1:10011
MTU:        : 1500

PC-1> ping 10.10.1.122 
84 bytes from 10.10.1.122 icmp_seq=1 ttl=63 time=20.278 ms
84 bytes from 10.10.1.122 icmp_seq=2 ttl=63 time=20.494 ms
84 bytes from 10.10.1.122 icmp_seq=3 ttl=63 time=19.957 ms
84 bytes from 10.10.1.122 icmp_seq=4 ttl=63 time=20.254 ms
84 bytes from 10.10.1.122 icmp_seq=5 ttl=63 time=14.312 ms

PC-1>

我的物理主机也可以 ping GNS3 上的虚拟路由器:

$ ping 10.10.1.183
PING 10.10.1.183 (10.10.1.183) 56(84) bytes of data.
64 bytes from 10.10.1.183: icmp_seq=1 ttl=255 time=5.24 ms
64 bytes from 10.10.1.183: icmp_seq=2 ttl=255 time=4.47 ms
64 bytes from 10.10.1.183: icmp_seq=3 ttl=255 time=2.58 ms
64 bytes from 10.10.1.183: icmp_seq=4 ttl=255 time=2.13 ms
64 bytes from 10.10.1.183: icmp_seq=5 ttl=255 time=10.9 ms
64 bytes from 10.10.1.183: icmp_seq=6 ttl=255 time=10.1 ms
^C
--- 10.10.1.183 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5006ms
rtt min/avg/max/mdev = 2.130/5.921/10.967/3.446 ms

可以使用以下命令检查 MAC 地址,可以看出,enp2s0f2共享mybridge相同的 MAC 地址,但用于vport1不同的 MAC 地址:

$ sudo ovs-ofctl show mybridge
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000704d7b3a6e2c
n_tables:254, n_buffers:0
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 1(enp2s0f2): addr:70:4d:7b:3a:6e:2c
     config:     0
     state:      0
     current:    100MB-FD AUTO_NEG
     advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG AUTO_PAUSE AUTO_PAUSE_ASYM
     supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
     speed: 100 Mbps now, 100 Mbps max
 2(vport1): addr:12:85:60:b7:d1:3e
     config:     0
     state:      0
     current:    10MB-FD COPPER
     speed: 10 Mbps now, 0 Mbps max
 LOCAL(mybridge): addr:70:4d:7b:3a:6e:2c
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0