Kontejnery

Síť ve VM (hostiteli kontejneru)

Ve VM vypadá nastavení sítě v našem případě takto:

root@osboxes:/home/osboxes# ip addr
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:19:77:53 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 2512sec preferred_lft 2512sec
    inet6 fe80::a00:27ff:fe19:7753/64 scope link 
       valid_lft forever preferred_lft forever
3: lxcbr0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.1/24 scope global lxcbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe00:0/64 scope link 
       valid_lft forever preferred_lft forever
4: vethwfg1Dt@if2: <broadcast,multicast,up,lower_up> mtu 1500 qdisc noqueue master lxcbr0 state UP group default qlen 1000
    link/ether fe:08:30:5a:d7:82 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::fc08:30ff:fe5a:d782/64 scope link 
       valid_lft forever preferred_lft forever
root@osboxes:/home/osboxes# bridge link
4: vethwfg1Dt@enp0s3: <broadcast,multicast,up,lower_up> mtu 1500 master lxcbr0 state forwarding priority 32 cost 2 

Vidíme tedy, že rozhraní vethwfg1Dt je připojeno do bridge (softwarového switche) lxcbr0, tento interface má IP adresu 10.0.3.1 a masku /24. Adresa kontejneru, kterou jsme viděli ve výpisu příkazu ip address o kousek výše byla 10.0.3.9 a měla také masku /24. Obě tyto adresy jsou tedy v jednom subnetu a přes veth pár jsou propojeny virtuálním L2 propojem.

Jaktože ale funguje konektivita z kontejneru do vnějšího Internetu (o kousek výše jsme z kontejneru úspěšně vyzkoušeli ping 8.8.8.8)? Je to proto, že v kontejneru je nastavena default route na next-hop 10.0.3.1 (viz výpis příkazu ip route výše - v sekci Síť v kontejneru). A to by ještě nestačilo proto, že adresy ze subnetu 10.0.3.0/24 nejsou přímo použítelné v Internetu bez NATu. Proto na VM (hostiteli) LXC při startu automaticky vytvořilo NAT pravidlo:

root@osboxes:/home/osboxes# iptables -t nat -L -vxn
...
Chain POSTROUTING (policy ACCEPT 1388 packets, 111604 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       2      124 MASQUERADE  all  --  *      *       10.0.3.0/24         !10.0.3.0/24 

Schématicky vypadá konektivita kontejneru následovně:

LXC network