2つのNICを備えたゲートウェイ「X」があります
enp0s3 (192.168.0.100) は 192.168.0.0/24 に接続されています (これは WAN ネットワークであると仮定します)
enp0s8 (172.16.0.1) は 172.16.0.0/24 (おそらく LAN ネットワーク) に接続されています
nftables を使用して NAT 接続を作成し、LAN (172.16.0.0/24) 内のホストがゲートウェイ「X」経由でインターネットを閲覧できるようにしました。
/etc/nftables/nftables_firewall
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state {established, related} accept
ct state invalid drop
iifname lo accept
iifname enp0s8 accept
ip protocol icmp accept
reject
}
chain forward {
type filter hook forward priority 0;
oifname enp0s3 accept
iifname enp0s3 ct state related, established accept
iifname enp0s3 drop
}
chain output {
type filter hook output priority 0;
}
}
/etc/nftables/nftables_nat
flush ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
}
chain postrouting {
type nat hook postrouting priority 0;
oifname enp0s3 masquerade
}
}
ここで、ゲートウェイ「X」経由で LAN (172.16.0.0/24 ネットワーク) 内のホストにアクセスするために、WAN (192.168.0.0/24 ネットワーク) からのラップトップであるホスト (192.168.0.101) が必要です。つまり、WAN 内のこのホスト (192.168.0.101) から LAN (172.16.0.0/24 ネットワーク) への静的ルートを構成する必要があります。
これは、wlo1インターフェース経由で192.168.0.0/24ネットワーク上にあるラップトップに追加しようとしている静的ルートです。
ip route add 172.16.0.0/24 via 192.168.0.100 dev wlo1
ゲートウェイ ファイアウォールのルールにより、これらのパケットが 172.16.0.0/24 ネットワークに入るのがブロックされます。
ゲートウェイでこれを許可するにはどうすればよいですか?
ファイアウォールのルールによってパケットがドロップされているのは分かっています。
テスト
ping 172.16.0.2
実行中に192.168.0.101から
tcpdump -lnni any src 192.168.0.101
ゲートウェイ「X」からの返信
11:41:53.240815 IP 192.168.0.101 > 172.16.0.2: ICMP echo request, id 8, seq 1, length 64
11:41:54.243947 IP 192.168.0.101 > 172.16.0.2: ICMP echo request, id 8, seq 2, length 64
11:41:58.247687 ARP, Request who-has 192.168.0.100 tell 192.168.0.101, length 46
答え1
あなたの二ルールセットには欠陥があります:
flush ruleset
両方を順番に実行すると、flush ruleset
最後のものだけが残ります。
それぞれflush ruleset
を次のように変更する必要があります。
table inet filter
delete table inet filter
そして:
table ip nat
delete table ip nat
初回使用時に失敗したり、重複したり、他のテーブルに影響を与えたりしない冪等なテーブル定義を毎回取得する他のテーブル。
さて、質問ですが、これは、適切な場所、つまりドロップ ルールの前に、次のいずれかでこれを許可する転送ルールを挿入するのと同じくらい簡単です。
# nft insert rule inet filter forward index 2 ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
または:
# nft add rule inet filter forward index 1 ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
テストする、
または、適切な場所でルールセットを直接編集して保持します。
...
iifname enp0s3 ct state related, established accept
ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
iifname enp0s3 drop
...
iifname enp0s3
安全性を高めるために、オプションでルールに(=> )を追加できますiifname enp0s3 ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
。
戻りトラフィックはステートフル ルール ( ... ct state related, established ...
) によってすでに処理されています。