nftables
以下は、仮想マシンからLANにIPをなりすます2つのサンプルNATルールを含む関連サンプルルールのセットです。
#!/usr/sbin/nft -f
add table nat_4
# Sees all packets after routing, just before they leave the local system
add chain nat_4 postrouting_nat_4 {
type nat hook postrouting priority srcnat; policy accept;
comment "Postrouting SNAT IPv4 traffic"
}
# Masquerade all packets going from VMs to the LAN/Internet
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade to :1024-65535
# Same rule as above but without [to :PORT_SPEC]
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade
例IPアドレスは、192.168.122.0/24
仮想マシンが実行されているネットワークアドレスです。
私が理解しているように、ソースIPをアウトバウンドインターフェイスIPに変更することによって行われますmasquerade
。この意味で、私は上記の例の2番目のルールの役割を理解しています。SNAT
私が理解していないのは[to:PORT_SPEC]ステートメントです(ドキュメントリンク)、はい(最初のルール):masquerade to :1024-65535
正確に何をmasquerade to :1024-65535
指定する必要がありますか?
これらの2つのルールは基本的に同じですか、それとも違いがありますか?
localhostの仮想スイッチを介して仮想マシンからインターネットにNATするのにどちらが良いですか?
答え1
iptablesターゲットのドキュメントを見ると、状況がより明確になると思いますMASQUERADE
。 ~からiptables-extensions(8)
:
仮面舞踏会
[...]
--to-ports port[-port]
これは、デフォルトのSNATソースポート選択ヒューリスティック(上記を参照)をオーバーライドして、使用するソースポートの範囲を指定します。これは、ルールが tcp、udp、dccp、または sctp プロトコルのいずれかを指定する場合にのみ機能します。
NFTルールのオプションはto :PORT_SPEC
同じことを行います。つまり、接続を偽装するために使用されるソースポートを指定します。