Linuxネットワークの名前空間をテストしたいです。
現在の問題は、名前空間からインターネットに接続できないことです。
これは私のコマンドです:
1ネットワークネームスペースnetns1を作成し、veth(AとB)ペアを作成し、Bをネームスペースに設定します。
ip netns add netns1
ip link add A type veth peer name B
ip link set B netns netns1
2 Veth A を接続するブリッジを作成します。
brctl addbr bridge0
ip addr add 172.17.42.1/16 dev bridge0
ip link set dev bridge0 up
brctl addif bridge0 A
ip link set A up
3名前空間でネットワークを設定します。
ip netns exec netns1 ip link set dev B name eth0
ip netns exec netns1 ip link set eth0 up
ip netns exec netns1 ip addr add 172.17.42.99/16 dev eth0
ip netns exec netns1 ip route add default via 172.17.42.1
Google で ping を実行すると、次のメッセージが表示されます。
ping: unknown host www.google.com
この名前空間でインターネットにどのように接続しますか?
以下は、いくつかの追加の詳細です。
ありがとう
アップデート1
NAT設定も試しました。
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -d 0.0.0.0/0 -j MASQUERADE
しかし主人はまだ知らない。
答え1
ネットワークネームスペースを別のコンピュータと考えてください。 vethペアは、2つのイーサネットカードの間にクロスオーバーケーブルがあると考えてください。
ネットワークネームスペースをインターネットに接続する3つの主な方法は、NAT、既存のIPルーティング、イーサネットブリッジングです。
NAT は、すべてのタイプのアップストリームインターネット接続で動作し、アップストリームネットワークの連携が不要なため、通常設定が最も簡単です。
NATが機能するにはいくつかの作業が必要です。
- デフォルトゲートウェイはセカンダリネットワークの名前空間に設定する必要があります(すでに設定されているようです)。
- デフォルトのネットワーク名前空間でIP転送を有効にする必要があります(まだ設定方法を示していません)。
- ネイティブネットワークネームスペースのiptablesルールはトラフィックの通過を許可する必要があります(カーネル側ではデフォルトでは問題ありませんが、一部のファイアウォールソフトウェアには転送ブロックを設定するルールがあります)。
- デフォルトのネットワーク名前空間に適切なSNATまたは偽装ルールが必要です(すでに実行されているように見えます)。
また、セカンダリネットワークネームスペースのプログラムで適切な/etc/resolv.confを使用できることを確認する必要があります。セカンダリネットワークネームスペースでローカルループバックインターフェイスを起動しても(これを行う必要があります)、それでも各ネットワークネームスペースへのローカルインターフェイスであることに注意してください。
初めてネットワークを設定するときは、IPアドレスにping / trackpathを指定して、一般的な接続の問題と名前解決の問題を区別することをお勧めします。
答え2
考えられるネットワークの問題を診断する場合は、いいえFQDNをpingしてみてください。一体pingをまったく使用しないでください。
この試み:traceroute -n 8.8.8.8
これにより、次の2つの理由でより有用な情報が生成されます。
機能するリゾルバーは必要ありません(インターネットにアクセスできない場合はDNSルックアップを実行できないため、「不明なホスト」と表示されますが、リゾルバーが機能しない場合は正しいホスト名を取得できます)。接続が良好であれば、同じ答えを得ることができます)。
8.8.8.8に進むべきと思われるパスに沿って各ホストから応答を取得しようとします。どこ単に接続エラーではありません~に関係なくもちろん。
答え3
ping: unknown host www.google.com
以下のネットワーク接続の問題により、名前解決に失敗したとします。ただし、IPアドレスにpingを送信して、これが単純なDNSの問題ではないことを再確認したい場合があります。
提供された情報によると、ブリッジに物理インターフェイスを追加していないようです。ブリッジに物理インターフェイスがない場合、そのブリッジからのトラフィックは残りのネットワークに到達できません。
ブリッジに物理インターフェイスを追加するもう1つの方法は、IP転送を有効にして.netを使用してNATルールを設定することですiptables
。
答え4
loインターフェースを設定してみましたか? loが起動しない場合は、ネームスペースでネットワーキングが機能しないことがわかったので、次のことを試してください。
ip netns exec netns1 IP リンク設定 lo up