簡介 linux 的 network namespace 功能
TRANSCRIPT
簡介 Linux的Network Namespace功能
Zuan@Chroot
whoami
● Zuan
● 台科大學生● 前年 SITCON講者 (關於遊戲外掛 )
● HITCON議程組 /翻譯組● chroot讀書會成員
先講一些 Linux Networking基礎
lo 一台電腦
應用程式
eth0
DNS 設定
Routing Table
防火牆設定
如果是 ADSL/光世代的 PPPoE
lo 一台電腦
應用程式
eth0
pppd
ppp0
或者 VPN
lo 一台電腦
應用程式
eth0
VPN Client
tap0
網卡拿來當 Hub用的 Bridge
lo 一台電腦
應用程式
eth0 eth1
br0
Bridge相關指令
● 需要安裝 bridge-utils才能使用 brctl
● brctl show – 顯示 bridge狀況● brctl addbr/delbr – 新增 /刪除 bridge界面● brctl addif – 將界面新增至 bridge界面● brctl delif – 將界面從 bridge移除
lo 一台電腦
應用程式
eth0 eth1
br0
brctl addbr br0
brctl addif br0 eth1
什麼是 Network Namespace?
● 一個可以讓你只虛擬化網路部份的功能– 獨立的 (虛擬 )網卡列表 , Routing Table, Resolver設定 , 防火牆設定
● Linux特有 (Darwin/Windows無類似功能 )
● 最近幾年才出現 (約 Kernel 3.0開始有有 )
● 是輕量化虛擬技術的基礎– Docker, LXC, 甚至 OpenVZ都是用他
● 很少被單獨使用
lo
一台電腦
應用程式
eth0
NetNSeth0
Network Namespace相關指令
● ip netns add <NetNS名稱 > – 新增 NetNS
● ip netns list – 列出現有的 NetNS
● ip netns identify <PID> – 顯示 PID所在的NetNS
● ip netns identify $$ – 顯示目前的 NetNS
● ip netns exec <NetNS 名稱 > <指令 > – 在NetNS執行指令
lo
一台電腦
應用程式
eth0
“”eth0 “nsA”
應用程式
veth – 對接的虛擬網卡
可以連接兩個不同的Network Namespace
Network Namespace相關指令
● ip link add <veth名稱 > type veth peer name <veth另一端名稱 > – 建立一個 veth裝置
● ip link set <veth名稱 > netns <NetNS名稱 > – 將 veth遷到 NetNS.
lo
一台電腦
應用程式
eth0
eth0
veth0a
veth0b
“nsA”“”
應用程式
搭配 Bridge即可讓其他 NetNS上網
lo
一台電腦
應用程式
eth0
eth0
veth0a
veth0b
“nsA”“”
應用程式
br0
但這樣沒多 IP
一個 PPPoE連線產生一個 IP
lo
一台電腦
應用程式
eth0
eth0
veth0a
veth0b
“nsA”“”
應用程式
br0
ppp0pppd
pppd
再設定好 pppd跟 resolve.conf即可上網
看起來很複雜 ? 來 Live Demo.
謝謝各位