Решил погонять в домашней сети LXC. Задумка в том, чтобы на 1-2 физических машинах было 10-20 контейнеров с разными сервисами. Они должны быть прозрачно видны в сети, поэтому для подключения использую бридж. IP адресами хочется управлять централизовано, через DHCP на домашнем роутере. Под все это дело использую Ubuntu 11.04 Server x86 в режиме minimal configuration (пока все на виртуалке, так что minimal virtual configuration) (+пакетами bridge-utils и lxc естесно). В итоге: контейнер стартует, интерфейс сети на месте, но IP не получает. "ifdown eth0 && ifup eth0" или рестарт networking сервиса в контейнере решает проблему: IP получается мгновенно, пинги до яндекса ходят, по ssh к контейнеру тоже подключается. И так до следующей перезагрузки.
Вкратце, я сделал следующее:
- Смонтировал cgroups, добавив запись в /etc/fstab.
- Сделал бридж в /etc/network/interfaces.
- Включил форвардинг IPv4 траффика в /etc/sysctl.conf.
- sudo lxc-create -n test1 -t natty
- Добавил параметры сети контейнера в /var/lib/lxc/test1/config.
- Сделал симлинк /var/lib/lxc/test1/config в /etc/lxc/test1.conf
- Включил сервис lxc в /etc/defaults/lxc и там же настроил авто-старт контейнера «test1».
И получил это:
в контейнере:
root@test1:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:bd:cc:75
inet6 addr: fe80::20c:29ff:febd:cc75/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:65 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8768 (8.7 KB) TX bytes:652 (652.0 B)
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:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@test1:~# /etc/init.d/networking restart
* Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces
* Reconfiguring network interfaces... ssh stop/waiting
ssh start/running, process 377
[ OK ]
root@test1:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:bd:cc:75
inet addr:192.168.1.166 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:febd:cc75/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:92 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13209 (13.2 KB) TX bytes:1884 (1.8 KB)
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:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/var/log/syslog (на host'е)
May 17 06:26:31 lxc-server1 kernel: [ 6.177577] device veth1dZwKs entered promiscuous mode
May 17 06:26:31 lxc-server1 kernel: [ 6.177607] ADDRCONF(NETDEV_UP): veth1dZwKs: link is not ready
May 17 06:26:31 lxc-server1 kernel: [ 6.228534] ADDRCONF(NETDEV_CHANGE): veth1dZwKs: link becomes ready
May 17 06:26:31 lxc-server1 kernel: [ 6.496101] br0: port 2(veth1dZwKs) entering forwarding state
May 17 06:26:31 lxc-server1 kernel: [ 6.496144] br0: port 2(veth1dZwKs) entering forwarding state
May 17 06:26:31 lxc-server1 kernel: [ 6.496186] br0: port 1(eth0) entering forwarding state
May 17 06:26:31 lxc-server1 kernel: [ 6.496191] br0: port 1(eth0) entering forwarding state
May 17 06:26:31 lxc-server1 dhclient: can't create /var/lib/dhcp3/dhclient.br0.leases: No such file or directory
May 17 06:26:31 lxc-server1 dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 3
May 17 06:26:31 lxc-server1 dhclient: DHCPOFFER of 192.168.1.165 from 192.168.1.1
May 17 06:26:31 lxc-server1 dhclient: DHCPREQUEST of 192.168.1.165 on br0 to 255.255.255.255 port 67
May 17 06:26:31 lxc-server1 dhclient: DHCPACK of 192.168.1.165 from 192.168.1.1
May 17 06:26:31 lxc-server1 dhclient: can't create /var/lib/dhcp3/dhclient.br0.leases: No such file or directory
May 17 06:26:31 lxc-server1 dhclient: bound to 192.168.1.165 -- renewal in 37494 seconds.
May 17 06:26:32 lxc-server1 init: ssh main process (354) terminated with status 255
May 17 06:26:32 lxc-server1 kernel: [ 7.504064] vesafb: framebuffer at 0xd0000000, mapped to 0xe0980000, using 1216k, total 1216k
May 17 06:26:32 lxc-server1 kernel: [ 7.504111] vesafb: mode is 640x480x32, linelength=2560, pages=0
May 17 06:26:32 lxc-server1 kernel: [ 7.504158] vesafb: scrolling: redraw
May 17 06:26:32 lxc-server1 kernel: [ 7.504205] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0
May 17 06:26:32 lxc-server1 kernel: [ 7.516129] Console: switching to colour frame buffer device 80x30
May 17 06:26:32 lxc-server1 kernel: [ 7.520064] fb0: VESA VGA frame buffer device
May 17 06:26:32 lxc-server1 init: plymouth-splash main process (918) terminated with status 1
May 17 06:26:48 lxc-server1 ntpdate[735]: step time server 91.189.94.4 offset 7.935507 sec
May 17 06:26:49 lxc-server1 kernel: [ 16.128195] eth0: no IPv6 routers present
May 17 06:26:50 lxc-server1 kernel: [ 16.672083] veth1dZwKs: no IPv6 routers present
May 17 06:26:50 lxc-server1 kernel: [ 17.016784] br0: no IPv6 routers present
May 17 06:26:50 lxc-server1 kernel: [ 17.184776] eth0: no IPv6 routers present
May 17 06:28:05 lxc-server1 kernel: [ 91.965394] br0: port 2(veth1dZwKs) entering forwarding state
May 17 06:28:05 lxc-server1 kernel: [ 92.036127] br0: port 2(veth1dZwKs) entering forwarding state
May 17 06:28:05 lxc-server1 kernel: [ 92.036135] br0: port 2(veth1dZwKs) entering forwarding state
May 17 06:28:15 lxc-server1 kernel: [ 102.080655] eth0: no IPv6 routers present
Конфиги:
/etc/network/interfaces (на host'е)
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_hello 0
bridge_maxwait 0
/var/lib/lxc/test1/config (на host'е)
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:0c:29:bd:cc:75
lxc.utsname = test1
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = /var/lib/lxc/test1/rootfs
lxc.mount = /var/lib/lxc/test1/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
/etc/network/interfaces (в контейнере)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
На всякий случай уточню, что на время обкатки сервер стоит на виртуалке. WinXP SP3, VMware Workstation 7.5, виртуальная сеть в режиме бриджа.
Буду очень признателен за любую помощь :)