NATルールが機能しない

NATルールが機能しない

私のホストで次のようになります。

      veth5
     10.0.0.3
        o  
        |
   ------------    -----------------                    eth0
   |   br0    |----|--o         o--|----o           o------o------ internet
   ------------    | veth3   veth6 | veth7         ppp0
                   |               |            192.168.0.2                    |   namespace   |
                   -----------------

ルーティングの設定は、ポリシーベースのルーティングを使用して実行されます。これにより、ホストからインターネットに送信されたパケット(pingなど)はveth5を介して自分のネットワークに入り、名前空間に入ります。ここで veth7 に渡され、次に ppp0 に渡され、インターネットに渡されます。

ppp0 IP(192.168.0.2)を使用してすべての内部IPアドレスを偽装するようにNATルールを設定したいと思います。その後、iptablesを使用してルールを追加しました。

$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

しかし、私のパケットはeth0上記の規則に従って偽装されずに到着します。

編集する

vethW および eth0 の tcmpdump 出力は次のとおりです。

tcpdump_output_veth tcpdump_output_eth

出力ip link

IPリンク

出力ip -4 addr

IP-4アドレス

出力conntrack -L

  • ホストからのインターネットのping

ここに画像の説明を入力してください。

  • 名前空間でのインターネットping

ここに画像の説明を入力してください。

  • 名前空間にnatルールを追加した後、ホストからインターネットをpingします。

ここに画像の説明を入力してください。

理由を知っている人はいますか?

助けてくれてありがとう。

ベストアンサー1

答えではありませんが、問題の範囲を絞り込む試みは次のとおりです。

似ていて少し単純化された設定をコピーしましたが、変装はうまく機能しました。次のようになります。

+-----------+                             +----------+
|        o--|--o                  o--ptya |  ptyb--o |
|   veth0b  |  veth0a          ppp0       |     ppp0 |
| 10.0.0.1  |  10.0.0.254  10.0.3.1       | 10.0.3.2 |
|           |                             |          |
|   ns0     |                             |   ns1    |
+-----------+                             +----------+

ここで、ppp接続は次のように確立されます(もちろん、名前空間ns1の2番目のpppd):

socat PTY,link=/tmp/ptya PTY,link=/tmp/ptyb
sudo pppd `readlink /tmp/ptya` noauth nocrtscts xonxoff local maxfail 0 10.0.3.1:10.0.3.2 persist
sudo pppd `readlink /tmp/ptyb` noauth nocrtscts xonxoff local maxfail 0 10.0.3.2:10.0.3.1 persist

迷彩:

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

ns0から始めて、デフォルトの名前空間に次のping 10.0.3.2ように表示されます。tcpdump -i ppp0

IP 10.0.3.1 > 10.0.3.2: ICMP echo request, id 23836, seq 1, length 64
IP 10.0.3.2 > 10.0.3.1: ICMP echo reply, id 23836, seq 1, length 64

したがって、胃は明らかに機能しており、pppインターフェースは何とか機能しません。

次のことは次のとおりです。

  • サーバーのsocat / ppp設定をコピーして、機能しているかどうか、他の操作が妨げられていることを確認してください。

  • 最初は、userspaceにPPPoE接続を確立しようとしましたが、pppoeこれは非常に複雑で、pppdで継続的な競合が発生し、pppoe-serverまだ理由を特定していません。したがって、PPPoE設定を同様の設定に減らすことができれば(そして何をしたかを教えてくれるかもしれません)、人々はPPPoEが何とか問題を引き起こしているかどうかを知ることができます。

  • これを試しているときに注意しないと、スクリプトは後で多くの操作(デフォルトのパス、IPアドレスの割り当て、iptablesエントリなど)を実行することがわかりました。そのため、設定に興味深いiptablesルール、パス、その他の項目を設定しなくても、もう一度確認します。

おすすめ記事