linux namespace veth pair

linux中的虚拟机技术,在网络上,除了Bridge和Switch,还有两个重要的概念:Namespace和 veth pair
net namespace主要是隔离网络设备本身,例如在Linux 中有多个容器,每个容器对应各自的namespace,我们可以把不同的网络设备指派给不同的容器。

veth pair你可以理解为使用网线连接好的两个接口,把两个端口放到两个namespace中,那么这两个namespace就能打通。

Network namespace

创建Namespace

1
2
3
# ip netns add blue
# ip netns list
blue

添加网口到namespace

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# ip netns add veth0 type veth peer name veth1
然后我们爱当前namespace可以看到veth0和veth1
#ip link list
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b2:cf:72 brd ff:ff:ff:ff:ff:ff
veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether ae:0d:00:e1:11:38 brd ff:ff:ff:ff:ff:ff
veth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 42:e7:50:d4:bb:c5 brd ff:ff:ff:ff:ff:ff

将veth1加到namespace “blue”

1
2
# ip link set veth1 netns blue #此时,当前namepapce只能看到veth0。
# ip netns exec blue ip link list #通过该命令可以查看blue namespace的网口

配置network namespace的网口

1
# ip netns exec blue ifconfig veth1 172.17.42.2/16 up #通过ip netns exec可以配置namespace的网口

如果要把namespace和本地网络打通,也可以创建veth设备,把两端分别放入本地和namespace。

引用:
network namespace与veth pair
Linux Switching – Interconnecting Namespaces
Introducing Linux Network Namespaces