nftables ファイアウォール経由の静的ルート

nftables ファイアウォール経由の静的ルート

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 ...) によってすでに処理されています。

関連情報