hello云胜

技术与生活

0%

veth

理论

veth peer 是啥?

顾名思义,首先根据veth推测是一种虚拟的以太网卡。peer说明是成对的。

是的,veth peer就是一种成对出现的虚拟网卡设备,它就像水管的两个口,报文从veth peer的一端进去就会由另一端收到。

所以,根据这一个特性,veth peer常用于两个ns直接的通信。

image-20231008104534662

就像把一根水管查到两个水缸中一样。

我们可以使用命令将veth放到任一的ns中,但是真实的网络设备只能在系统主机的ns中,并且一个网络设备只能放在一个ns中。

实践

创建一对veth peer

1
ip link add veth100 type veth peer name veth101

这对veth peer的名字分别是veth100和veth101

查看一下

1
2
3
4
5
6
# ip link list
...
7: veth101@veth100: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 36:61:58:ca:2f:cc brd ff:ff:ff:ff:ff:ff
8: veth100@veth101: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether ae:b4:78:33:73:be brd ff:ff:ff:ff:ff:ff

可以看到新创建的veth peer设备的默认mtu是1500,设备初始状态是DOWN

注意现在这两个veth设备都在主机的network ns中。

将veth101移动到一个mynet ns中

把veth101移进上一节创建的mynet namespace中

1
ip link set veth101 netns mynet

进入ns查看

image-20231008110656799

绑定ip并将设备状态置为up

在上一节我们使用ip link set dev命令设置设备的状态

现在用另一个命令ifconfig。

因为现在两个网卡都没有ip,所以需要配置ip

1
2
ifconfig veth100 10.10.10.100/24 up
ip netns exec mynet ifconfig veth101 10.10.10.101/24 up

查看一下

image-20231008111225006

image-20231008111247516

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

互相ping一下

image-20231008111329631

ok,可以互通

查看下ns里的路由

为什么能通呢?看一下mynet里的路由就明白了

1
2
3
4
# ip netns exec mynet route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 veth101

发给10.10.10.100的包会通过veth101出去,因为是veth peer。所以包就到了veth100

通过这个路由我们也能看出,现在在mynet里只能通10.10.10.0/24网段。其他的都通不了。

一个题外话

因为我们现在是直到veth100和101是一对。那如果我们不知道呢?怎么找到一对veth

image-20231008112422789

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