终于把lxc的网络配通了,也不知道对不对,记一下
一开始都是雷同的地方
yum install libcgroup lxc lxc-templates
安装lxc cgroup
然后记得
chkconfig --level 345 libcgroup on把cgroup始终启动
添加一个桥
ifcfg-eth0改成如下
DEVICE="eth0"
ONBOOT="yes"
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
BRIDGE=virbr0
新建一个ifcfg-virbr0,如下内容
DEVICE=virbr0
TYPE=Bridge
BOOTPROTO=static
DNS1=192.168.8.254
GATEWAY=192.168.8.254
IPADDR=192.168.8.50
NETMASK=255.255.255.0
ONBOOT=yes
重启一下桥就产生了
然后
lxc-create -n testcentos -t centos
创建一个以centos为模板的容器
然后
vi /var/lib/lxc/testcentos/config
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.hwaddr = fe:7c:d6:5a:ed:10
lxc.network.ipv4 = 192.168.8.55/24
lxc.network.ipv4.gateway = 192.168.8.50
lxc.network.name = eth0
lxc.rootfs = /var/lib/lxc/testcentos/rootfs
装完了以后
cat /var/lib/lxc/testcentos/tmp_root_pass
看一下root密码
然后
lxc-start -n testcentos -d
启动容器,并且
lxc-console -n testcentos
登陆容器
登录完了以后问题来了,网络呢?这里搞了好久
sysctl net.ipv4.ip_forward=1
打开转发
然后 iptables设一条规则
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.8.55 -j MASQUERADE
这条规则有问题,一开始设的有点问题,后来改成
iptables -t nat -A POSTROUTING -o virbr0 -s 192.168.8.55 -j MASQUERADE
就没问题了,好奇怪。不懂为什么。但这里也只是保证了能访问实验室外部网络,实验室内部网络还是不通
最后在容器里ping实验室内部地址,再在virbr0上dump icmp包
tcpdump -n -i virbr0 icmp
发现压根没有包通过,然后发现容器里的路由有问题
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.8.0 * 255.255.255.0 UH 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 192.168.8.50 0.0.0.0 UG 0 0 0 eth0
也就是说所有192.168.8.0网段的ip都不需要转发直接能被访问到。这个不对,最后在
vi /var/lib/lxc/testcentos/config
里把容器的ip改为lxc.network.ipv4 = 192.168.8.55/32
并且在容器内部的/etc/sysconfig/network-scripts/ifcfg-eth0里改掉netmask
最后都能访问了。
几点疑问,为什么我在所有文档上都没看到类似的做法,大家都是直接重定向到eth0完事呢?
另外容器内部的ip设置也和别人不一样。可能别人都是再加一个子网?
无论怎么样,这个容器算是能用了,有鉴于他的出色计算性能