我遇到了一个奇怪的问题。几天前重启服务器后,它无法正确路由其数据包。如果这些数据包来自特定网络,它基本上不会做出响应(例如 ping)。
这是虚拟机(Qemu、KVM、Debian 10)。在同一台主机上有另一台虚拟机,与有问题的虚拟机几乎完全相同,运行正常。
它们使用相同的网桥进行通信,都使用 virtio 驱动程序作为其网络接口,都具有空的 iptables,并且它们的路由表相同。
受影响的服务器的 IP 为 172.16.0.30。正常运行的服务器的 IP 为 172.16.0.93。
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.16.0.1 0.0.0.0 UG 0 0 0 ens10
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens10
172.16.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens3
-------------------------------------------
root@server:~# iptables --list
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
-------------------------------------------
root@server:~# ip addr show dev ens10
4: ens10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:87:2a:5f brd ff:ff:ff:ff:ff:ff
inet 172.16.0.30/24 brd 172.16.0.255 scope global ens10
valid_lft forever preferred_lft forever
例如,如果我 ping 客户端 172.16.34.123,服务器上的 ping 命令会告诉我,它没有收到任何数据包。但网关和服务器本身上的 tcpdump 显示,服务器收到了数据包,但不知何故没有对它们做出反应。
root@opsi:~# ping 172.16.34.123
PING 172.16.34.123 (172.16.34.123) 56(84) bytes of data.
--- 172.16.34.123 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 70ms
-------------------------------------------
root@server:~# tcpdump -n -i ens10 host 172.16.34.123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens10, link-type EN10MB (Ethernet), capture size 262144 bytes
09:37:56.850996 IP 172.16.0.30 > 172.16.34.123: ICMP echo request, id 1293, seq 1, length 64
09:37:56.852292 IP 172.16.34.123 > 172.16.0.30: ICMP echo reply, id 1293, seq 1, length 64
09:37:57.869612 IP 172.16.0.30 > 172.16.34.123: ICMP echo request, id 1293, seq 2, length 64
09:37:57.870655 IP 172.16.34.123 > 172.16.0.30: ICMP echo reply, id 1293, seq 2, length 64
09:37:58.893600 IP 172.16.0.30 > 172.16.34.123: ICMP echo request, id 1293, seq 3, length 64
09:37:58.894489 IP 172.16.34.123 > 172.16.0.30: ICMP echo reply, id 1293, seq 3, length 64
就像我说的,连接到同一网桥的另一台机器没有这个问题。如果我从另一台机器 ping 服务器,服务器会收到数据包,但不会发送回复。直到几天前,这台服务器工作正常。我尝试更改网络设备、网络驱动程序,并在 dhcp 和静态设置之间更改配置。
ping 另一个网络(10.8.0.0)就可以了。
root@server:~# ping 10.8.0.39
PING 10.8.0.39 (10.8.0.39) 56(84) bytes of data.
64 bytes from 10.8.0.39: icmp_seq=1 ttl=63 time=22.8 ms
64 bytes from 10.8.0.39: icmp_seq=2 ttl=63 time=25.10 ms
64 bytes from 10.8.0.39: icmp_seq=3 ttl=63 time=23.9 ms
^C
--- 10.8.0.39 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 22.794/24.212/25.975/1.321 ms
--------------------------------------------
root@server:~# tcpdump -n -i ens10 -qtln icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens10, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 172.16.0.30 > 10.8.0.39: ICMP echo request, id 3556, seq 1, length 64
IP 10.8.0.39 > 172.16.0.30: ICMP echo reply, id 3556, seq 1, length 64
IP 172.16.0.30 > 10.8.0.39: ICMP echo request, id 3556, seq 2, length 64
IP 10.8.0.39 > 172.16.0.30: ICMP echo reply, id 3556, seq 2, length 64
IP 172.16.0.30 > 10.8.0.39: ICMP echo request, id 3556, seq 3, length 64
IP 10.8.0.39 > 172.16.0.30: ICMP echo reply, id 3556, seq 3, length 64
知道可能是什么原因吗?
答案1
解决了。删除了网关上此接口的 arp 表条目。它创建了一个新条目,现在又可以正常工作了。