Linux正在向其他子网中的主机发送ARP请求?

build立

Host B <--> Router <--> Host A 
  • 主机A:IP = 192.168.1.10,networking= 192.168.1.0/24,VLAN = 1,默认网关= 192.168.1.1(路由器)
  • 主机B:IP = 192.168.2.10,networking= 192.168.2.0/24,VLAN = 20,默认网关= 192.168.2.1(路由器)
  • 路由器:IP = 192.168.1.1,192.168.2.1,VLAN = 1,20

所有设备都连接到configuration了这些VLAN的交换机。

平testing

现在,如果我尝试从主机B ping主机A,则会发生以下情况:主机B发出ARP请求,查找路由器的MAC地址,并将Ping请求发送到路由器。 路由器也发出一个ARP请求来找出目的地主机A的MAC地址,并将这个Ping请求转发给主机A.没关系,这是可行的。

另一个子网的ARP请求?

现在奇怪的是:主机A当然试图回应Ping,但是(!)没有发出ARP请求来查找路由器的MAC地址,发送Ping-Reply将其转发给主机B,而不是直接发送请求主机B的MAC地址的ARP请求。 当然,这是行不通的,在本地子网上将不会有回应,因为广播域被限制在VLAN 1中。

主机A(192.168.1.10)上的ARPcaching如下所示:

 # arp -an ? (192.168.1.1) at 16:bc:aa:f2:bc:44 [ether] on eth0 ? (192.168.2.10) at <incomplete> on eth0 

当我尝试删除奇怪的ARPparsing尝试,我得到这个消息和失败的ARP尝试仍然在caching:

 # arp -d 192.168.2.10 SIOCDARP(dontpub): Network is unreachable 

ICMPredirect从路由器

所以,主机A和B之间没有(双向)通信是可能的。 而不是ping-Replies,主机B从路由器获取一个ICMP-Redirect-Request:主机B应该发送包到主机A.

我的问题

  1. 是什么让主机B尝试通过ARPparsing另一个子网的主机来发送答案? 为什么Ping-Reply没有发送到路由器?
  2. 不知道ICMP-Redirect扮演什么angular色?

附录

主持人A.

 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 # ip as 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether ab:cd:a9:9a:cc:dc brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether ab:cd:a9:9a:cc:dd brd ff:ff:ff:ff:ff:ff # ip rs default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 

主持人B

 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 # ip as 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 40:7d:7a:a3:f5:dd brd ff:ff:ff:ff:ff:ff inet 192.168.2.10/24 brd 192.168.2.255 scope global eth0 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 47:5e:33:a6:31:5e brd ff:ff:ff:ff:ff:ff 

路由器

路由表:

 Destination-IP Subnet mask Default gateway Hop count Interface <public-net> 255.255.255.224 * 0 eth2 <public-net> 255.255.255.224 * 0 eth1 192.168.1.0 255.255.255.0 * 0 eth0 192.168.2.0 255.255.255.0 * 0 eth0 default 0.0.0.0 <public-router> 15 eth1 default 0.0.0.0 <public-router> 40 eth2 default 0.0.0.0 <public-router> 40 eth1 

public-net ……公有子网地址(internet-uplink)

public-router …上行路由器的地址

路由器是一个只有Web界面的思科RV320,这就是我所能得到的。 PS:这是一个负载平衡的双上行链路设置,但这不应该有所不同的ARP问题。

路由器上的路由表看起来不正确。 它看起来好像从路由器上运行的两个VLAN都没有标记。

我不知道交换机是如何设法将数据包从路由器传送到A和B,当路由器明显地将所有数据包发送到交换机,而不指示它们属于哪个VLAN。 我正在使用的开关将无法做到这一点。 但也许你正在使用一个交换机的品牌,可以以某种方式正确地猜测发送数据包的VLAN。

但是从路由器的angular度来看,A和B在同一个以太网段上,这意味着路由器需要指示A和B直接通信而不涉及路由器。 这就是沟通失败的地方。

路由表条目看起来像这样:

 192.168.1.0 255.255.255.0 * 0 eth0 192.168.2.0 255.255.255.0 * 0 eth0 

实际上应该是这样的:

 192.168.1.0 255.255.255.0 * 0 eth0.1 192.168.2.0 255.255.255.0 * 0 eth0.20 

虚拟接口eth0.1eth0.20可以使用以下命令创build:

 vconfig add eth0 1 vconfig add eth0 20 

为我find一个解决scheme:我把主机A和子网192.168.1.0/24到ID为10的新VLAN。现在一切都很好。 对于我的整体configuration来说是可以的,但是仍然奇怪,它不适用于VLAN ID 1.也许路由器是问题,它以特殊的方式处理VLAN 1。 但是如何影响Linux的ARP行为呢? 还是一个问题。

您在VLAN-1上看到的行为通常是因为vlan id是未标记的交换机上的pipe理vlan。