Bootstrap

理解linux虚拟网络设备veth

作者:刘海峰,IT行业资深码农,从事.net/java/go语言开发十余年,长期关注springcloud/k8s/linux网络相关的技术,现为滴普科技容器产品首席架构师。


前言

前面介绍了linux network namespace,接着介绍一下如何让一个独立的网络命名空间和主机的网络互通,这里我们需要用到linux虚拟网络设备veth。

veth设备

veth是linux的一种虚拟网络设备,它有点类似于两张网卡中间用一条网线连着,veth设备总是成对出现,通常用来连接不同网络命名空间(下面开始简称NS),一端连着NS1的内核协议栈,另一端连着NS2的内核协议栈,一端发送的数据会立刻被另一端接收。
在这里插入图片描述

接下来我们通过一些示例来理解veth设备,我们创建一个新的NS,然后跟主机的NS连接起来

通过下面的命令可以创建一对veth设备:

ip link add veth0 type veth peer name veth1

然后创建一个名为ns1的network namespace :

ip netns add ns1

然后把刚创建的veth1网卡的其中一端转到ns1,这就好像一端插到ns1上,另一端插在主机的ns上:

ip link set veth0 netns ns1

给veth的两端都配置个IP,设置veth0时,要用ip netns exec ns1,因为veth0此时在ns1中:

ip netns exec ns1 ip addr add 192.168.10.10/24 dev veth0
ip addr add 192.168.10.11/24 dev veth1

把两张网卡都启动起来:

ip netns exec ns1 ip link set veth0 up
ip link set veth1 up 

此时的状态如下:
在这里插入图片描述

这时候主机和ns1已经可以相互ping通了:

[root@worker2 ~
;