Настройка сети в Libvirt для LXC
Выполните инструкцию пошаговая инструкция настройки Libvirt на Ubuntu 18.04 с поддержкой LXC контейнеров
Настройки сети сохраняются здесь: /etc/libvirt/qemu/networks
Создадим сеть по умолчанию. Отредактируем уже существующую сеть.
lxc net-edit --network default
Обратите внимание на UUID. У вас он может быть другим. Вставьте следующий код в открывшемся редакторе:
<network>
<name>default</name>
<forward mode="nat" />
<bridge name='lxcnet' stp='on' delay='0'/>
<mac address='52:54:00:35:a2:59'/>
<dns>
<forwarder addr="1.1.1.1"/>
<forwarder addr="8.8.8.8"/>
</dns>
<ip address="172.30.0.1" netmask="255.255.255.0">
<dhcp>
<range start="172.30.0.100" end="172.30.0.254"/>
<host name="test" ip="172.30.0.5"/>
</dhcp>
</ip>
</network>
В данном файле мы задаем сеть 172.30.0.0/24. Сеть будет организована на мосту(bridge) с названием lxcnet. IP адреса будут раздаваться автоматически по DHCP от 172.30.0.100 до 172.30.0.254. Автоматически будет прописан DNS сервера 1.1.1.1 и 8.8.8.8. Для хоста "test" будет автоматически выдаваться IP адрес 172.30.0.5.
IP адрес постоянно может выдаваться не всегда. Дело в том, что, если хост подключается первый раз, то dnsmasq запоминает MAC адрес и имя хоста машине, и выдает ему IP. Если явно прописан хост, то выдает статичный IP. НО! Если будет подключаться второй хост с таким же именем, но другим MAC адресом, то dnsmasq выдаст другой IP адрес. Даже если машина первая была уже выключена. Сервер dnsmasq запоминает IP адреса на 24 часа. Если вы хотите использовать статические IP адреса для контейнера, то их можно прописать в разделе xml interface в самом контейнере.
После того, как мы настроили сеть, добавляем ее в автозапуск.
lxc net-autostart --network default
Перезапускаем сеть:
lxc net-destroy default
lxc net-start default
После каждого редактирования настроек сети ее надо перезапускать.
Добавление хостов на лету
Иногда нужно добавить новые статические адреса, не перезагружая сеть. Для этого существуют следующая комманда:
lxc net-update default add-last ip-dhcp-host "<host name='bob' ip='172.30.0.25' />" --live --config
Как узнать IP адреса хостов в libvirt?
Для того, чтобы узнать IP, нужно выполнить комманду:
lxc net-dhcp-leases default
Настройка iptables
Установка iptables
aptitude install iptables-persistent
Включаем NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/10-ip-forward.conf
Для автоматической настройки создадим скрипты iptables. Создайте папку
mkdir /etc/iptables
Создайте файл:
nano /etc/iptables/rules.v4
*filter
:INPUT ACCEPT [19:913]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39:3584]
:ALLOW-INPUT - [0:0]
:f2b-sshd - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# Fail2Ban SSH
#-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
# Разрешаем входящие соединения ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22050 -j ACCEPT
# Перейти к цепочке ALLOW-INPUT
-A INPUT -j ALLOW-INPUT
# Запрещаем остальные входящие соединения
-A INPUT -j REJECT
-A FORWARD -j REJECT
# Раскомментируйте, если нужно запретить все исходящие соединения
#-A OUTPUT -j REJECT
# Разрешить http
-A ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Разрешаем FTP
-A ALLOW-INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 30000:50000 -j ACCEPT
# Разрешаем входящие соединения http
-A ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A ALLOW-INPUT -j RETURN
# Fail2ban
-A f2b-sshd -j RETURN
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Проброс HTTP на 172.30.0.1
-A PREROUTING -i ens3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.30.0.10:80
-A PREROUTING -i ens3 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.30.0.10:443
# Проброс FTP на 172.30.0.10
-A PREROUTING -i ens3 -p tcp -m tcp --dport 21 -j DNAT --to-destination 172.30.0.10:21
-A PREROUTING -i ens3 -p tcp -m tcp --dport 30000:50000 -j DNAT --to-destination 172.30.0.10:30000-50000
COMMIT
Скопируйте этот же конфиг в /etc/iptables/rules.v6
cp /etc/iptables/rules.v4 /etc/iptables/rules.v6
Используемые источники
- https://wiki.libvirt.org/page/Networking - Официальная документация
- https://gist.github.com/tachang/24b72d613faa19f76cfa - Скрипт перезапуска сети