您好,登录后才能下订单哦!
本篇文章给大家分享的是有关如何解析Linux veth pair,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
veth pair是成对出现的一种虚拟网络设备接口,一端连着网络协议栈,一端彼此相连。如下图所示:
由于它的这个特性,常常被用于构建虚拟网络拓扑。例如连接两个不同的网络命名空间(netns),连接docker容器,连接网桥(Bridge)等,其中一个很常见的案例就是OpenStack Neutron底层用它来构建非常复杂的网络拓扑。
创建一对veth
ip link add <veth name> type veth peer name <peer name>
我们改造上一节完成的netns实验,使用veth pair将两个的隔离netns连接起来。如下图所示:
我们首先创建一对veth设备,将veth设备分别移动到两个netns中并启动。
# 创建一对veth ip link add veth0 type veth peer name veth2 # 将veth移动到netns中 ip link set veth0 netns ns0 ip link set veth2 netns ns1 # 启动 ip netns exec ns0 ip link set veth0 up ip netns exec ns1 ip link set veth2 up
接下来我们测试一下。
使用ip netns exec ns0 ping 10.0.0.2
在命名空间ns0中测试与tap1的网络连通性。
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. From 10.0.0.1 icmp_seq=1 Destination Host Unreachable From 10.0.0.1 icmp_seq=2 Destination Host Unreachable From 10.0.0.1 icmp_seq=3 Destination Host Unreachable ^C --- 10.0.0.2 ping statistics --- 5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 77ms pipe 4
使用ip netns exec ns1 ping 10.0.0.1
在命名空间ns1中测试与tap0的网络连通性。
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. From 10.0.0.2 icmp_seq=1 Destination Host Unreachable From 10.0.0.2 icmp_seq=2 Destination Host Unreachable From 10.0.0.2 icmp_seq=3 Destination Host Unreachable ^C --- 10.0.0.1 ping statistics --- 4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 108ms pipe 4
什么情况?为什么网络还是不通呢?答案就是路由配置有问题。
使用ip netns exec ns0 route -n
查看ns0的路由表。
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
使用ip netns exec ns1 route -n
查看ns1的路由表。
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tap1
原来访问10.0.0.0/24的流量都从tap设备发出去了,又因为tap设备没有和其他设备相连,发出去的数据报文不会被处理,因此还是访问不到目标IP,我们来修改一下路由,让访问10.0.0.0/24的流量从veth设备发出。
#修改路由出口为veth ip netns exec ns0 ip route change 10.0.0.0/24 via 0.0.0.0 dev veth0 ip netns exec ns1 ip route change 10.0.0.0/24 via 0.0.0.0 dev veth2
我们再来看一下路由
使用ip netns exec ns0 route -n
查看ns0的路由表。
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 veth0
使用ip netns exec ns1 route -n
查看ns1的路由表。
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 veth2
最后我们再来测试一下。
使用ip netns exec ns0 ping 10.0.0.2
在命名空间ns0中测试与tap1的网络连通性。
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.031 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.035 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.037 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.043 ms ^C --- 10.0.0.2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 103ms rtt min/avg/max/mdev = 0.031/0.036/0.043/0.007 ms
使用ip netns exec ns1 ping 10.0.0.1
在命名空间ns1中测试与tap0的网络连通性。
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.027 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.047 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.051 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.042 ms ^C --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 66ms rtt min/avg/max/mdev = 0.027/0.041/0.051/0.012 ms
可以看到我们使用veth pair将两个隔离的netns成功的连接到了一起。
但是这样的网络拓扑存在一个弊端,随着网络设备的增多,网络连线的复杂度将成倍增长。 如果连接三个netns时,网络连线就成了下图的样子
而如果连接四个netns时,网络连线就成了下图的样子
如果有五台设备。。。
有没有什么技术可以解决这个问题呢?答案是有的,Linux Bridge(网桥)。下一节我们将使用网桥来将多个隔离的netns连接起来,这样网络连线就非常清爽了。
以上就是如何解析Linux veth pair,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。