中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解析Linux Network Namespace

發布時間:2021-10-21 17:06:33 來源:億速云 閱讀:128 作者:柒染 欄目:云計算

這篇文章給大家介紹如何解析Linux Network Namespace,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Linux Network Namespace (netns) 詳解

Network Namespace (以下簡稱netns)是Linux內核提供的一項實現網絡隔離的功能,它能隔離多個不同的網絡空間,并且各自擁有獨立的網絡協議棧,這其中便包括了網絡接口(網卡),路由表,iptables規則等。例如大名鼎鼎的docker便是基于netns實現的網絡隔離,今天我們就來手動實驗一下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

開始實驗

我們將要構建如下圖的網絡

如何解析Linux Network Namespace

首先我們添加兩個tap設備并配置上IP信息,然后添加兩個netns,最后將tap設備移動到netns中

# 添加并啟動虛擬網卡tap設備
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
# 將虛擬網卡tap0,tap1分別移動到ns0和ns1中
ip link set tap0 netns ns0
ip link set tap1 netns ns1

在宿主機器上使用ping 10.0.0.1測試與tap0的網絡連通性

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的網絡連通性

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的回復報文,我使用Ctrl+C退出了。

使用ip netns exec ns0 ping 10.0.0.2在命名空間ns0中測試與tap1的網絡連通性

connect: 網絡不可達

使用ip netns exec ns1 ping 10.0.0.1在命名空間ns1中測試與tap0的網絡連通性

connect: 網絡不可達

> 在netns中執行命令有兩種方式,一種是先在宿主機器上執行ip netns exec <netns name> bash進入netns,然后就可以像是在本機一樣執行命令了。另一種是每次在宿主機器上使用完整的命令,為了明顯區分,我們這里都使用完整的命令,例如ip netns exec ns0 ping 10.0.0.2的含義為在命名空間ns0中執行ping 10.0.0.2命令

可以看到在宿主機器上訪問netns是丟包,而在netns中互相訪問是網絡不可達了,這是為什么呢?讓我們來檢查一下netns吧。

使用ip netns exec ns0 ip a在ns0中查看網卡

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中查看網卡

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

可以看到不僅本地環回lo和tap設備的狀態都是DOWN,甚至就連tap設備的IP信息也沒有了,這是因為在不同的網絡命名空間中移動虛擬網絡接口時會重置虛擬網絡接口的狀態。

我們將ns0和ns1中的相關設備都重新啟動并配置上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中本地網絡是否正常

使用ip netns exec ns0 ping 10.0.0.1在命名空間ns0中測試本地網卡是否啟動

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中測試本地網卡是否啟動

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

可以看出本地網絡沒有問題,然后我們再來測試一下兩個netns之間的網絡連通性

使用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.
^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的網絡連通性

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回復包,netns確實把在同一臺主機上的兩張虛擬網卡隔離起來了。在這里我們只是簡單的使用ping命令來測試網絡的連通性,實際上可以做到更多,例如修改某一個netns的路由表或者防火墻規則,完全不會影響到其他的netns,當然也不會影響到宿主機器,在這里由于篇幅原因就不再展開實驗了,感興趣的同學可以實驗一下。

關于如何解析Linux Network Namespace就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃源县| 盱眙县| 东港市| 林州市| 漳平市| 元朗区| 华容县| 平陆县| 楚雄市| 定兴县| 洱源县| 建德市| 昌邑市| 舒城县| 茂名市| 吴忠市| 承德市| 松阳县| 博白县| 乌什县| 旅游| 嵊泗县| 九江市| 茌平县| 汝南县| 富源县| 色达县| 浠水县| 阳信县| 兴隆县| 黄平县| 南阳市| 孙吴县| 凤冈县| 潍坊市| 榆中县| 贡嘎县| 阜南县| 仲巴县| 黔西| 信宜市|