# На сервер Hezner я добавил доп. IP и после этого у меня LXC контейнеры перестали выходить в интернет. # ❗️Проблема: LXC контейнеры не имеют доступа в интернет через NAT на Proxmox ## добавил поддержку внешних IP, через добавление доп интерфейса в /etc/network/interfaces ```bash auto vmbr0 iface vmbr0 inet static address 167.235.103.244 netmask 255.255.255.192 gateway 167.235.103.193 bridge_ports enp195s0 bridge_stp off bridge_fd 0 ``` ## 📍Контекст На хост-сервере Proxmox используется bridge-сеть `vmbr100` для подключения LXC-контейнеров с приватными IP (например, `192.168.100.x`). Основной интерфейс `enp195s0` имеет публичный IP (например, `167.235.103.244`). На хосте настроено правило NAT, позволяющее контейнерам выходить в интернет через `iptables`: ```bash iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o enp195s0 -j MASQUERADE ``` ## ❌ Проблема После: - добавления дополнительного публичного IP; - изменения bridge-интерфейса (`vmbr0`); - перезапуска сервера; контейнеры теряют доступ в интернет. Пинги (например, `ping 8.8.8.8`) не работают, DNS-запросы не уходят. ### Диагностика - `tcpdump` на `vmbr100` показывает, что пакеты уходят из контейнера; - `tcpdump` на `enp195s0` — показывает, что они **не маршрутизируются наружу**; - `iptables -t nat -L POSTROUTING -n -v` показывает, что `MASQUERADE`-правило не работает (пакеты = 0); - `ip route get 8.8.8.8` возвращает маршрут `via vmbr0` — это не работает корректно. --- ## ✅ Решение ### 1. Удалить старое `MASQUERADE`-правило: ```bash iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o enp195s0 -j MASQUERADE ``` ### 2. Добавить `SNAT`-правило c явным IP: ```bash iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o enp195s0 -j SNAT --to-source 167.235.103.244 ``` ### 3. Убедиться, что `FORWARD`-разрешения включены: ```bash iptables -I FORWARD -s 192.168.100.0/24 -o enp195s0 -j ACCEPT iptables -I FORWARD -d 192.168.100.0/24 -i enp195s0 -j ACCEPT ``` ### 4. Проверить, что включена маршрутизация: ```bash sysctl -w net.ipv4.ip_forward=1 ``` Постоянно включить: ```bash echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p ``` --- ## 💾 Сохранение правил После успешной настройки сохранить правила: ```bash iptables-save > /etc/iptables/rules.v4 ``` --- ## 🔁 Автоматическое восстановление правил ### Способ 1: `iptables-persistent` (рекомендуется) ```bash apt install iptables-persistent ``` Файлы: - `/etc/iptables/rules.v4` - `/etc/iptables/rules.v6` Восстанавливаются автоматически при загрузке. ### Способ 2: systemd unit (если используется `pve-firewall`) Создать `systemd`-сервис `/etc/systemd/system/iptables-restore-custom.service`: ```ini tee /etc/systemd/system/iptables-restore-custom.service > /dev/null << EOF [Unit] Description=Restore iptables rules after Proxmox Firewall After=pve-firewall.service Wants=network-online.target ConditionPathExists=/etc/iptables/rules.v4 [Service] Type=oneshot ExecStart=/bin/sh -c '/sbin/iptables-restore < /etc/iptables/rules.v4' RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF systemctl daemon-reexec systemctl enable --now iptables-restore-custom.service ``` Активировать: ```bash systemctl daemon-reexec systemctl enable --now iptables-restore-custom.service ``` --- ## 🔐 Дополнительно - Убедитесь, что контейнеры имеют в конфиге параметр `gw=192.168.100.1`; - Проверьте, что bridge `vmbr100` существует и имеет адрес `192.168.100.1`; - Проверка сети в контейнере: ```bash ping 192.168.100.1 ip route ping 8.8.8.8 ``` --- ## ✅ Результат Контейнеры получают доступ в интернет через NAT, трафик корректно маршрутизируется, а правила восстанавливаются автоматически при перезапуске Proxmox.