Linux虛擬化網(wǎng)絡(luò)之veth設(shè)備
在linux系統(tǒng)中,veth設(shè)備模擬成對(duì)的網(wǎng)卡接口,veth設(shè)備總是成對(duì)出現(xiàn),當(dāng)一個(gè)設(shè)備接收到協(xié)議棧的數(shù)據(jù)后,會(huì)將數(shù)據(jù)發(fā)送另外一個(gè)設(shè)備上。

下面通過(guò)例子說(shuō)明veth設(shè)備如何使用
1:通過(guò)ip link命令添加一個(gè)veth設(shè)備
ip link add veth0
type veth peer name veth1
2:此時(shí)通過(guò)ip link可以查看到新增加的設(shè)備

3:激活設(shè)備
ip link set veth0 up
ip link set veth1 up
4:為veth0和veth1配置IP地址
ip addr add 172.17.10.10/24 dev veth0
ip addr add 172.17.10.11/24 dev veth1
5:查看配置的IP地址

6:使用ping命令互相ping可以ping通

LINUX虛擬設(shè)備tun/tap
Tun/tap是linux下的虛擬網(wǎng)卡設(shè)備,該設(shè)備一端連接linux內(nèi)核協(xié)議棧,一端連接應(yīng)用程序。其與普通硬件網(wǎng)卡差別如下圖所示:

Tun設(shè)備的另外一端是一個(gè)應(yīng)用程序,通常情況下,可以使用tun/tap設(shè)備完成vpn工作。
Tun只能支持處理IP層的數(shù)據(jù)包,Tap設(shè)備支持處理鏈路mac層數(shù)據(jù)包。
Tun/tap設(shè)備使用
使用之前需要安裝tunctl命令工具(Ubuntu下可以通過(guò)apt install uml-utilities安裝)
1:創(chuàng)建一個(gè)tap設(shè)備
tunctl -t liw-tab
2:為tap設(shè)備添加IP地址
ip addr add 172.18.10.10/24 dev liw-tab
3:激活tab設(shè)備
ip link set liw-tab up
4:一般場(chǎng)景下,tun/tap設(shè)備經(jīng)常被用于實(shí)現(xiàn)vpn,其過(guò)程如下
1)創(chuàng)建一個(gè)tun/tap設(shè)備,在該設(shè)備上配置IP地址等信息,這樣,其他應(yīng)用程序(這里稱這些程序?yàn)锳)將看到一個(gè)配置了IP地址的網(wǎng)卡。
2)? Vpn程序B打開(kāi)設(shè)備/dev/net/tun,并從該設(shè)備上讀取數(shù)據(jù)。
3) 此時(shí)A程序發(fā)送出的任何數(shù)據(jù)包,都會(huì)被系統(tǒng)送到VPN程序B上,從而B(niǎo)可以對(duì)這些數(shù)據(jù)包進(jìn)行處理,當(dāng)B處理完成后,B將打包后的數(shù)據(jù)包通過(guò)真實(shí)的網(wǎng)絡(luò)接口發(fā)送到網(wǎng)絡(luò)上。
LINUX虛擬設(shè)備虛擬網(wǎng)橋
Linux系統(tǒng)中的bridge可以看作現(xiàn)實(shí)網(wǎng)絡(luò)中的交換機(jī)設(shè)備,linux-bridge具備網(wǎng)絡(luò)設(shè)備的一切特征,可以有多個(gè)端口。
Linux-bridge使用方式如下
1:在系統(tǒng)中創(chuàng)建也給網(wǎng)橋
可以通過(guò)brctl addbr liw-br0命令創(chuàng)建一個(gè)名稱為liw-br0的網(wǎng)橋設(shè)備。

2:可以將veth設(shè)備連接到網(wǎng)橋上
ip link set dev veth0 master liw-br0

3:可以將tap設(shè)備連接到網(wǎng)橋上
ip link set dev tap0 master liw-br0

此時(shí)通過(guò)veth1 ping veth0的地址,無(wú)法正常訪問(wèn),此時(shí)說(shuō)明veth0上的ip地址已經(jīng)無(wú)意義,可以刪除掉veth0的地址,并將地址配置在bridge上,然后通過(guò)ip link set dev liw-br0 up激活網(wǎng)橋設(shè)備,此時(shí)則可以正常訪問(wèn)veth0的地址。
Linux-bridge常用在如下場(chǎng)景下
1:虛擬機(jī)場(chǎng)景下,虛擬機(jī)通過(guò)tun設(shè)備,將虛擬機(jī)內(nèi)的網(wǎng)卡同br0連接起來(lái),這樣虛擬機(jī)內(nèi)部發(fā)出的數(shù)據(jù)包,不需要經(jīng)過(guò)host主機(jī)的協(xié)議棧,從而達(dá)到和真實(shí)交換機(jī)相同的效果。
2:docker場(chǎng)景
處于不同namespace下的容器,通過(guò)veth設(shè)備將dockers容器內(nèi)的網(wǎng)卡與bridge連接起來(lái),從而支持dockers內(nèi)訪問(wèn)外部網(wǎng)絡(luò)的能力。