Thank you for reading this post, don't forget to subscribe!
Настройки сети сохраняются здесь: /etc/libvirt/qemu/networks
Создадим сеть по умолчанию. Отредактируем уже существующую сеть.
1 |
lxc net-edit --network default |
Обратите внимание на UUID. У вас он может быть другим. Вставьте следующий код в открывшемся редакторе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<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 в самом контейнере.
После того, как мы настроили сеть, добавляем ее в автозапуск.
1 |
lxc net-autostart --network default |
Перезапускаем сеть:
1 2 |
lxc net-destroy default lxc net-start default |
После каждого редактирования настроек сети ее надо перезапускать.
Добавление хостов на лету
Иногда нужно добавить новые статические адреса, не перезагружая сеть. Для этого существуют следующая комманда:
1 |
lxc net-update default add-last ip-dhcp-host "<host name='bob' ip='172.30.0.25' />" --live --config |
Как узнать IP адреса хостов в libvirt?
Для того, чтобы узнать IP, нужно выполнить комманду:
1 |
lxc net-dhcp-leases default |
Настройка iptables
Включаем NAT
1 2 |
echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf |
Для автоматической настройки создадим скрипты iptables. Создайте папку
1 |
mkdir /etc/iptables |
Создайте файл:
nano /etc/iptables/rules.v4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
*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 *filter :INPUT ACCEPT [15:688] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [302:39762] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT # Разрешаем FTP -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp --dport 30000:50000 -j ACCEPT # Разрешаем входящие соединения http -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT # Разрешаем входящие соединения ssh -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT # Запрещаем остальные входящие соединения #-A INPUT -j REJECT --reject-with icmp-host-prohibited #-A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT *mangle :PREROUTING ACCEPT [389:34269] :INPUT ACCEPT [389:34269] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [303:39898] :POSTROUTING ACCEPT [303:39898] -A POSTROUTING -s 172.30.0.0/24 -d 224.0.0.0/24 -j RETURN COMMIT |
nano /etc/iptables/rules.v6
1 2 3 4 5 6 7 |
# Generated by ip6tables-save v1.6.1 on Fri Feb 8 21:36:53 2019 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [88:5584] COMMIT # Completed on Fri Feb 8 21:36:53 2019 |
nano /etc/network/if-up.d/00-iptables
1 2 3 |
#!/bin/sh iptables-restore < /etc/iptables/rules.v4 ip6tables-restore < /etc/iptables/rules.v6 |
Установите флаг выполнения на созданном файле
1 |
chmod +x /etc/network/if-up.d/00-iptables |