ネット名前空間の実験

ネット名前空間の実験

Linuxでは、ネットワーク名前空間は、単離されたネットワークスタックが別個の(NIC、ルーティング転送、iptablesの)環境を有していると考えることができます。ネットワーク名前空間は、多くの場合のみ、同じネットワークデバイスの名前空間を持つようにお互いを見て、ネットワーク機器やサービスを単離するために使用されます。ネットワーク名前空間は、ネットワーク仮想化のための重要な機能である、それは複数の孤立サイバースペースを作成することができ、これらを単独ネットワークスタック情報を持っています。実行中の仮想マシンまたはコンテナ、かどうかは自分の別のネットワークであるかのよう

共通コマンド

COMM コマンド
腹腔netnsは、NET1を追加します 名前空間NET1を追加
IP netnsヘルプ 手を貸してもらいます
IP netnsデルN1 名前空間N1を削除します。
腹腔netnsのLS これは、現在の既存のネームスペースを示しています

命令に関連するNET名前空間がされているip netns特定の手順に続いて
使用してip netns exec name、任意のコマンドを後から追加することができるサブコマンドを、それが対応するコマンドを表す名前空間で実行される、例えば:

root@mininet-vm:/home/mininet# ip netns exec n2 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

これを行うことができip netns exec n2 bash、すべての命令が実行された後に指定した名前空間を追加することなく、ip netns exec name

root@mininet-vm:/home/mininet# ip netns exec n2 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
root@mininet-vm:/home/mininet# ip netns exec n2 bash
root@mininet-vm:/home/mininet# ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
root@mininet-vm:/home/mininet# exit
exit
root@mininet-vm:/home/mininet# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
.................

使用して、ip netns exec n2 bash --rcfile <(echo "PS1=\"namespace ns1>\"")コマンドラインの接頭辞を変更することができます。

root@mininet-vm:/home/mininet# ip netns exec n2 bash --rcfile <(echo "PS1=\"namespace n2>\"")
namespace n2>

 名前空間の通信

VETHペアが使用して通信します

  1. ペアのvethペアを作成する
    コマンドを使用すると、ip link add type veth使用して、デフォルトの名前veth0とveth1あるのvethペアのペアを作成し、ip linkリンクを表示します
   root@mininet-vm:/home/mininet# ip link
.....
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
root@mininet-vm:/home/mininet # ip link add type veth
root@mininet-vm:/home/mininet # ip link
....
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
9: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 12:e8:a5:43:c0:43 brd ff:ff:ff:ff:ff:ff
10: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 9e:f8:c3:b9:af:ec brd ff:ff:ff:ff:ff:ff
  1. 端部は、二つの名前空間にそれぞれ対をVETH
    コマンドを使用ip link set veth0 netns n1し、ip link set veth1 netns n2それぞれ異なる名前空間veth0とveth1に
oot@mininet-vm:/home/mininet# ip link set veth0 netns n1
root@mininet-vm:/home/mininet# ip link set veth1 netns n2
root@mininet-vm:/home/mininet# ip netns exec n1 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: veth0@if10: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 12:e8:a5:43:c0:43 brd ff:ff:ff:ff:ff:ff
root@mininet-vm:/home/mininet# ip netns exec n2 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
10: veth1@if9: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 9e:f8:c3:b9:af:ec brd ff:ff:ff:ff:ff:ff
  1. 両方がのvethペアを終了IPに配置されている
    コマンドを使用ip link set vethX upし、ip addr add 10.0.0.10/24 dev vethX腹腔内のveth対に、以下の結果
# namespace 1
namespace ns1> ip link set veth0 up
namespace ns1> ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: veth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 12:e8:a5:43:c0:43 brd ff:ff:ff:ff:ff:ff
namespace ns1> ip addr add 10.0.10.1/24 dev veth0
namespace ns1> ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: veth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 12:e8:a5:43:c0:43 brd ff:ff:ff:ff:ff:ff
    inet 10.0.10.x1/24 scope global veth0
       valid_lft forever preferred_lft forever

# namespace 2
namespace n2>ip link set veth1 up
namespace n2>ip addr add 10.0.10/24 dev veth1
namespace n2>ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
10: veth1@if9: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state LOWERLAYERDOWN group default qlen 1000
link/ether 9e:f8:c3:b9:af:ec brd ff:ff:ff:ff:ff:ff
    inet 10.0.10.0/24 scope global veth1
       valid_lft forever preferred_lft forever
  1. 2つの名前空間の間のテストネットワーク接続のステータスは、
    N1およびN2におけるピング試みています
namespace ns1> ping 10.0.10.0 -c 1
PING 10.0.10.0 (10.0.10.0) 56(84) bytes of data.
64 bytes from 10.0.10.0: icmp_seq=1 ttl=64 time=0.035 ms
namespace n2>ping 10.0.10.1 -c 1
PING 10.0.10.1 (10.0.10.1) 56(84) bytes of data.
64 bytes from 10.0.10.1: icmp_seq=1 ttl=64 time=0.040 ms
  1. トポロジーは、以下
    20190725185608.png
    のvethペアは、2つの名前空間の間の通信のために使用されてもよいが、複数の名前空間との間の通路に使用するのに適していません

    利用bridge通信

  2. N3、N4:上記の実験的で、2つの名前空間を再作成します
root@mininet-vm:/home/mininet# ip netns add n3
root@mininet-vm:/home/mininet# ip netns add n4
root@mininet-vm:/home/mininet# ip netns ls
n4
n3
n1
n2
  1. ブリッジの作成
root@mininet-vm:/home/mininet# ip link add br0 type bridge
root@mininet-vm:/home/mininet# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1e:27:79 brd ff:ff:ff:ff:ff:ff
    inet 192.168.117.128/24 brd 192.168.117.255 scope global eth0
       valid_lft forever preferred_lft forever
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether 72:f5:e5:5d:4d:ed brd ff:ff:ff:ff:ff:ff
11: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether 76:d8:06:1a:b9:84 brd ff:ff:ff:ff:ff:ff
  1. ブリッジとN3、N4、N1通信を用いVETH対は、
    三対のvethペアを作成します
root@mininet-vm:/home/mininet# ip link add type veth
root@mininet-vm:/home/mininet# ip link add type veth
root@mininet-vm:/home/mininet# ip link add type veth
root@mininet-vm:/home/mininet# ip a
...
11: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether 76:d8:06:1a:b9:84 brd ff:ff:ff:ff:ff:ff
12: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ea:98:b6:3c:46:60 brd ff:ff:ff:ff:ff:ff
13: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether f2:f6:d8:6b:31:1f brd ff:ff:ff:ff:ff:ff
14: veth2@veth3: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 4a:7d:af:18:67:14 brd ff:ff:ff:ff:ff:ff
15: veth3@veth2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ca:b6:e4:eb:b7:15 brd ff:ff:ff:ff:ff:ff
16: veth4@veth5: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether f2:b3:5f:0e:3d:09 brd ff:ff:ff:ff:ff:ff
17: veth5@veth4: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 76:0c:87:b1:16:80 brd ff:ff:ff:ff:ff:ff

BR0とN1、N3、N4の接続
veth0 n1のがあったので、veth0をn1に参加する場合は、この時点では、それから、文句を言うだろう、のvethは、他の名前に置き換えることができます。
BR0として命令の放電のveth対ip link set dev veth3 master br0

  1. 試験N1-N4との間の通信状態
    ピング操作は、異なる名前空間を失敗します。
    長い間、この問題をトス、それを構成するために数回以上にあります。これは、いくつかの手順を逃す前にする必要があり、完全な手順は、以下のステップを含める必要があります。

    # 启动网桥(网桥只需要启动一次就行)
    ip link set br0 up
    # 创建vethpair
    ip link add br-1 type veth peer name 1-br
    #将vethpair分配给网桥和namespace
    ip link set br-1 master br0
    ip link set 1-br netns n1
    #启动veth
    ip link set br-1 up
    ip netns exec n1 ip link set 1-br up
    # 为namespace中的veth设置ip
      ip netns exec n1 ip addr add 10.0.10.2/24 dev 1-br

    再テストし、お互いにpingを実行することができる3つの名前空間を発見しました。

上記ブリッジのvEth事実に対応するIPを省略すること

  1. 以下のトポロジー

    を有する###内部の名前空間名前空間の外部通信
    デフォルト、ネットワーク名前空間は、ネットワーク状態のveth対を介して取得することができ、名前空間の名前空間の外に、ピング・ネットワーク単離されません。
    場合名前空間端内のveth対、外部ネームスペースの一端に、名前空間は、外側に位置する一対のvethにpingを実行することができるが、他のネットワークでpingを実行することができません。

    参考資料

    https://cizixs.com/2017/02/10/network-virtualization-network-namespace/

おすすめ

転載: www.cnblogs.com/yezhh/p/11248897.html