您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何解析Linux Network Namespace,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Network Namespace (以下簡稱netns)是Linux內(nèi)核提供的一項實現(xiàn)網(wǎng)絡(luò)隔離的功能,它能隔離多個不同的網(wǎng)絡(luò)空間,并且各自擁有獨立的網(wǎng)絡(luò)協(xié)議棧,這其中便包括了網(wǎng)絡(luò)接口(網(wǎng)卡),路由表,iptables規(guī)則等。例如大名鼎鼎的docker便是基于netns實現(xiàn)的網(wǎng)絡(luò)隔離,今天我們就來手動實驗一下netns的隔離特性。
使用ip netns help
查看使用幫助
Usage: ip netns list ip netns add NAME ip netns set NAME NETNSID ip [-all] netns delete [NAME] ip netns identify [PID] ip netns pids NAME ip [-all] netns exec [NAME] cmd ... ip netns monitor ip netns list-id
我們將要構(gòu)建如下圖的網(wǎng)絡(luò)
首先我們添加兩個tap設(shè)備并配置上IP信息,然后添加兩個netns,最后將tap設(shè)備移動到netns中
# 添加并啟動虛擬網(wǎng)卡tap設(shè)備 ip tuntap add dev tap0 mode tap ip tuntap add dev tap1 mode tap ip link set tap0 up ip link set tap1 up # 配置IP ip addr add 10.0.0.1/24 dev tap0 ip addr add 10.0.0.2/24 dev tap1 # 添加netns ip netns add ns0 ip netns add ns1 # 將虛擬網(wǎng)卡tap0,tap1分別移動到ns0和ns1中 ip link set tap0 netns ns0 ip link set tap1 netns ns1
在宿主機器上使用ping 10.0.0.1
測試與tap0的網(wǎng)絡(luò)連通性
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. ^C --- 10.0.0.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 58ms
在宿主機器上使用ping 10.0.0.2
測試與tap1的網(wǎng)絡(luò)連通性
ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. ^C --- 10.0.0.2 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 36ms
> 由于長時間未收到ICMP的回復(fù)報文,我使用Ctrl+C退出了。
使用ip netns exec ns0 ping 10.0.0.2
在命名空間ns0中測試與tap1的網(wǎng)絡(luò)連通性
connect: 網(wǎng)絡(luò)不可達
使用ip netns exec ns1 ping 10.0.0.1
在命名空間ns1中測試與tap0的網(wǎng)絡(luò)連通性
connect: 網(wǎng)絡(luò)不可達
> 在netns中執(zhí)行命令有兩種方式,一種是先在宿主機器上執(zhí)行ip netns exec <netns name> bash
進入netns,然后就可以像是在本機一樣執(zhí)行命令了。另一種是每次在宿主機器上使用完整的命令,為了明顯區(qū)分,我們這里都使用完整的命令,例如ip netns exec ns0 ping 10.0.0.2
的含義為在命名空間ns0中執(zhí)行ping 10.0.0.2
命令
可以看到在宿主機器上訪問netns是丟包,而在netns中互相訪問是網(wǎng)絡(luò)不可達了,這是為什么呢?讓我們來檢查一下netns吧。
使用ip netns exec ns0 ip a
在ns0中查看網(wǎng)卡
1: lo: <loopback> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 16: tap0: <broadcast,multicast> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 42:ad:98:a2:cc:81 brd ff:ff:ff:ff:ff:ff
使用ip netns exec ns1 ip a
在ns1中查看網(wǎng)卡
1: lo: <loopback> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 17: tap1: <broadcast,multicast> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 12:06:1d:06:41:57 brd ff:ff:ff:ff:ff:ff
可以看到不僅本地環(huán)回lo和tap設(shè)備的狀態(tài)都是DOWN,甚至就連tap設(shè)備的IP信息也沒有了,這是因為在不同的網(wǎng)絡(luò)命名空間中移動虛擬網(wǎng)絡(luò)接口時會重置虛擬網(wǎng)絡(luò)接口的狀態(tài)。
我們將ns0和ns1中的相關(guān)設(shè)備都重新啟動并配置上IP
ip netns exec ns0 ip link set lo up ip netns exec ns0 ip link set tap0 up ip netns exec ns0 ip addr add 10.0.0.1/24 dev tap0 ip netns exec ns1 ip link set lo up ip netns exec ns1 ip link set tap1 up ip netns exec ns1 ip addr add 10.0.0.2/24 dev tap1
首先我們測試一下netns中本地網(wǎng)絡(luò)是否正常
使用ip netns exec ns0 ping 10.0.0.1
在命名空間ns0中測試本地網(wǎng)卡是否啟動
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.036 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.033 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.084 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.044 ms ^C --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 65ms rtt min/avg/max/mdev = 0.033/0.049/0.084/0.021 ms
使用ip netns exec ns1 ping 10.0.0.2
在命名空間ns1中測試本地網(wǎng)卡是否啟動
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.033 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.034 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.065 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.035 ms ^C --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 65ms rtt min/avg/max/mdev = 0.033/0.049/0.084/0.021 ms
可以看出本地網(wǎng)絡(luò)沒有問題,然后我們再來測試一下兩個netns之間的網(wǎng)絡(luò)連通性
使用ip netns exec ns0 ping 10.0.0.2
在命名空間ns0中測試與tap1的網(wǎng)絡(luò)連通性
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. ^C --- 10.0.0.2 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 84ms
使用ip netns exec ns1 ping 10.0.0.1
在命名空間ns1中測試與tap0的網(wǎng)絡(luò)連通性
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. ^C --- 10.0.0.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 30ms
可以看出沒有任何ICMP回復(fù)包,netns確實把在同一臺主機上的兩張?zhí)摂M網(wǎng)卡隔離起來了。在這里我們只是簡單的使用ping
命令來測試網(wǎng)絡(luò)的連通性,實際上可以做到更多,例如修改某一個netns的路由表或者防火墻規(guī)則,完全不會影響到其他的netns,當然也不會影響到宿主機器,在這里由于篇幅原因就不再展開實驗了,感興趣的同學可以實驗一下。
關(guān)于如何解析Linux Network Namespace就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。