虚拟网卡接口VETH(Virtual Ethernet )创建使用和绑定关系

1. veth创建与使用

  VETH(Virtual Ethernet )是Linux提供的另外一种特殊的网络设备,中文称为虚拟网卡接口。它总是成对出现,要创建就创建一个pair。一个Pair中的veth就像一个网络线缆的两个端点,数据从一个端点进入,必然从另外一个端点流出。每个veth都可以被赋予IP地址,并参与三层网络路由过程,可以实现不同netns之间网络通信。

# yum install -y iproute  ##确保安装iproute工具
$ ip netns add blue #创建命令空间
$ ip link add veth-red type veth peer name veth-blue
$ ip link set veth-blue up netns blue
$ ip link set veth-red up
# 开启veth-red,赋予它IP地址192.168.15.1,子网掩码为255.255.255.0
$ ip addr add 192.168.15.1/24 dev veth-red
$ ip link set veth-red up
# 开启veth-blue,赋予它IP地址192.168.15.2,子网掩码为255.255.255.0
$ ip netns exec blue ip addr add 192.168.15.2/24 dev veth-blue
$ ip netns exec blue ip link set veth-blue up
#查看命令空间blue的路由
$ ip netns exec blue route -n
# 互相ping通
$ ip netns exec red ping 192.168.15.2
#查看arp表,发现blue的arp表中出现了red的ip地址以及MAC地址记录,相应的red的arp表中也出现了blue的记录。
$ ip netns exec blue arp

# 删除veth对,只需要删除其中一个即可
$ ip link delete veth-red

2. 查看docker veth pair与网卡的对应关系

  • 执行ip link命令查看veth的映射关系
...
$ ip link
#如下示例:
18: veth5971b02@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-6c2a98b60161 state UP mode DEFAULT group default
    link/ether ce:52:40:36:5d:1b brd ff:ff:ff:ff:ff:ff link-netnsid 2

  通过该命令,看到18: veth5971b02@if17,代表当前网卡的id号18和网卡接口(interface)id号17相互映射;

  • 在查看iflink文件

  我们可以通过/sys/class/net/目录,看到当前网络命名空间所有逻辑网卡的路径;然后,通过查看各自路径下的iflink文件查看到对应网卡的id号;

#当前默认网路空间中的网卡
$ ls /sys/class/net
br-6c2a98b60161  docker0  lo           veth5971b02  veth-red  virbr0-nic
br-8aa7231af266  ens33    veth079ec9b  veth6448963  virbr0
$ cat /sys/class/net/veth5971b02/iflink
18

这样就可以确定:
nginx这个容器的eth0在物理机上对应的veth pair是18: veth5971b02@if17;

同时可以查询blue网络命名空间中的veth网卡id号

$ ip netns exec blue ls /sys/class/net
lo  veth-blue
$ ip netns exec blue cat /sys/class/net/veth-blue/iflink
23

发表评论

邮箱地址不会被公开。 必填项已用*标注