
rhel8 を実行している kvm ホストでは、一部の入力および転送ルールが正常に動作していますが、特定のブリッジである virbr0 のトラフィックを偽装して、転送チェーンを使用せずにインターネットに接続しようとしています。したがって、このvirbr0ブリッジを使用しない仮想マシンまたはシステムコンテナは、発信トラフィックを偽装しないでください。
このvirbr0ブリッジのIPは192.168.100.1/24です。このブリッジを使用する仮想マシンのアドレスは192.168.200.2/24で、デフォルトのgwのIPアドレスはvirbr0です。 kvmホストのDNSリゾルバを指す仮想マシンでDNSクエリを確認できます。
これは私のnftリストルールセットです。
table inet host {
chain input {
type filter hook input priority filter; policy drop;
iif lo accept
ct state established,related accept
iifname eth0 tcp dpor { port, port } accept
}
chain forward {
type filter hook forward priority filter; policy drop;
ct state established,related accept
# several rules similar to this one
iifname other-brige oifname tun0 ip saddr x.x.x.x/xx ip daddr { set addresses } tcp dports { set ports } accept
# here I allow http traffic coming from virbr0 or it will be dropped by nftables (seen in log)
iifname virbr0 oifname gw0 tcp dport { 80, 443 } accept
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority filter; policy accept;
}
chain postrouting {
type nat hook postrouting priority mangle; policy accept;
oifname virbr0 masquerade
}
}
kvmホストの正しいインターフェイスからトラフィックが出てくることを確認したため、何か間違っていること間違いなしですが、おそらく正しく偽装されていないため、インターネットホストがどうすべきか分からず削除します。
答え1
はい、私は何か間違っていました。
ポストパス nat チェーンにソース nat アドレスを追加する必要があります。
だから:
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 192.168.100.0/24 iifname virbr0 oifname gw0 snat to x.x.x.x
oifname virbr0 masquerade
}
}
今私の要件を満たしています。