APP下载

基于Veth-Pair实现网络命名空间通信的研究

2024-01-04颜汝南

电脑知识与技术 2023年32期
关键词:路由表连通性网络设备

颜汝南

(海南经贸职业技术学院,海南 海口 571127)

0 引言

在传统的Linux 系统中,所有进程共享同一个网络命名空间,这意味着它们处于同一个网络环境中,共享相同的网络资源。然而,网络命名空间技术改变了这种情况。通过创建多个网络命名空间,并将不同的虚拟网络置于各自的命名空间中,可以实现虚拟网络之间的隔离。

每个网络命名空间都拥有自己的网络设备、IP地址、路由表和防火墙规则。网络命名空间内部的进程只能访问自己所在命名空间中的网络资源,无法直接访问其他命名空间中的资源。这种隔离机制确保了不同虚拟网络之间的相互独立性和安全性。同时,通过网络命名空间之间的通信机制,不同虚拟网络之间可以进行必要的网络通信,Veth-Pair就是实现命名空间之间通信的一种机制。

1 Linux虚拟网络

Linux 虚拟网络是一种在Linux 操作系统上使用虚拟化技术创建和管理虚拟网络资源的方法,其核心是对二层物理网络的抽象与管理,实现物理网卡和交换设备的虚拟化[1]。它允许在一台物理主机上创建多个独立的虚拟网络,并模拟多个虚拟网络设备以实现隔离和通信。

常见的Linux虚拟网络技术包括:Linux网络命名空间、Linux 虚拟以太网(Virtual Ethernet,Veth)设备、Linux 网桥(Bridge)、Linux 虚拟局域网(Virtual LAN,VLAN)、Linux 虚拟专用网络(Virtual Private Network,VPN)。其中,Linux 虚拟网络技术可以通过创建独立的网络命名空间、使用Veth 设备进行连接、利用网桥实现数据转发、使用VLAN 技术进行网络划分以及使用VPN 技术实现安全通信等方式来实现虚拟网络环境。这些技术可以提供更高效、灵活和安全的网络架构,并广泛应用于云计算、容器化和网络测试等领域。

1.1 网络命名空间

网络命名空间(Network Namespace)是一种在操作系统内核中创建的隔离网络环境。Network namespace 允许每个容器拥有自己唯一的(虚拟的)网络设备,容器中的应用程序可以绑定到物理主机上的端口,这样即使端口号相同,每个名称空间中的端口也不会冲突[2]。它通过将网络设备、IP地址、路由表和防火墙规则等网络资源隔离到各自的命名空间中,实现了不同网络实体之间的逻辑隔离。每个网络命名空间可以有自己的网络配置,使得在同一主机上创造出多个独立的网络环境。各个网络命名空间内的进程只能访问本命名空间内的网络资源,无法直接访问其他命名空间的资源。

网络命名空间的作用主要有以下四个方面:

1)安全隔离:网络命名空间提供了安全隔离的网络环境。不同的网络命名空间之间彼此隔离,网络流量无法直接通过命名空间边界进行传递。这可以防止流量泄露和横向移动,提高了系统的安全性。

2)资源隔离:每个网络命名空间可以有独立的网络配置,包括独立的IP 地址、路由表和防火墙规则。这样可以将网络资源进行有效的管理和分配,避免资源被竞争使用或滥用。每个网络命名空间可以根据需要设置适量的网络资源,确保公平共享和优化资源利用。

3)管理灵活性:网络命名空间可以为不同的应用或用户提供各自的网络环境,使它们能够独立配置和管理网络。这种灵活性可以根据具体需求进行个性化配置,并且可以根据需要随时添加、删除或修改网络命名空间,实现网络架构的动态调整和扩展。

4)多租户支持:网络命名空间在多租户环境中非常有用。每个租户可以拥有自己的网络命名空间,使得不同的应用或用户在同一物理主机上共享网络资源,但彼此之间相互隔离。这种隔离可以减少相互干扰和冲突,并提供安全的多租户环境。

网络命名空间提供了强大的隔离和管理功能,允许在同一主机上创建多个独立的网络环境。它在容器化平台、云计算环境和网络功能虚拟化中得到广泛应用,为多租户隔离、安全性和资源优化提供了有效的解决方案。

1.2 Veth-Pair

Veth-Pair(Virtual Ethernet Pair)是一种在虚拟网络中常用的技术,它用于创建一对Veth设备支持连接两个不同的网络命名空间,它通常用于不同的网络空间能够相互通信,建立一个对端到对端的网络通道[3]。

Veth-Pair 技术通过创建一对虚拟的Veth 设备来实现不同网络命名空间之间的连接。Veth 设备是成对出现的虚拟以太网设备,其中一个设备位于一个网络命名空间中,而另一个设备位于另一个网络命名空间中。这对Veth 设备通过一个虚拟网桥或虚拟交换机连接起来,从而实现了跨命名空间的网络通信。

当数据包从一个网络命名空间的Veth 设备发送出去时,它通过Veth-Pair 到达另一个网络命名空间的Veth 设备。这样,不同的网络命名空间可以通过Veth-Pair设备进行网络通信,就像是通过物理以太网连接的多个节点一样。

Veth-Pair 技术在虚拟化和容器化环境中有广泛的应用,主要用于网络隔离、互联容器网络、虚拟交换机和网络功能虚拟化。Veth-Pair 技术通过创建一对虚拟的以太网设备,为不同的网络命名空间提供了连通性。它在虚拟化和容器化环境中起到了重要作用,支持了复杂的网络架构、容器网络和网络功能虚拟化等应用场景。

1.3 TAP虚拟设备

TAP(TAP虚拟以太网适配器)是一种用于创建虚拟网络接口的技术。TAP作为虚拟网卡设备,并不直接和真实的物理板卡交换数据,而是通过字符驱动和一个用户模式下的应用程序进行交互,再由应用程序实现与物理板卡之间的通信[4]。

TAP设备主要用于以下三个方面:

1)虚拟机网络:TAP设备在虚拟机环境中广泛使用,可以实现虚拟机与主机之间以及虚拟机之间的网络通信。通过将虚拟机的网络接口连接到TAP 设备上,可以使得虚拟机能够像物理机一样与网络进行通信。

2)容器网络:容器技术,如Docker,也可以使用TAP 设备来实现容器之间以及容器与主机之间的网络通信。通过创建一个或多个TAP设备,并将其与容器进行关联,容器可以与其他容器或者主机进行网络通信。

3)VPN和隧道连接:TAP设备可以被用于创建虚拟专用网络(VPN)或隧道连接,通过加密将数据包传输到远程网络。TAP 设备可以模拟一个物理网络接口,将数据包从本地网络传输到远程网络,从而实现跨网络的安全通信。

在Linux 内核中有一个网络设备管理层,处于网络设备驱动和协议栈之间,负责衔接它们之间的数据交互,驱动就不需要了解协议栈的细节,协议栈也不需要了解设备驱动的细节[5]。它使得应用程序可以通过TAP设备与网络进行通信,从而实现各种网络连接和功能。

2 实验的设计与实现

2.1 无Veth-Pair技术下网络命名空间通信实验

本实验测试是基于centos7.6操作系统,其中创建两个命名空间分别为ns0和ns1,同时创建两个TAP设备分别为tap0和tap1,分别将两个TAP 设备加入对相应的ns中,如图1所示,实现步骤见如下1)~4)。

图1 网络命名空间拓扑图

1)创建TAP 设备及网络命名空间。首先添加两个TAP 设备并配置IP,然后添加两个netns,最后将TAP设备移动到netns中,配置如下:

[root@k8s-master ~]# ip tuntap add dev tap0 mode tap

[root@k8s-master ~]# ip tuntap add dev tap1 mode tap

[root@k8s-master ~]#ip netns add ns0

[root@k8s-master ~]#ip netns add ns1

[root@k8s-master ~]#ip link set tap0 netns ns0

[root@k8s-master ~]#ip link set tap1 netns ns1

2)在netns 中执行命令ip netns exec <netns name>命令,例如ip netns exec ns0 ping 10.1.1.2命令,其含义为在命名空间ns0 中执行ping 10.1.1.2 命令。因为在不同的网络命名空间中移动虚拟网络接口时会重置虚拟网络接口的状态,所以将ns0 和ns1 中的相关设备都重新启动并配置上IP,配置后可以从图2和图3看到ns0和ns1下的网络设备IP状态。配置如下:

图2 ns0下的网络设备IP状态

图3 ns1下的网络设备IP状态

[root@k8s-master ~]# ip netns exec ns0 ip link set lo up

[root@k8s-master ~]# ip netns exec ns0 ip link set tap0 up

[root@k8s-master ~]# ip netns exec ns0 ip address add 10.1.1.1/24 dev tap0

[root@k8s-master ~]# ip netns exec ns1 ip link set lo up

[root@k8s-master ~]# ip netns exec ns1 ip link set tap1 up

[root@k8s-master ~]#ip netns exec ns1 ip addr add 10.1.1.2/24 dev tap1

[root@k8s-master ~]#ip netns exec ns0 ip a

[root@k8s-master ~]#ip netns exec ns1 ip a

3)测试netns 中本地网络是否正常。使用ip netns exec ns0 ping 10.1.1.1 命令在ns0 中测试本地网卡tap0 是否可通,如图4 所示,可见ns0 本地网络正常的。

图4 ns0可以ping通本地网卡tap0

使用ip netns exec ns1 ping 10.1.1.2 命令在ns1 中测试本地网卡tap1是否可通,如图5所示,可见ns1本地网络正常的。

4)测试两个netns 之间的网络连通性,使用ip netns exec ns0 ping 10.1.1.2命令测试ns0与ns1中的网络连通性,如图6所示。

图6 测试ns0与ns1中的网络连通性

可以看出没有任何ICMP 回复包,说明即使是连接同一个物理主机协议栈的两个网络命名空间之间确实是隔离的,这种隔离机制可以使得虚拟化下的网络资源可以更安全与灵活。

2.2 基于Veth-Pair技术下网络命名空间通信实验

本测试是在图1基础上进行改造,在命名空间ns0 和ns1 中加入Veth-Pair 设备对,从而将两个的隔离命名空间连接起来,如下图7所示,实现步骤见如下1)~5)。

图7 使用Veth-Pair的网络命名空间拓扑图

1)首先创建一对Veth 设备,将Veth 设备分别移动到两个命名空间中并启动,配置如下:

[root@k8s-master ~]# ip link add veth0 type veth peer name veth1

[root@k8s-master ~]#ip link set veth0 netns ns0

[root@k8s-master ~]#ip link set veth1 netns ns1

[root@k8s-master ~]# ip netns exec ns0 ip link set veth0 up

[root@k8s-master ~]# ip netns exec ns1 ip link set veth1 up

2)使用ip netns exec ns0 ping 10.1.1.2 命令测试ns0与ns1中的tap1网络连通性,如图8所示。

图8 测试ns0与ns1中的tap1网络连通性

使用ip netns exec ns1 ping 10.1.1.1 命令测试ns1与ns0中的tap0网络连通性,如图9所示。

图9 测试ns1与ns0中的tap0网络连通性

可见添加了Veth-Pair 后两个命名空间并不能直接通信,通过查看ns0和ns1的路由表可以发现原因。

3)检查ns0和ns1路由表,配置如下:

使用ip netns exec ns0 ip route查看ns0的路由表。

[root@k8s-master ~]#ip netns exec ns0 ip route

10.1.1.0/24 dev tap0 proto kernel scope link src 10.1.1.1

使用ip netns exec ns1 ip route 查看ns1的路由表。

[root@k8s-master ~]#ip netns exec ns1 ip route

10.1.1.0/24 dev tap1 proto kernel scope link src 10.1.1.2

从以上路由表可以看出ns的流量都由tap设备发出,而tap设备没有和其他设备相连,所以导致发出去的数据报文不会被处理。

4)修改ns0 和ns1 路由表,使得ns 内部访问外部流量从Veth设备发出,配置如下:

[root@k8s-master ~]#ip netns exec ns0 ip route delete 10.1.1.0/24

[root@k8s-master ~]# ip netns exec ns0 ip route add 10.1.1.0/24 via 0.0.0.0 dev veth0

[root@k8s-master ~]#ip netns exec ns1 ip route delete 10.1.1.0/24

[root@k8s-master ~]# ip netns exec ns1 ip route add 10.1.1.0/24 via 0.0.0.0 dev veth1

5)测试ns0到与ns1的网络连通性。使用ip netns exec ns0 ping 10.1.1.2 和ip netns exec ns1 ping 10.1.1.1命令测试,如图10、图11 所示,ns0 和ns1 网络已可以正常通信。

图10 测试命名空间ns0到与ns1的网络连通性

图11 测试命名空间ns1到与ns0的网络连通性

实验结果表明两个隔离的网络命名空间可以通过Veth-Pair 实现通信,但是这样的网络拓扑存在一个明显的缺陷,就是随着网络命名空间的增多,网络拓扑的连线将按n*(n-1)/2的倍数增长。

3 结束语

虚拟网络命名空间通信技术是一种实现虚拟化网络的有效方法,它能够在同一主机上创建多个独立网络,并实现不同网络之间的隔离和通信,可以应用于多种场景,包括云计算和虚拟化环境、测试和开发环境、企业网络等。虚拟网络命名空间通信技术的应用将会在未来得到更广泛的推广和应用。

猜你喜欢

路由表连通性网络设备
偏序集及其相关拓扑的连通性
基于OSPF特殊区域和LSA的教学设计与实践
一种基于C# 的网络设备自动化登录工具的研制
拟莫比乌斯映射与拟度量空间的连通性
河道-滩区系统连通性评价研究
高稳定被动群集车联网连通性研究
基于新路由表的双向搜索chord路由算法
基于列车监测网络设备的射频功放模块设计
基于三层交换技术架构数字化校园网络设备的配置与管理
BGP创始人之一Tony Li:找到更好的途径分配互联网地址