我几乎无法用语言表达我遇到的问题,但我会试一试。
我有一个 pfsense 路由器,我在其上设置了 openvpn 作为客户端连接到另一个网络。
这几个月来一直完美无缺,但现在不再有效。我对防火墙进行了我认为不相关的更改,并进行了少量备份,以便能够回滚并验证它们是否可能是问题的根源。
我已经尝试将 openvpn 连接从 udp 移动到 tcp,如果原因是连接不稳定,希望能够修复。没有差异。
利用防火墙本身的隧道似乎完美无缺。
在我的笔记本电脑上设置相同的隧道似乎完美无缺。
但是当隧道启动并且我的局域网上的(不同的)单元尝试穿越它时,它无法正常工作。我遇到的最奇怪但最可靠的问题示例是 ping 远程单元。它每秒钟工作一次。如果 ping 在同一个 ping 运行中的所有包都有效,则得到正确的回复。如果我ctrl-c再试一次,每个包都会失败。这可以无限重复。
如何解释这种行为?
在防火墙上,我可以使用 tcpdump 看到 LAN 接口上的流量,如下所示:
# echo "FAILED"; tcpdump -i igb0 -n -vvv host 172.16.66.2 and icmp
FAILED
tcpdump: listening on igb0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:35:04.521732 IP (tos 0x0, ttl 64, id 25001, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 58627, seq 0, length 64
21:35:05.527179 IP (tos 0x0, ttl 64, id 16857, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 58627, seq 1, length 64
21:35:06.532373 IP (tos 0x0, ttl 64, id 31585, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 58627, seq 2, length 64
21:35:07.533037 IP (tos 0x0, ttl 64, id 46426, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 58627, seq 3, length 64
21:35:08.538315 IP (tos 0x0, ttl 64, id 41339, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 58627, seq 4, length 64
和下一次尝试:
# echo "SUCCESS"; tcpdump -i igb0 -n -vvv host 172.16.66.2 and icmp
SUCCESS
tcpdump: listening on igb0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:35:23.228088 IP (tos 0x0, ttl 64, id 32178, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 60163, seq 0, length 64
21:35:23.237680 IP (tos 0x0, ttl 63, id 54367, offset 0, flags [none], proto ICMP (1), length 84)
172.16.66.2 > 10.11.12.182: ICMP echo reply, id 60163, seq 0, length 64
21:35:24.229373 IP (tos 0x0, ttl 64, id 38273, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 60163, seq 1, length 64
21:35:24.238655 IP (tos 0x0, ttl 63, id 54368, offset 0, flags [none], proto ICMP (1), length 84)
172.16.66.2 > 10.11.12.182: ICMP echo reply, id 60163, seq 1, length 64
21:35:25.230248 IP (tos 0x0, ttl 64, id 13988, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 60163, seq 2, length 64
21:35:25.239532 IP (tos 0x0, ttl 63, id 54369, offset 0, flags [none], proto ICMP (1), length 84)
172.16.66.2 > 10.11.12.182: ICMP echo reply, id 60163, seq 2, length 64
21:35:26.235280 IP (tos 0x0, ttl 64, id 62651, offset 0, flags [none], proto ICMP (1), length 84)
10.11.12.182 > 172.16.66.2: ICMP echo request, id 60163, seq 3, length 64
21:35:26.244645 IP (tos 0x0, ttl 63, id 54370, offset 0, flags [none], proto ICMP (1), length 84)
172.16.66.2 > 10.11.12.182: ICMP echo reply, id 60163, seq 3, length 64
我不能说我看到任何将工作包与被忽略的包区分开来的东西。
使用相同的 tcpdump(或多或少,针对 openvpn NAT 进行了调整)我已经能够验证没有得到任何回复的 ping 数据包永远不会到达远程端。当然,那些确实按预期到达的。

