ip netns命令操作network-namespace

(1)ip netns相關命令
1.增加虛擬網絡命名空間

 
ip netns add ns
   該命令會在/var/run/netns目錄下創建ns網絡命名空間名


2.顯示所有的虛擬網絡命名空間

root@wade-ThinkCentre-E73:~# ip netns list
ns
  也可通過查看/var/run/netns目錄下的文件來list,結果一樣

root@wade-ThinkCentre-E73:~# ls /var/run/netns/
ns
 
3.進入虛擬機網絡環境

 ip netns exec ns bash  #打開虛擬網絡環境ns的bash窗口
 ip addr #顯示所有虛擬網絡環境的設備
 exit #退出該網絡虛擬環境

 
4.增加一對veth虛擬網卡
 ip link add type veth
 
5.將veth0添加到ns虛擬網絡環境
ip link set veth0 netns ns
 
6.將虛擬網卡veth1改名並添加到net1虛擬網絡環境中
ip link set dev veth1 name net1-bridge netns net1
 
 
7.設置虛擬網絡環境ns的veth0設備處於激活狀態
ip netns exec ns ip link set veth0 up
 
8.爲虛擬網絡環境ns的veth0設備增加IP地址
ip netns exec ns ip address add 10.0.1.1/24 dev veth0

(2)/proc/[pid]/ns文件
從3.8版本的內核開始,用戶就可以在/proc/[pid]/ns文件下看到指向不同命名空間(namespace)號的文件,[4026532791]即爲namespace號。

root@wade-ThinkCentre-E73:/proc/5787/ns# ll
總用量 0
dr-x--x--x 2 root root 0  8月 31 16:13 ./
dr-xr-xr-x 9 root root 0  8月 31 12:41 ../
lrwxrwxrwx 1 root root 0  8月 31 16:36 ipc -> ipc:[4026532791]
lrwxrwxrwx 1 root root 0  8月 31 16:36 mnt -> mnt:[4026532915]
lrwxrwxrwx 1 root root 0  8月 31 16:13 net -> net:[4026532845]
lrwxrwxrwx 1 root root 0  8月 31 16:36 pid -> pid:[4026532917]
lrwxrwxrwx 1 root root 0  8月 31 16:36 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0  8月 31 16:36 uts -> uts:[4026532916]
如果兩個進程指向的namespace編號相同,就說明他們在同一個namespace下。/proc/[pid]/ns的另外一個作用是,一旦文件被打開,只要打開的文件描述符(fd)存在,那麼就算PID所屬的所有進程都已經結束,創建的namespace就會一直存在。那如何打開文件描述符呢?把/proc/[pid]/ns目錄掛載起來或者軟鏈接就可以達到這個效果,命令如下。
掛載
# touch ~/net
# mount --bind /proc/$pid/ns/net ~/net

軟鏈接

#ln -sf /proc/$pid/ns/net "/var/run/netns/${name}"


在使用docker的過程中我們可以使用如下命令達到操作容器的網絡的目的

ln -sf /proc/$pid/ns/net "/var/run/netns/${container_name}" //$pid 爲docker容器pid

ip netns exec "${container_name}"  `command`
--------------------- 
作者:ptmozhu 
來源:CSDN 
原文:https://blog.csdn.net/ptmozhu/article/details/52386275 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章