虛擬網路卡介面VETH(Virtual Ethernet )建立使用和繫結關係

Turbock發表於2020-09-23

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

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

相關文章