ping が iptables/postrouting ルールを無視するかどうか

ping が iptables/postrouting ルールを無視するかどうか

proxmoxがインストールされており、アウトバウンド接続(eth0)が1つしかないサーバーがあります。

マシン間のネットワークを有効にするために、インターフェイス設定にブリッジ(vmbr0)を作成し、Proxmoxネットワークモデル(サブノードNAT)に従って設定しました。

ブリッジはIPを所有し、10.1.1.1私の理解によれば、ローカルネットワークと外部ネットワーク間のゲートウェイとして機能します。

これを実現するには、サーバーで次の iptable ポリシーを実装します。

Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  10.1.1.0/24          anywhere
ACCEPT     all  --  anywhere             10.1.1.0/24

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  10.1.1.0/24          anywhere             to:x.x.x.x

サーバーにインストールされ、ブリッジを介して接続されている仮想マシンの1つからGoogle DNSサーバーをpingすると、仮想ping 8.8.8.8マシンはGoogle DNSサーバーからping結果を取得できるため、NATが機能しているようです。

(natは再びフルサブネット(10.1.1.0/24)を表します。)

これを行うと、ping -I vmbr0 8.8.8.8しかしホストではpingコマンドが失敗します。この ping コマンドは、ブリッジ インターフェイスを使用して Google DNS サーバーを ping します。 POSTROUTINGポリシーを通じてGoogle DNSサーバーとも通信できると予想されます。

つまり、他のクライアントがブリッジをゲートウェイとして使用するとインターネットに接続できますが、インターフェイス自体が発信インターフェイスとして選択されている場合、パスを見つけることができません。

したがって、これは私の質問を引き起こします。インターフェイスを明示的に使用すると、ポストルーティングルールをスキップし、実際に問題のコンピュータでルーティングするための絶対エンドポイントと見なされますか?- in a sense: vmbr0 stays vmbr0 and never will be masqueraded to eth0 if you choose to ping over it -

答え1

man ping、太字:

-I インターフェイス
インターフェイスは次のとおりです。住所またはインターフェース名。インターフェイスが次の場合住所、これは以下を設定します。ソースアドレス指定されたインターフェイスアドレスへ。インターフェイスが次の場合インターフェース名、これは以下を設定します。ソースインターフェース指定されたインターフェイスに。

ping -I vmbr0問題は、システムが最終的に正しいインターフェイスを選択するのではなく、インターフェイスを強制的に使用することですping -I 10.1.1.1

また、特に差がなくてもnat/POSTROUTING(下記参照)、いいえホストでコマンドが実行されるとルーティングが実行されるため、一部のチェーン(例filter/FORWARD:)が適用されない可能性があります(ただし、nat/POSTROUTINGまだ適用されます。以下を参照)。代わりに、ホストでコマンドを実行すると、他の結果が表示される可能性があることに注意してください。ルーティング済みVM は、正しい ping コマンドを使用している場合は該当しない場合でも、ルールによって異なります。

これ一般ネットワークのNetfilterとパケットフローOUTPUT回路図は、他のチェーンを通過した後もローカルプロセスから来るパケットは引き続き通過するため、nat/POSTROUTINGパケットがeth0それを通過してもまだSNAT処理されることを示しています。これは以下を使用して行われます。ping -I 10.1.1.1 8.8.8.8

一方、強制インタフェースを使用している場合、ping -I vmbr0 8.8.8.8実行すると、tcpdump10.1.1.1vmbr0から8.8.8.8までのARP要求が応答しないことがわかります。

最後の質問について:はい、強制ルーティングはパケットが正しい宛先に到達することを許可しません。vmbr0SNAT/MASQUERADEは決して変装できません。パケットIP、インターフェイスではなく宛先へのパスに従って適用されます。

関連情報