Příprava experimentálního prostředí
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ě: