使用 OPNsense 和 GRE 隧道的 1:1 NAT,僅轉換部分資料包

使用 OPNsense 和 GRE 隧道的 1:1 NAT,僅轉換部分資料包

我的家庭路由器是運行 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 時崩潰。解決方案是 Foo over UDP,其中包含 GRE,效果很好。然而,據我所知,OPNsense 無法使用它,因此我改用了專用的 Ubuntu VM。現在一切正常。

相關內容