我有两个 IP 分配给同一个接口(主机 A):
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether a4:bf:01:24:f8:7c brd ff:ff:ff:ff:ff:ff
inet 10.10.200.22/24 brd 10.10.100.255 scope global eth1
valid_lft forever preferred_lft forever
inet 10.10.200.155/32 scope global eth1
valid_lft forever preferred_lft forever
并且有些服务正在监听10.10.200.155:80
。当我尝试 telnet 端口 80 时,连接挂起(源地址10.10.201.2
,主机 B)。tcpdump
主机 A 上显示了类似以下内容的内容(重复):
# tcpdump -n -i any dst 10.10.200.155
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
21:52:16.894558 IP 10.10.201.2.60262 > 10.10.200.155.80: Flags [S], seq 1239565567, win 29200, options [mss 1460,sackOK,TS val 1965969834 ecr 0,nop,wscale 7], length 0
21:52:17.893363 ARP, Request who-has 10.10.200.155 tell 10.10.200.155, length 28
21:52:17.893732 IP 10.10.201.2.60262 > 10.10.200.155.80: Flags [S], seq 1239565567, win 29200, options [mss 1460,sackOK,TS val 1965970084 ecr 0,nop,wscale 7], length 0
21:52:18.893319 ARP, Request who-has 10.10.200.155 tell 10.10.200.155, length 28
21:52:19.893374 IP 10.10.200.155 > 10.10.200.155: ICMP host 10.10.201.2 unreachable, length 68
21:52:19.893385 IP 10.10.200.155 > 10.10.200.155: ICMP host 10.10.201.2 unreachable, length 68
21:52:19.893393 IP 10.10.200.155 > 10.10.200.155: ICMP host 10.10.201.2 unreachable, length 68
21:52:19.893400 IP 10.10.200.155 > 10.10.200.155: ICMP host 10.10.201.2 unreachable, length 68
21:52:19.897746 IP 10.10.201.2.60262 > 10.10.200.155.80: Flags [S], seq 1239565567, win 29200, options [mss 1460,sackOK,TS val 1965970585 ecr 0,nop,wscale 7], length 0
一些通信已到达10.10.200.155
,但有奇怪的(?)ARP 请求来自10.10.200.155
自身,这正常吗?后台没有其他流量,因此所有这些数据包都是在 telnet 上生成的。主机 A 上tcpdump
没有显示任何内容tcpdump -n -i any dst 10.10.201.2
。这些地址的路由:
10.10.200.0/24 dev eth1 proto kernel scope link src 10.10.200.22
10.10.201.2 via 10.10.200.155 dev eth1
您知道为什么流量无法传回吗10.10.201.2
?
答案1
您的第二个 IP 似乎有误。您正在分配另一个具有不同子网掩码 (/32) 的 IP。
分配具有相同子网掩码的辅助 IP。评论中提供了示例:使用“ip”命令在 CentOS/RHEL 6 中重启后保留 IP 地址别名
答案2
看来我找到了一些临时解决方法。在将新 IP 添加到接口后,我必须重新flush
关联路由并再次添加它。然后通信就可以完美地工作了。有人知道为什么会这样吗?
答案3
我遇到过这种情况,只不过方式略有不同,根本原因是我的“ip route add”命令有误,我没有执行“ip route add via<远程网关 IP 地址>dev <本地接口>'我做了'ip route add via<本地接口 IP 地址>dev <local interface>'。我不是说这是你的问题,只是检查一下。