Есть сервер тонкой виртуализации LXC на Debian. Виртуальные машины подключаем в Bridge (не включено bydefault в Debian 8\Jessie), выпускаем во вне через Masquerade и настраиваем для VM раздачу адресов в DNSMasq.
Хост со статическим адресом (не суть, но виртуалка почему-то стала обнулять resolv.conf) 192.168.1.1/24. Под виртуализацию выделяем внутренную сеть 172.20.20.1/24.
Обычно я не люблю masquerade, так как SNAT быстрее и позволяет выпускать VM в сеть с отдельного IP или алиаса(hint), но с маскарадом не надо заботиться о переписывании строки iptables при смене IP vmhost.
Источники
Создаём мост в vmhost
Ставим bridge-utils, добавляем интерфейс
cat >> /etc/network/interfaces << EOF iface lxbr0 inet static post-up /etc/network/ifup.d/masquerade bridge-ports none bridge_fd 0 address 172.20.20.1 netmask 255.255.255.0 EOF
В /etc/network/if-up.d/masquerade пишем шастройку маскарада для шлюза. Изменять mangle нужно, чтобы корректно работал DHCP.
cat > /etc/network/if-up.d/masquerade << EOF #!/bin/sh if [ "$mode" == "start" ]; then iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -o eth0 -j MASQUERADE iptables -t mangle -A POSTROUTING -p udp -j CHECKSUM --checksum-fill fi if [ "$mode" == "stop" ]; then iptables -t nat -D POSTROUTING -s 172.20.0.0/24 -o eth0 -j MASQUERADE iptables -t mangle -D POSTROUTING -p udp -j CHECKSUM --checksum-fill fi EOF
Учим LXC подключаться к мосту
cat > /etc/lxc/default.conf lxc.network.type = veth lxc.network.link = lxbr0 lxc.network.flags = no lxc.network.name = eth0 EOF
Учим dnsmasq делать DHCP
cat /etc/dnsmasq.d/lxc << EOF interface=lxbr0 dhcp-range=lxbr0,172.20.20.16,172.20.20.254,1h #dhcp-option=lxbr0,option:router,172.20.20.1 #dhcp-option=lxbr0,option:dns-server,172.20.20.1 domain=lxc.local,172.20.20.0/24 EOF
Проверяем
lxc-start -n vm -d lxc-attach -n vm
Из очень интересных вещей: в описании Bridgeing мне очень понравиось, что можно прикрепить bridge к eth0.vlan и таким образом делить мост между VM на нескольких vmhost
Комментариев нет:
Отправить комментарий