GNS3 v2 路由器到主机连接

网络工程 arp linux GNSS3
2021-07-08 15:33:23

我正在尝试在 GNS3 中制作一个路由器以连接到主机设备(Debian 8),但没有成功。我错过了什么吗?

在此处输入图片说明

DHCP 按预期工作:

!
interface FastEthernet0/0
 ip address dhcp
 duplex auto
 speed auto
!

IP分配给路由器:

%DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 192.168.56.104, mask 255.255.255.0, hostname R1

当我从主机 ping 到路由器时,我看到 (tcpdump) ARP 回复:

13:12:08.902370 ARP, Request who-has 192.168.56.104 tell 192.168.56.101, length 28
13:12:08.905452 ARP, Reply 192.168.56.104 is-at cc:01:43:49:00:00, length 46

但它没有填充到主机 ARP 表中:

$ sudo arp -a
? (192.168.56.104) at <incomplete> on eth1

但它在路由器上:

R1#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  192.168.56.101          2   xxxx.xxxx.3f96  ARPA   FastEthernet0/0
Internet  192.168.56.104          -   cc01.4349.0000  ARPA   FastEthernet0/0

当我从路由器 ping 主机时,主机不会回复。主机上的 tcpdump 捕获:

18:40:19.862855 ARP, Request who-has 192.168.56.101 tell 192.168.56.104, length 46
18:40:21.804763 ARP, Request who-has 192.168.56.101 tell 192.168.56.104, length 46
18:40:23.781876 ARP, Request who-has 192.168.56.101 tell 192.168.56.104, length 46

iptables 中没有规则:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
1个回答

我在 GNS3 中注意到这一点已经有一段时间了。我想虽然您可以通过主机上的 wireshark 看到 ARP,但主机实际上并未收到它们。它们被发送到主机接口,就好像它正在生成流量一样。因此,它不会响应其“自己的”ARP。

可能有一种“更好”或更“正确”的方法来解决这个问题,但我发现在主机上创建一个 TAP 接口并使用ip命令将它与物理接口桥接就足够了。

我可以使用我在主机上创建的 TAP 接口将 GNS3 路由器连接到 GNS3 云,从而从我的 LAN 为 GNS3 路由器提供 DHCP 地址。GNS3 路由器可以访问包括主机在内的所有设备以及互联网。主机上的连接保持“正常”。

我不记得 GNS3 云可能需要什么特定配置,因为它会自动填充 TAP 接口并将其作为路由器的连接提供。(但是,您可能必须在执行以下操作后启动 GNS3。)

这是我使用的脚本:

# Adjust these as desired.
PHY_INT=enp9s0
TUN_INT=tap0
BR_INT=br0

case "$1" in
        up)
                echo "Creating bridge ..."
                # Create bridge interface
                ip link add $BR_INT type bridge
                # Create TAP interface
                ip tuntap add $TUN_INT  mode tap
                ip link set $TUN_INT  up
                # Flush IP from physical interface
                ip add flush dev $PHY_INT
                # Add interfaces to bridge
                ip link set $TUN_INT master $BR_INT
                ip link set $PHY_INT master $BR_INT
                ip link set dev $BR_INT up

                # DHCP
                dhclient -v $BR_INT

                ;;
        down)
                echo "Removing bridge ..."
                ip link del $TUN_INT
                ip link del $BR_INT
                dhclient -v $PHY_INT
                ;;
        *)
                echo $"Usage: $0 {up|down}"
                exit 1
esac

我使用的是 Debian Stretch (9) 和 GNS3 2.0.3。