web-dev-qa-db-ja.com

Linux名前空間、ネットワーク名前空間でインターネットに接続する方法は?

Linuxネットワークの名前空間をテストしたい。

現在の問題は、名前空間でインターネットに接続できないことです

これが私のコマンドです:

1ネットワーク名前空間netns1を作成し、一対のveths(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

私がグーグルにpingすると、私はこれを手に入れました:

ping: unknown Host www.google.com

この名前空間でインターネットに接続するにはどうすればよいですか?

その他の詳細は次のとおりです。

enter image description here

enter image description here

enter image description here

enter image description here

ありがとうございました

更新1

私もNATを設定しようとします:

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -d 0.0.0.0/0 -j MASQUERADE

しかし、まだ不明なホスト

6
vvilp

ネットワーク名前空間を別のコンピューターと考えてください。 vethペアは、2つのイーサネットカードの間にクロスオーバーケーブルが接続されていると考えてください。

ネットワーク名前空間をインターネット、NAT、従来のIPルーティング、イーサネットブリッジに接続するには、主に3つの方法があります。

NATは、あらゆる種類の上流インターネット接続で機能し、上流ネットワークの協力を必要としないため、一般的にセットアップが最も簡単です。

NATが機能するためには、いくつかのものが適切に配置されている必要があります。

  1. デフォルトゲートウェイは、セカンダリネットワーク名前空間に設定する必要があります(これを実行したようです)
  2. メインのネットワーク名前空間でIP転送を有効にする必要があります(この設定の設定方法は示していません)。
  3. メインネットワーク名前空間のiptablesルールは、トラフィックの通過を許可する必要があります(カーネル側ではデフォルトでこれで問題ありませんが、一部のファイアウォールソフトウェアは転送をブロックするルールを設定している場合があります)。
  4. メインのネットワーク名前空間に適切なSNATまたはマスカレードルールを設定する必要があります(これを行ったようです)。

また、セカンダリネットワーク名前空間のプログラムで適切な/etc/resolv.confが使用可能であることを確認する必要もあります。セカンダリネットワーク名前空間でローカルループバックインターフェイスを起動したとしても(実行する必要があります)、各ネットワーク名前空間に対してローカルであることを忘れないでください。

名前の解決の問題と一般的な接続の問題を区別するようにネットワークを最初に設定するときは、IPアドレスでping/tracerouteを実行するのが最適です。

2
plugwash

ping: unknown Host www.google.comこれは、下記のネットワーク接続の問題が原因で名前解決に失敗したためです。ただし、IPアドレスにpingを実行することで、これがDNSの問題だけではないことを再確認する必要があります。

ご提供いただいた内容から、ネットワークブリッジに物理インターフェースを追加していないようです。ブリッジに物理インターフェースがないと、そのブリッジのトラフィックはネットワークの他の部分に到達できません。

物理インターフェイスをブリッジに追加する代わりに、IP転送をオンにして、NATルールをiptablesで設定します。

2
Steven D

考えられるネットワークの問題を診断しようとしている場合は、しないでください FQDNにpingしてみてください。一体、pingは使用しないでください。

代わりにこれを試してください:traceroute -n 8.8.8.8

これにより、次の2つの理由でより有用な情報が得られます。

  1. リゾルバーが機能している必要はありません(インターネットにアクセスできない場合はDNSルックアップを実行できないため、「不明なホスト」が表示されますが、リゾルバーが機能していない場合は正確に取得できます接続が問題なくても同じ答えです)。

  2. すべてのホストから8.8.8.8へのルートであると考えられるものに沿って応答を取得しようとします。これにより、where単純にではなく、接続が失敗するかどうか =あります。

2
Shadur

Loインターフェースを設定してみましたか? loがアップしていないときに名前空間でネットワークが機能しないことを確認したので、これを試してください:

ip netns exec netns1 ip link set lo up

0
nishant80