ヘアピンNAT(ループバック)
OpenWrtでときどき、接続できないポートがあって、不思議だなと思ってたらNATがループバックしてなかった。
設定→ネットワーク
ネットワーク→ファイアウォール→ポートフォワーディングの順にたどって該当のport forwarding についての、詳細(Advance)を見るとチェックボックスがある。このチェックボックスのチェックをするだけでオッケ。(よく忘れる)
ヘアピンNATをiptablesで実現するとしたら
ヘアピンNAT( loopback NAT/ redirect NAT) を実現するとしたら。
PPPoEのデバイスに、DNATとSNATを噛ましてあげれば動く。
iptables -t nat -D PREROUTING -i $LAN_DEV -s $LAN_NETWORK_ADDR/24 -d $PPPOE_IPADDR -p tcp -m tcp --dport 443 -j DNAT --to-destination $TARGET
ルーターの場合SNATはマスカレードで入っていることが多いのでそのままで通る。 マスカレードしていいなら記述は不要。
LANをMASQURADE(NAPT)してないなら、SNATを書いてルーターからのパケットとしてあげる。などで対応が可能。
iptables -t nat -A POSTROUTING -o $LAN_DEV -s $LAN_NET_ADDR/24 -d $TARGET -p tcp -m tcp --dport 443 -j SNAT --to-source $ROUTER_IP
Before
たとえば、wireguard VPN経由( 172.16.4.0/24 ) のパケットがNATループバックをしてない。
root@OpenWrt:/etc/config# iptables -t nat -L | grep 443 DNAT tcp -- 192.168.10.0/24 ""ISP v4*** tcp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT udp -- 192.168.10.0/24 ""ISP v4*** udp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT tcp -- 172.16.4.1 ""ISP v4*** tcp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT udp -- 172.16.4.1 ""ISP v4*** udp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT tcp -- anywhere anywhere tcp dpt:https /* !fw3: atom-https */ to:192.168.10.24:443 DNAT udp -- anywhere anywhere udp dpt:https /* !fw3: atom-https */ to:192.168.10.24:443
After
VPN経由( 172.16.4.0/24 )のパケットも443 でループバックするようになった。
root@OpenWrt:~# iptables -t nat -L | grep 443 DNAT tcp -- 192.168.10.0/24 ""ISP v4*** tcp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT udp -- 192.168.10.0/24 ""ISP v4*** udp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT tcp -- 172.16.4.0/24 ""ISP v4*** tcp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT udp -- 172.16.4.0/24 ""ISP v4*** udp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT tcp -- 172.16.4.1 ""ISP v4*** tcp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT udp -- 172.16.4.1 ""ISP v4*** udp dpt:https /* !fw3: atom-https (reflection) */ to:192.168.10.24:443 DNAT tcp -- anywhere anywhere tcp dpt:https /* !fw3: atom-https */ to:192.168.10.24:443 DNAT udp -- anywhere anywhere udp dpt:https /* !fw3: atom-https */ to:192.168.10.24:443
ループバックの設定
ループバックの設定は、config でも行える。