- 在同一台主机上,不同的进程是共享内核资源的。但是,整体资源是有限的,分配不合理势必会相互影响。Linux中提出了namespace机制,来解决资源隔离问题。
- namespace,即命名空间。最简单的理解就相当于文件夹,对于文件名为 foo 的文件只能在文件夹 bar0 出现一次,却可以在文件夹 bar1 再次出现,表现为 /xxx/bar0/foo 和 /xxx/bar1/foo。访问 namespace 下的资源时, 同样要加上 namespace 。Linux下能用 namespace 隔离的资源有多种,network namespace 是比较常用的一种。
ip netns 命令
查看帮助
$ ip netns help
Usage: ip netns list
ip netns add NAME
ip netns set NAME NETNSID
ip [-all] netns delete [NAME]
ip netns identify [PID]
ip netns pids NAME
ip [-all] netns exec [NAME] cmd ...
ip netns monitor
ip netns list-id
直连
sudo ip netns add host01
sudo ip netns add host02
sudo ip link add veth1.1 type veth peer name veth1.2
sudo ip link set veth1.1 netns host01
sudo ip netns exec host01 ip link set veth1.1 name eth0
sudo ip netns exec host01 ifconfig eth0 10.0.0.1/24 up
sudo ip netns exec host01 ifconfig lo up
sudo ip link set veth1.2 netns host02
sudo ip netns exec host02 ip link set veth1.2 name eth0
sudo ip netns exec host02 ifconfig eth0 10.0.0.2/24 up
sudo ip netns exec host02 ifconfig lo up
查看
sudo ip netns exec host01 ip a
sudo ip netns exec host02 ip a
sudo ip netns exec host01 ping 10.0.0.2
sudo ip netns exec host02 ping 10.0.0.1
桥接
sudo ip netns add host01
sudo ip netns add host02
sudo ip netns exec host01 ifconfig lo up
sudo ip netns exec host02 ifconfig lo up
sudo ip link add veth1.1 type veth peer name veth1.2
sudo ip link add veth2.1 type veth peer name veth2.2
sudo brctl addbr br0
sudo ip link set br0 up
sudo brctl addif br0 veth1.1
sudo brctl addif br0 veth2.1
sudo ip link set veth1.1 up
sudo ip link set veth2.1 up
sudo ip link set veth1.2 netns host01
sudo ip netns exec host01 ip link set veth1.2 name eth0
sudo ip netns exec host01 ifconfig eth0 10.1.0.1/24 up
sudo ip link set veth2.2 netns host02
sudo ip netns exec host02 ip link set veth2.2 name eth0
sudo ip netns exec host02 ifconfig eth0 10.1.0.2/24 up
删除
sudo ip link set br0 down
sudo brctl delbr br0
sudo ip netns del host01
sudo ip netns del host02
打开App,阅读手记