Proxmox setup
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
|
||||
# На сервер 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.
|
||||
Reference in New Issue
Block a user