🚪
nftables で NAPT する
nftablesでNAPT(IPアドレスとポートの両方を変換中継)する設定のズバリな情報が意外と少なかったので記録しておく。
経緯
クライアントから宛先サーバのポート22にアクセスしたいが以下の条件のだったので、中継サーバにNAPTを設定した。
- 宛先サーバのポートをグローバルに直接はオープンしない
- 宛先サーバと中継サーバはVPNで接続されている
- 接続元クライアントはVPNに参加させない
- 中継サーバのポート22は既に使用中
設定
nft add table inet nat
nft add chain inet nat prerouting { type nat hook prerouting priority -100 \; }
nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule inet nat prerouting ip daddr 172.16.0.1 tcp dport 2222 dnat 10.0.0.3:22
nft add rule inet nat prerouting ip6 daddr [グローバルIPv6アドレス] tcp dport 2222 dnat [fd00::3]:22
nft add rule inet nat postrouting masquerade
設定結果
table inet nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
ip daddr 172.16.0.1 tcp dport 2222 dnat ip to 10.0.0.3:22
ip6 daddr [グローバルIPv6アドレス] tcp dport 2222 dnat ip6 to [fd00::3]:22
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
masquerade
}
}
Discussion