点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。
在 Linux 中,虚拟网络设备为网络配置和管理提供了很大的灵活性。其中,veth pair(虚拟以太网对)是一种常用的虚拟网络设备类型。
veth pair 是一对虚拟以太网接口,就像一根虚拟的网线,将两个网络命名空间或网络设备连接起来。当数据从一个 veth 接口发送出去时,它会立即出现在另一个 veth 接口上,实现了两个网络端点之间的通信。如下图:
上图中,veth0 和 veth1 是一对虚拟以太网接口,实现两个网络命名空间通信。
先使用 ip netns list 查看本机上面是否存在网络命名空间,如下:
hx@hxvm:~$ sudo ip netns list ns1 (id: 0)
如果没有,请使用 ip netns add ns1 命令创建名为 ns1 的网络命名空间。
可以使用 ip link add 命令创建一个 veth pair。例如:
hx@hxvm:~$ sudo ip link add veth8 type veth peer name veth9 hx@hxvm:~$ sudo ip link show | grep veth 7: veth1@if8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 9: veth9@veth8: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 10: veth8@veth9: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
这将创建一对名为 veth8 和 veth9 的虚拟以太网接口。
可以使用 ip link set 命令将 veth pair 的一端分配到一个网络命名空间中。例如:
hx@hxvm:~$ sudo ip link set veth9 netns ns1
这将把 veth9 接口移动到名为 ns1 的网络命名空间中。
在每个网络命名空间中,可以使用 ip addr add 命令为 veth 接口配置 IP 地址。例如:
(1)配置 veth8 虚拟设备的 IP 地址:
# 设置IP地址 hx@hxvm:~$ sudo ip addr add 192.168.1.1/24 dev veth8 # 查看设备 IP 地址 hx@hxvm:~$ ifconfig veth8 veth8: flags=4098<BROADCAST,MULTICAST> mtu 1500 inet 192.168.1.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether 92:23:b1:e6:53:a3 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
(2)配置 veth9 虚拟设备的 IP 地址:
# 设置设备IP地址 hx@hxvm:~$ sudo ip netns exec ns1 ip addr add 192.168.1.2/24 dev veth9 # 进入 ns1 网络命名空间 hx@hxvm:~$ sudo ip netns exec ns1 bash # 查看 veth9 虚拟设备IP地址 root@hxvm:/home/hx# sudo ifconfig veth9 sudo: unable to resolve host hxvm: Temporary failure in name resolution veth9: flags=4098<BROADCAST,MULTICAST> mtu 1500 inet 192.168.1.2 netmask 255.255.255.0 broadcast 0.0.0.0 ether 0a:35:2b:26:8a:b6 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # 退出 ns1 网络命名空间 root@hxvm:/home/hx# exit exit
命令详细解释:
ip netns exec ns1: 这部分命令表示在名为ns1 的网络命名空间(network namespace)中执行后续的操作。
ip addr add 192.168.1.2/24 dev veth9:ip addr add 是用于给网络接口添加 IP 地址的命令。192.168.1.2/24 是要添加的 IP 地址和子网掩码。其中 192.168.1.2 是 IP 地址,/24 表示子网掩码的长度,对应的子网掩码是 255.255.255.0。
dev veth9:表示将这个 IP 地址添加到名为veth9的网络接口设备上。
使用 ip link set 命令启用 veth 接口。例如:
hx@hxvm:~$ sudo ip link set veth8 up [sudo] password for hx: hx@hxvm:~$ sudo ip netns exec ns1 ip link set veth9 up
查看 veth8 和 veth9 虚拟网卡的 IP 地址:
hx@hxvm:~$ ifconfig veth8 veth8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.1 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::9023:b1ff:fee6:53a3 prefixlen 64 scopeid 0x20<link> ether 92:23:b1:e6:53:a3 txqueuelen 1000 (Ethernet) RX packets 11 bytes 866 (866.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 45 bytes 5010 (5.0 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 hx@hxvm:~$ sudo ip netns exec ns1 ifconfig veth9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.2 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::835:2bff:fe26:8ab6 prefixlen 64 scopeid 0x20<link> ether 0a:35:2b:26:8a:b6 txqueuelen 1000 (Ethernet) RX packets 45 bytes 5010 (5.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 936 (936.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
网络命名空间之间的通信:如前所述,veth pair 可以用于连接不同的网络命名空间,实现它们之间的通信。
容器网络:在容器化环境中,veth pair 常用于为容器提供网络连接。容器引擎可以使用 veth pair 将容器连接到主机网络或其他网络命名空间。
网络模拟和测试:veth pair 可以用于构建复杂的网络拓扑,进行网络模拟和测试。可以创建多个 veth pair,并将它们连接到不同的网络设备或命名空间,以模拟不同的网络场景。
veth pair 是 Linux 中一种非常有用的虚拟网络设备,可以用于实现网络命名空间之间的通信、容器网络以及网络模拟和测试等场景。通过灵活地使用 veth pair,可以更好地管理和配置 Linux 系统中的网络。
点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。