nftables を使用してこれを行う方法の完全な例を探しています。アップストリーム インターフェイスでは DHCP クライアントであり、他のインターフェイスでは 192.168.0.0/24 LAN を持ち、ファイアウォールとしても機能する必要があります。
アップストリーム インターフェイスで ssh ポートを開き、ポート 80 のトラフィックを LAN 上の他のサーバーに転送すると、追加のクレジットが付与されます。
nftables wikiには、いくつかの質問に対する回答が残されていない。例えば、偽装に関するセクションマスカレード ルールを 1 つのインターフェースと他のインターフェースとでどのように関連付けるかについては説明されていません。
答え1
以下は私が使用しているもので、lan0
社内ネットワークとwan0
ISP に接続されているものと想定しています。
「アップストリーム インターフェイス上の 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を使用します。