Proxmox setup
This commit is contained in:
@@ -28,6 +28,26 @@ sudo systemctl enable zabbix-agent
|
|||||||
sudo /etc/init.d/zabbix-agent status
|
sudo /etc/init.d/zabbix-agent status
|
||||||
#zabbix_agentd -V
|
#zabbix_agentd -V
|
||||||
|
|
||||||
|
echo -e "${C_LGn}Autoupdate IPTable rules ...${RES}"
|
||||||
|
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 enable --now iptables-restore-custom.service
|
||||||
|
|
||||||
|
|
||||||
echo -e "${C_LGn}Installing Node Exporter ...${RES}"
|
echo -e "${C_LGn}Installing Node Exporter ...${RES}"
|
||||||
cd $HOME && \
|
cd $HOME && \
|
||||||
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz && \
|
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz && \
|
||||||
@@ -79,6 +99,9 @@ chmod 755 /usr/local/bin/renew-pve-certs.sh
|
|||||||
|
|
||||||
mkdir /var/lib/vz/extDB && chmod -R 777 /var/lib/vz/extDB
|
mkdir /var/lib/vz/extDB && chmod -R 777 /var/lib/vz/extDB
|
||||||
|
|
||||||
|
mkdir /var/lib/vz/temp
|
||||||
|
echo "tmpdir: /var/lib/vz/temp" >> /etc/vzdump.conf
|
||||||
|
|
||||||
echo "Меняем часовой пояс на Europe/Moscow"
|
echo "Меняем часовой пояс на Europe/Moscow"
|
||||||
sudo timedatectl set-timezone Europe/Moscow
|
sudo timedatectl set-timezone Europe/Moscow
|
||||||
date
|
date
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "🔍 NVMe Disk Health Report"
|
||||||
|
echo "=========================="
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Проверка наличия утилиты
|
||||||
|
if ! command -v nvme &>/dev/null; then
|
||||||
|
echo "❌ Утилита 'nvme' не найдена. Установите: sudo apt install nvme-cli"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Поиск всех NVMe-дисков
|
||||||
|
NVME_DISKS=$(ls /dev/nvme*n1 2>/dev/null | grep -E '^/dev/nvme[0-9]n1$')
|
||||||
|
|
||||||
|
if [[ -z "$NVME_DISKS" ]]; then
|
||||||
|
echo "❌ NVMe диски не найдены"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for DISK in $NVME_DISKS; do
|
||||||
|
echo "📦 Проверка: $DISK"
|
||||||
|
echo "--------------------------"
|
||||||
|
|
||||||
|
CONTROLLER="/dev/$(basename "$DISK" | sed 's/n1$//')"
|
||||||
|
TEMP_FILE=$(mktemp)
|
||||||
|
|
||||||
|
# Получение SMART-лога
|
||||||
|
nvme smart-log "$CONTROLLER" > "$TEMP_FILE"
|
||||||
|
|
||||||
|
# Парсинг значений
|
||||||
|
USED=$(grep -i "percentage_used" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
|
||||||
|
TEMP_C=$(grep -i "^temperature[^_]" "$TEMP_FILE" | grep -oP '[0-9]+(?=°C)' | sort -nr | head -n1)
|
||||||
|
MEDIA_ERR=$(grep -i "media_errors" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
|
||||||
|
NUM_ERR=$(grep -i "num_err_log_entries" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
|
||||||
|
SPARE=$(grep -i "available_spare[^_]" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
|
||||||
|
DATA_WRITTEN=$(grep -i "Data Units Written" "$TEMP_FILE" | grep -oP '\\([0-9\\.]+ TB\\)' | tr -d '()')
|
||||||
|
POWER_HOURS=$(grep -i "power_on_hours" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
|
||||||
|
UNSAFE_SHUTDOWNS=$(grep -i "unsafe_shutdowns" "$TEMP_FILE" | cut -d ':' -f2 | tr -cd '0-9')
|
||||||
|
|
||||||
|
# Расчёт времени наработки
|
||||||
|
if [[ -n "$POWER_HOURS" && "$POWER_HOURS" -gt 0 ]]; then
|
||||||
|
DAYS=$((POWER_HOURS / 24))
|
||||||
|
YEARS=$(echo "scale=1; $DAYS / 365" | bc)
|
||||||
|
UPTIME="$POWER_HOURS ч / $DAYS дн / ${YEARS} г"
|
||||||
|
else
|
||||||
|
UPTIME="N/A"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Вывод
|
||||||
|
echo "🧠 Износ SSD: ${USED:-N/A}%"
|
||||||
|
echo "🌡 Температура: ${TEMP_C:-N/A}°C"
|
||||||
|
echo "💾 Оставшийся запас: ${SPARE:-N/A}%"
|
||||||
|
echo "📉 Записано всего: ${DATA_WRITTEN:-N/A}"
|
||||||
|
echo "⏱ Время наработки: $UPTIME"
|
||||||
|
echo "⚠️ Media Errors: ${MEDIA_ERR:-N/A}"
|
||||||
|
echo "❗ Controller Errors: ${NUM_ERR:-N/A}"
|
||||||
|
echo "🔌 Unsafe Shutdowns: ${UNSAFE_SHUTDOWNS:-N/A}"
|
||||||
|
|
||||||
|
# Оценка состояния
|
||||||
|
echo -n "🔎 Оценка: "
|
||||||
|
if [[ -n "$USED" && "$USED" -ge 90 ]]; then
|
||||||
|
echo "❌ SSD почти исчерпан"
|
||||||
|
elif [[ -n "$TEMP_C" && "$TEMP_C" -ge 60 ]]; then
|
||||||
|
echo "⚠️ Высокая температура"
|
||||||
|
elif [[ -n "$NUM_ERR" && "$NUM_ERR" -gt 100 ]]; then
|
||||||
|
echo "⚠️ Ошибки контроллера превышают норму"
|
||||||
|
elif [[ -n "$UNSAFE_SHUTDOWNS" && "$UNSAFE_SHUTDOWNS" -gt 10 ]]; then
|
||||||
|
echo "⚠️ Много аварийных отключений питания"
|
||||||
|
else
|
||||||
|
echo "✅ Состояние хорошее"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Модель, серийник, прошивка
|
||||||
|
echo "📄 Инфо:"
|
||||||
|
nvme id-ctrl "$CONTROLLER" | grep -Ei "mn|sn|fr"
|
||||||
|
echo
|
||||||
|
|
||||||
|
rm -f "$TEMP_FILE"
|
||||||
|
done
|
||||||
|
|
||||||
|
```
|
||||||
@@ -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