1:1 NAT 与 OPNsense 和 GRE 隧道,仅转换部分数据包

1:1 NAT 与 OPNsense 和 GRE 隧道,仅转换部分数据包

我的家用路由器是运行 OPNsense 的虚拟机。我有一台专用服务器,该服务器有路由到它的 IPv4 子网,并且我已从专用服务器到家用路由器设置了 GRE 隧道,以便我可以在家中使用这些 IP 地址。

在专用服务器上,我已经设置了通过 GRE 隧道进行路由的子网。

在 OPNsense 中,我已经设置了 GRE 隧道,并添加了虚拟 IP。

问题是,当我设置 1:1 NAT 时,只有一些数据包的源地址被转换。在设置了 1:1 NAT 的客户端上,内部 IP 为192.168.254.106,外部 IP 为(例如),176.9.x.x

每当我ping 8.8.8.8在客户端上运行时,只有第一个 ping 返回。

ubuntu@ubuntu:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=32.8 ms
^C
--- 8.8.8.8 ping statistics ---
6 packets transmitted, 1 received, 83% packet loss, time 5081ms
rtt min/avg/max/mdev = 32.875/32.875/32.875/0.000 ms

这是我tcpdump -i gre0 icmp在 OPNsense 路由器上运行时看到的。(gre0即 GRE 隧道)

root@core1:~ # tcpdump -i gre0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gre0, link-type NULL (BSD loopback), capture size 262144 bytes
12:26:35.361531 IP 176.9.x.x > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 1, length 64
12:26:35.393693 IP google-public-dns-a.google.com > 176.9.x.x: ICMP echo reply, id 1784, seq 1, length 64
12:26:36.362530 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 2, length 64
12:26:37.371299 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 3, length 64
12:26:38.395302 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 4, length 64
12:26:39.419105 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 5, length 64
12:26:40.443423 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 6, length 64

是不是有 bug,还是我做错了什么?它应该转换所有数据包的源 IP,但它只对部分数据包进行转换。(如果让 ping 运行一段时间,一个数据包将再次被转换,然后它将停止转换数据包。)

答案1

不幸的是,只有一种解决方法我能够成功使用。

在提出这个问题时(直到今天),我的 ISP 的调制解调器中有一个错误,导致它们在处理 GRE 或 IPIP 时出现故障。解决方案是使用带有 GRE 的 Foo over UDP,效果很好。但是,据我所知,OPNsense 无法使用它,所以我切换到专用的 Ubuntu VM。现在一切正常。

相关内容