您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何解析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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。