![OPNsenseとGREトンネルを使用した1:1 NATでは、一部のパケットのみが変換されます。](https://rvso.com/image/1592530/OPNsense%E3%81%A8GRE%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F1%3A1%20NAT%E3%81%A7%E3%81%AF%E3%80%81%E4%B8%80%E9%83%A8%E3%81%AE%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%81%AE%E3%81%BF%E3%81%8C%E5%A4%89%E6%8F%9B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82.png)
私の自宅ルーターは、OPNsense を実行する仮想マシンです。IPv4 サブネットがルーティングされた専用サーバーがあり、自宅で IP アドレスを使用できるように、専用サーバーから自宅ルーターへの GRE トンネルを設定しました。
専用サーバーでは、サブネットが 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
バグがあるのでしょうか、それとも私が何か間違ったことをしたのでしょうか? すべてのパケットの送信元 IP を変換することになっていますが、一部のパケットに対してのみ変換が行われます。(ping をしばらく実行したままにしておくと、1 つのパケットが再び変換され、その後パケットの変換が停止します。)
答え1
残念ながら、私がうまく使用できた回避策は 1 つしかありません。
質問があった当時、そして現在も、私の ISP のモデムにはバグがあり、GRE または IPIP を扱うときにモデムが壊れてしまいます。解決策は、GRE を含む UDP 経由の Foo で、これはうまく機能します。ただし、私の知る限り、OPNsense はこれに対応していないため、専用の Ubuntu VM に切り替えました。今ではすべて正常に動作しています。