Linux で nftables を使用して NAT マスカレードを完全に実行する例はありますか?

Linux で nftables を使用して NAT マスカレードを完全に実行する例はありますか?

nftables を使用してこれを行う方法の完全な例を探しています。アップストリーム インターフェイスでは DHCP クライアントであり、他のインターフェイスでは 192.168.0.0/24 LAN を持ち、ファイアウォールとしても機能する必要があります。

アップストリーム インターフェイスで ssh ポートを開き、ポート 80 のトラフィックを LAN 上の他のサーバーに転送すると、追加のクレジットが付与されます。

nftables wikiには、いくつかの質問に対する回答が残されていない。例えば、偽装に関するセクションマスカレード ルールを 1 つのインターフェースと他のインターフェースとでどのように関連付けるかについては説明されていません。

答え1

以下は私が使用しているもので、lan0社内ネットワークとwan0ISP に接続されているものと想定しています。

「アップストリーム インターフェイス上の DHCP クライアント」とはどういう意味かわかりません。これは、nftables ではなく DHCP クライアントで実行されるためです。以下の設定では送信トラフィックが制限されないため、DHCP 要求は通過します。

#!/usr/bin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    # allow established/related connections
    ct state {established, related} accept

    # early drop of invalid connections
    ct state invalid drop

    # allow from loopback
    iifname lo accept

    # Allow from internal network
    iifname lan0 accept

    # allow icmp
    ip protocol icmp accept

    # allow ssh
    tcp dport 22 accept comment "SSH in"

    reject
  }

  chain forward {
    type filter hook forward priority 0;

    # Allow outgoing via wan0
    oifname wan0 accept

    # Allow incoming on wan0 for related & established connections
    iifname wan0 ct state related, established accept

    # Drop any other incoming traffic on wan0
    iifname wan0 drop
  }

  chain output {
    type filter hook output priority 0;
  }

}

table ip nat {
  chain prerouting {
    type nat hook prerouting priority 0;

    # Forward traffic from wan0 to a LAN server
    iifname wan0 tcp dport 80 dnat 192.168.0.8 comment "Port forwarding to web server"
  }

  chain postrouting {
    type nat hook postrouting priority 0;

    # Masquerade outgoing traffic
    oifname wan0 masquerade
  }
}

答え2

マスカレードはSNATの特別なケースです。トラフィックを出力インターフェースまたは出力アドレス(内部IPの送信元アドレス)に接続する場合は、SNATを使用します。

関連情報