接口的IP地址不一致

这很奇怪。

ip route show输出ip route show

 default via 192.168.1.1 dev eth0 metric 100 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.11 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.58 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 

防火墙日志:(稍微缩短)

 Mar 8 09:17:12 vmhost kernel: [ 562.808036] ''IN-dmz-lan-face':'IN=eth1 OUT= MAC=... SRC=192.168.1.108 DST=192.168.1.58 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=28218 DF PROTO=TCP SPT=47365 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0 

注意古怪的差异?

防火墙日志列出地址192.168.1.58处的eth1 ,但路由表将其放在192.168.1.10

不知何故, eth1eth0正在交换,或他们的IP地址是。

没有额外的路由表在玩。

这怎么可能发生? 我该如何解决?


编辑 (更多信息)

ip addr | grep "inet "输出 ip addr | grep "inet "

 inet 127.0.0.1/8 scope host lo inet 192.168.1.58/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1 inet 192.168.1.11/24 brd 192.168.1.255 scope global eth2 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 

没有差异。

 IN=eth1 OUT= SRC=192.168.1.108 DST=192.168.1.58 PROTO=TCP SPT=47365 DPT=22 

防火墙日志列出地址192.168.1.58处的eth1,但路由表将其放在192.168.1.10处。

不,防火墙告诉你它已经收到来自eth1的目的地为192.168.1.58的数据包。 这并不奇怪:您networking上的任何人都可以在您的服务器所连接的接口上发送任何虚假数据包。 如果这是一个问题,责怪发件人。

但请注意,Linux内核默认使用弱主机模式。 这意味着如果目的地址与其任何一个接口上的目标地址匹配,它将接受一个数据包作为自己的数据包 所以内核会接受这个包是合法的。

这种弱主机模式也反映在ARP行为上:默认情况下,内核将在其任何接口上为192.168.1.58地址应答ARP。 如果所有接口都连接到同一个网段,那么请求192.168.1.58的用户可能会到达您的3个接口中的任何一个。 如果不需要,请将arp_ignore sysctl设置为1。

而且,你的路由表是不寻常的,如果没有错的话。 如果你要求内核连接到192.168.1.108,它应该使用什么接口? 实际的答案是由ip route get 192.168.1.108命令给出的。 这可能不是你所期望的。