network ip netns 網路名稱空間
常用命令
ip netns add net0 # 建立網路名稱空間 net0
ip netns del net0 # 刪除網路名稱空間 net0
ip netns exec net0 ip addr show # 檢視網路名稱空間 net0 下的 ip 資訊
Network namespace 之間的通訊
網路拓撲結構
-
建立 veth pair
Network namespace 主要用於網路隔離,如果要實現網路之間的通訊,可以使用 linux 提供的
veth pair
。 需要注意的是 veth pair 無法單獨存在,刪除其中一個,另一個也會自動消失。ip link add type veth # 用於建立一對 veth pair
or
ip link add veth0 type veth peer name veth1 # 指定名字建立 veth pair
建立結束後我們就可以看到名為 veth0 和veth1 兩個網路介面
-
建立 namespace
ip netns add net0
ip netns add net1
-
設定網絡卡到指定 namespace
在建立完成後,我們要把這對 veth pari 分別放到兩個 namespace 裡面,
ip link set veth0 netns net0
ip link set veth1 netns net1
-
配置 ip 地址
ip netns exec net0 ip link set veth0 up
ip netns exec net0 ip addr add 10.0.1.1/24 dev veth0
ip netns exec net1 ip link set veth1 up
ip netns exec net1 ip addr add 10.0.1.2/24 dev veth1
-
設定 route
ip netns exec net0 ip route add 10.0.1.0/24 dev veth0 proto kernel scope link src 10.0.1.1
如果不配置 route,ping 命令顯示 connect: Network is unreachable
-
ping測試連通性
ip netns exec net0 ping -c 3 10.0.1.2
ip netns exec net1 ping -c 3 10.0.1.1
可以看到不同網路空間的裝置可以互相 ping 通。
雖然 veth pair 可以實現兩個 network namespace 之間的通訊,但是當多個 namespace 需要通訊的時候,就無能為力了。 多個網路裝置通訊要用到交換機,linux 也提供了虛擬交換機的功能,也可以用ip
命令來完成所有的操作。
linux 的 eth0 可以認為是 bridge 型別。
網路拓撲結構
-
建立 bridge 並設定 bridge ip
ip link add br0 type bridge
ip link set dev br0 up
ip addr add 10.0.1.0/24 dev br0
-
建立 veth pair
ip link add veth0 type veth peer name veth1
ip link add veth2 type veth peer name veth3
ip link add veth4 type veth peer name veth5
-
建立 namespace
ip netns add net0
ip netns add net1
ip netns add net2
-
設定網絡卡到指定 namespace
ip link set veth1 netns net0
ip netns exec net0 ip link set dev veth1 name eth0
ip netns exec net0 ip link set eth0 up
ip link set dev veth0 master br0
ip link set dev veth0 up
ip link set veth3 netns net1
ip netns exec net1 ip link set dev veth3 name eth0
ip netns exec net1 ip link set eth0 up
ip link set dev veth2 master br0
ip link set dev veth2 up
ip link set veth5 netns net2
ip netns exec net2 ip link set dev veth5 name eth0
ip netns exec net2 ip link set eth0 up
ip link set dev veth4 master br0
ip link set dev veth4 up
-
配置 ip 地址
ip netns exec net0 ip addr add 10.0.1.1/24 dev eth0
ip netns exec net1 ip addr add 10.0.1.2/24 dev eth0
ip netns exec net2 ip addr add 10.0.1.3/24 dev eth0
-
設定 route
ip netns exec net0 ip route add 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.1
ip netns exec net1 ip route add 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.2
ip netns exec net2 ip route add 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.3
-
ping測試連通性
ip netns exec net0 ping -c 3 10.0.1.2
ip netns exec net1 ping -c 3 10.0.1.3