Podstawy LXC

Pisałem o firehol i podstawach konfiguracji wraz z przygotowaniem do użycia z nim LXC. Teraz kwestia samego LXC, co i po co i jak?

LXC (LinuX Containers) is an operating system–level virtualization method for running multiple isolated Linux systems (containers) on a single control host.

Czyli to nic innego jak wirtualizacja, ale stworzona z myślą jak najmniejszego narzutu. Jak to postawić? Potrzebne będą lxc oraz brctl.

brctl addbr lxcbr0
ip link set dev lxcbr0 up
ip addr add 10.0.0.1/24 dev lxcbr0

W ten sposób mamy gotowego bridge z przypisanym adresem 10.0.0.1/24. Czas stworzyć kontener z przypisanym adresem z puli. Zaczynamy od stworzenia pliku konfiguracyjnego w /etc/lxc/vm-test.conf o treści:

lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:0a:bc:de

lxc.network.ipv4 = 10.0.0.10
lxc.network.ipv4.gateway = 10.0.0.1

Następnie przychodzi czas na stworzenie maszyny za pomocą polecenia lxc-create. I jej uruchomienie za pomocą lxc-start.

lxc-create -n vm-test -f /etc/lxc/vm-test.conf -t ubuntu
lxc-start -n vm-test

W ten sposób uruchomiliśmy i podłączyliśmy się do konsoli maszyny vm-test z zainstalowanym Ubuntu. Jest jeden mały problem - nie posiadamy w tej maszynie na ten moment internetu. Wyłączamy maszynę - poweroff z jej poziomu lub

lxc-stop -n vm-test

Konfigurujemy firewall, w przypadku firehol dodajemy:

LXC="10.0.0.0/24"

router lxc2intern inface lxcbr0 outface lxcbr0
        route all accept

router4 lxc2lworld inface lxcbr0 outface eth0 src "$LXC" dst not "$LXC $SELF4"
        masquerade
        client all accept
        route all accept

I odpalamy znowu maszynę i próbujemy się połączyć po ssh z nią

lxc-start -n vm-test -d
ssh ubuntu@10.0.0.10

Ta da! Działa (pod warunkiem, że sshd jest w autostarcie). A co jak chcemy wystawić coś na świat? Wystarczy na hoście przekierować port na wewnętrzny IP i tyle. Na przykładzie serwera www

ipv4 dnat to 10.0.0.10:80 inface eth0 proto tcp dport 80

I tyle.