lxc網絡
1 macvlan方式
macvlan方式有三種模式private、bridge、vepa
要容器與宿主機間,容器與其他主機間都能正常通信,需要使用bridge的模式,並且主機也需要配置macvlan虛擬設備(參考1.3),使用其他模式,不管配不配置主機,都只能和其他主機通信,不能和宿主機通信。
1.1 應用場景
1.2 數據收發方式
1.3 目前驗證能夠網絡正常的通信設置:
config:
lxc.network.type=macvlan
lxc.network.link=eth0
lxc.network.flags=up
lxc.network.macvlan.mode=bridge
lxc.network.ipv4=128.5.160.94/24
lxc.network.ipv4.gateway=128.5.160.254
lxc.utsname=suse1
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = /home/w00227741/SUSE_sp2_template/rootfs
lxc.mount = /home/w00227741/SUSE_sp2_template/fstab
lxc.cgroup.devices.deny= a
# /dev/null andzero
lxc.cgroup.devices.allow= c 1:3 rwm
lxc.cgroup.devices.allow= c 1:5 rwm
# consoles
lxc.cgroup.devices.allow= c 5:1 rwm
lxc.cgroup.devices.allow= c 5:0 rwm
lxc.cgroup.devices.allow= c 4:0 rwm
lxc.cgroup.devices.allow= c 4:1 rwm
#/dev/{,u}random
lxc.cgroup.devices.allow= c 1:9 rwm
lxc.cgroup.devices.allow= c 1:8 rwm
lxc.cgroup.devices.allow= c 136:* rwm
lxc.cgroup.devices.allow= c 5:2 rwm
# rtc
lxc.cgroup.devices.allow= c 254:0 rwm
宿主機上:
配置前:
# ifconfig
eth0 Link encap:Ethernet HWaddr 80:FB:06:36:96:68
inet addr:128.5.160.34 Bcast:128.5.160.255 Mask:255.255.255.0
inet6 addr:fe80::82fb:6ff:fe36:9668/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:67 errors:0 dropped:0overruns:0 frame:0
TX packets:77 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7013 (6.8 Kb) TX bytes:10224 (9.9 Kb)
Memory:f9360000-f9380000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:27 errors:0 dropped:0overruns:0 frame:0
TX packets:27 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1863 (1.8 Kb) TX bytes:1863 (1.8 Kb)
配置:
#ifconfig eth0 0
#ip link add link eth0 name mac0 type macvlan modebridge
#ifconfig mac0128.5.160.34/24
#ip route adddefault via 128.5.160.254
配置後:
# ifconfig
eth0 Link encap:Ethernet HWaddr 80:FB:06:36:96:68
inet6 addr:fe80::82fb:6ff:fe36:9668/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2195 errors:0 dropped:0overruns:0 frame:0
TX packets:2398 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:200385 (195.6 Kb) TX bytes:731847 (714.6 Kb)
Memory:f9360000-f9380000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:102 errors:0 dropped:0overruns:0 frame:0
TX packets:102 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8291 (8.0 Kb) TX bytes:8291 (8.0 Kb)
mac0 Link encap:Ethernet HWaddr A2:43:7A:C1:7E:FE
inet addr:128.5.160.34 Bcast:128.5.160.255 Mask:255.255.255.0
inet6 addr:fe80::a043:7aff:fec1:7efe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1016 errors:0 dropped:0overruns:0 frame:0
TX packets:998 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:90631 (88.5 Kb) TX bytes:344116 (336.0 Kb)
# netstat -r
Kernel IProuting table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 128.5.160.254 0.0.0.0 UG 0 0 0 mac0
loopback * 255.0.0.0 U 0 0 0 lo
128.5.160.0 * 255.255.255.0 U 0 0 0 mac0
(一段時間後BMC好像會變得不能用,連接後一片漆黑,木有圖像)
1.4 三種模式的區別
2 vlan
使用vlan方式,只能與配置了同意vlan id的主機通信,lxc使用的vlan方式是linux下的vlan
2.1 應用場景
vlan是一種通過將局域網內的設備邏輯劃分爲一個個網段從而實現虛擬工作組的技術,是建立在物理網絡基礎上的一種邏輯子網,一個vlan組就是一個邏輯子網,即一個邏輯廣播域,一個vlan內的廣播和單播流量都不會轉發到其他vlan中,通過對vlan的創建,隔離了廣播,縮小了廣播範圍,可以控制廣播風暴的產生。
2.2 數據收發方式
lxc中使用vlan的方式通信時,會根據指定的vlanid創建一個vlan設備,與真實的物理網卡進行綁定,並將其移入容器中。
數據收發送流程大致如下:
容器向外發送數據:
vlan設備對於上層協議而言,和實際的設備是平等的,因此也會參與路由的選擇,當vlan設備被選爲出口設備(容器內只有一個vlan設備,因此都是通過vlan設備對外發送數據),在hard_dev_start_xmit函數中檢查到是vlan設備發送的數據包,就會插入vlan tag,並修改skb->proto=8021q,再調用vlan設備的ndo_start_xmit()函數發送數據,在該函數中會將skb重定向到宿主機上的真實物理設備,並調用真實物理設備發送數據。
當真實物理網卡接收到數據時,對數據進行檢查,如果發現是vlan包,會將vlan tag移除,並將vlan id保存到skb->vlan_tci中,根據該設置的標誌,將skb重定向到與真實物理網卡綁定的vlan設備,由vlan設備提交給協議棧上層,也就將數據傳到了容器內。(vlan設備和真實物理設備的mac地址是一樣的,所以發給vlan設備的數據包能被真實物理設備接受到)
2.3 配置方式
config:
lxc.network.type=vlan
lxc.network.link=eth2
lxc.network.flags=up
lxc.network.vlan.id= 1234
lxc.network.ipv4=128.5.130.65/24
lxc.utsname = suse1
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs =/home/w00227741/SUSE_sp2_template/rootfs
lxc.mount = /home/w00227741/SUSE_sp2_template/fstab
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
在物理機上起的容器和宿主機以及和其他主機(配置同一vlan)都不能ping通,可能是和物理機上本身就劃分了vlan的原因
在虛擬機上起vlan容器:
在另一虛擬機上配置vlan:
vconfig add eth1 1234
ifconfig eth1.1234 128.5.130.64/24
ifconfig eth1.1234 up
ifconfig eth1 0 (可選,測試發現並不影響)
這樣虛擬機上的容器可以和配置同一vlan的其他虛擬機正常通信(不論是ping配置的vlan設備的ip還是vlan設備所在真是物理設備的ip),但是容器能和宿主機間不能互相ping通(不知道是不是虛擬機的問題)
2.4 vlan環境配置
l 同網段vlan通信:
爲了避免網絡風暴,二層交換機上通常會把網口設置成Access模式(交換機自動打上某個vlan id),這樣只允許特定vlan通過,所以我們在單板上加入新vlan,數據包出去後會直接被二層交換機丟棄掉。爲了解決這個問題需要:
1) 在二層交換機上把網口設置成trunk模式
2) 添加新vlan id
3) 允許新vlan通過
這樣同網段vlan就可以通信了。
l 不同網段vlan通信
需要二層交換機和三層交換機配合完成,在上面的配置上還需要:
1) 在三層交換機上添加新vlan id
2) 三層交換機上爲新vlan id配置新網關(每個vlan id都要有自己的網關)
3) 分別在二層交換機的出口和三層交換機對應的入口允許新vlan id通過,否則數據包不能到達三層交換機。
這樣不同網段vlan就可以通信了。
上面是原理,具體操作請參見S5300交換機手冊vlan章節。
2.5 應用場景
2.6 數據收發方式
2.7 配置方式
3 phys
3.1 應用場景
直接將一個現有的物理網卡分配給容器。
3.2 數據收發方式
3.3 配置方式
4 empty
4.1 應用場景
使用empty的網絡類型在容器內只會創建loopback接口。
http://blog.csdn.net/dog250/article/details/7354590
https://blog.flameeyes.eu/2010/09/linux-containers-and-networking
http://www.cnblogs.com/zmkeil/archive/2013/04/18/3029339.html
http://www.kernelchina.org/node/215
http://wenku.baidu.com/view/b684f44fe45c3b3567ec8bf5.html
http://wenku.baidu.com/view/869c688984868762caaed5e2.html