Ich versuche, NAT-Hairpinning auf meinem Router zum Laufen zu bringen. Ich kann nicht auf meinen lokalen Website-Host in meinem LAN (192.168.1.3) zugreifen. Ich verwende nftables mit der folgenden Konfiguration:
enp1s0 = WAN enp2s0 = LAN
#!/sbin/nft -f
flush ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
iifname "enp1s0" tcp dport { 80, 443 } dnat to 192.168.1.3
meta nftrace set 1
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
ip saddr 192.168.1.0/24 ip daddr 192.168.1.3 tcp dport { http, https } counter snat 192.168.1.1
oifname "enp1s0" masquerade
meta nftrace set 1
}
}
Wie genau kann ich Hairpinning zum Laufen bringen? Ich habe Leute gesehen, die Split-DNS verwenden, aber ich bin mir nicht ganz sicher, wie man das einrichtet.
Antwort1
Um NAT Hairpinning in nftables durchzuführen, können Sie eine DNAT-Regel hinzufügen, die überprüft, ob die Zieladresse der Pakete die externe IP Ihres Netzwerks ist. Sie müssen auch Masquerading auf der internen Schnittstelle (LAN) durchführen.
flush ruleset
define wan = enp1s0
define lan = enp2s0
define webserver = 192.168.1.3
define extip = 1.2.3.4
table ip nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
tcp dport { 80, 443 } ip daddr $extip dnat to $webserver
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oif $wan masquerade
oif $lan masquerade
}
}