Несколько виртуальных сетевых интерфейсов с разными MAC-адресами (type = macvlan)
При использовании схемы veth, все запущенные контейнеры, принадлежащие одной сети, видны и доступны друг-другу. Например, можно из хост-системы по ssh подсоединиться к машине 10.0.0.10, а из консоли этой машины – попасть на консоль 10.0.0.20 и т.д.
Во избежание подобных ситуаций, т.е. в тех случаях, когда нужна полная изоляция контейнеров – следует использовать схему macvlan.
Для демонстрации, на хост-машине редактируем файл /etc/network/interfaces, дописывая блок настроек br0:
# Имеющиеся настройки lo и eth0 -- не трогаем
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.186
broadcast 192.168.0.191
netmask 255.255.255.240
gateway 192.168.0.190
# Создаем bridge br0
auto br0
iface br0 inet static
bridge_ports none
bridge_fd 0
address 10.0.0.1
netmask 255.255.255.0
Файлы конфигурации каждого контейнера приводим к виду:
lxc.network.type = macvlan lxc.network.macvlan.mode = vepa lxc.network.flags = up lxc.network.name = eth1 lxc.network.link = br0 lxc.network.ipv4.gateway = 10.0.0.1 lxc.network.ipv4 = 10.0.0.10/24 # тут каждому контейнеру присваиваем собственный ip
После запуска контейнеров можно убедиться в их статусе:
NAME STATE IPV4 IPV6 AUTOSTART ---------------------------------------------- test_01 RUNNING 10.0.0.10 - NO test_02 RUNNING 10.0.0.20 - NO
При использовании macvlan следует указать один из режимов:
- lxc.network.macvlan.mode = vepa
В данном режиме, контейнеры ни из хост-системы ни между собой даже не пингуются
- lxc.network.macvlan.mode = bridge
Режим bridge создает особый мост (не то же самое, что стандартный Linux-bridge), который позволяет контейнерам общаться друг с другом, но изолирует их интерфейсы от хост-системы.
- lxc.network.macvlan.mode = private
Данный режим запрещает любую связь между LXC контейнерами.
