1. veth创建与使用
VETH(Virtual Ethernet )是Linux提供的另外一种特殊的网络设备,中文称为虚拟网卡接口。它总是成对出现,要创建就创建一个pair。一个Pair中的veth就像一个网络线缆的两个端点,数据从一个端点进入,必然从另外一个端点流出。每个veth都可以被赋予IP地址,并参与三层网络路由过程,可以实现不同netns之间网络通信。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 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的映射关系
1 2 3 4 5 |
... $ 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号;
1 2 3 4 5 6 |
#当前默认网路空间中的网卡 $ 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号
1 2 3 4 |
$ ip netns exec blue ls /sys/class/net lo veth-blue $ ip netns exec blue cat /sys/class/net/veth-blue/iflink 23 |
赞赏
微信赞赏
支付宝赞赏