veth
理论
veth peer 是啥?
顾名思义,首先根据veth推测是一种虚拟的以太网卡。peer说明是成对的。
是的,veth peer就是一种成对出现的虚拟网卡设备,它就像水管的两个口,报文从veth peer的一端进去就会由另一端收到。
所以,根据这一个特性,veth peer常用于两个ns直接的通信。

就像把一根水管查到两个水缸中一样。
我们可以使用命令将veth放到任一的ns中,但是真实的网络设备只能在系统主机的ns中,并且一个网络设备只能放在一个ns中。
实践
创建一对veth peer
1 | ip link add veth100 type veth peer name veth101 |
这对veth peer的名字分别是veth100和veth101
查看一下
1 | # ip link list |
可以看到新创建的veth peer设备的默认mtu是1500,设备初始状态是DOWN
注意现在这两个veth设备都在主机的network ns中。
将veth101移动到一个mynet ns中
把veth101移进上一节创建的mynet namespace中
1 | ip link set veth101 netns mynet |
进入ns查看

绑定ip并将设备状态置为up
在上一节我们使用ip link set dev命令设置设备的状态
现在用另一个命令ifconfig。
因为现在两个网卡都没有ip,所以需要配置ip
1 | ifconfig veth100 10.10.10.100/24 up |
查看一下


这样我们的一对veth,一个在主机的网络空间下,一个在mynet网络空间中,
互相ping一下

ok,可以互通
查看下ns里的路由
为什么能通呢?看一下mynet里的路由就明白了
1 | # ip netns exec mynet route |
发给10.10.10.100的包会通过veth101出去,因为是veth peer。所以包就到了veth100
通过这个路由我们也能看出,现在在mynet里只能通10.10.10.0/24网段。其他的都通不了。
一个题外话
因为我们现在是直到veth100和101是一对。那如果我们不知道呢?怎么找到一对veth

可以用ip link list。然后根据编号来找