This commit is contained in:
wakadakawaka 2025-06-11 20:25:15 +05:00
parent e039fddeab
commit e668763b96

View File

@ -2,146 +2,148 @@
title: Инструкция по обслуживанию VPN-шлюза (Debian)
---
## 🧭 Общая схема
## 1. Расположение файлов
* Устройства в сети используют `192.168.1.120` как шлюз
* Только указанные домены маршрутизируются через VPN (`tun0`)
* Остальной трафик идёт напрямую через `enp5s0`
### Скрипт маршрутизации
* Путь: `/usr/local/bin/vpn-domains.sh`
* Назначение: разрешает домены из файла и добавляет маршруты в таблицу `vpnroute`
### Список доменов
* Путь: `/opt/ovpn/vpn-domains.txt`
* Содержит список доменов, к которым трафик должен идти через VPN
* Пример:
```
youtube.com
tu.be
googlevideo.com
```
### Список IP-подсетей
- Путь: `/opt/ovpn/vpn-subnets.txt`
- Содержит список IP-адресов или подсетей, к которым трафик также направляется через VPN
- Пример:
```
8.8.8.0/24
209.85.0.0/16
````
### systemd unit-файл
- Путь: `/etc/systemd/system/vpn-routing.service`
- Назначение: запускает скрипт `vpn-domains.sh` после подключения VPN
- Содержимое:
```ini
[Unit]
Description=Selective VPN routing via tun0
After=network-online.target openvpn-client@default_route.service
Requires=openvpn-client@default_route.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/vpn-domains.sh
RemainAfterExit=true
````
### systemd таймер (опционально)
* Путь: `/etc/systemd/system/vpn-routing.timer`
* Назначение: периодически обновляет маршруты на случай смены IP у доменов
* Содержимое:
```ini
[Unit]
Description=Timer to refresh selective VPN routing
[Timer]
OnBootSec=1min
OnUnitActiveSec=30min
Unit=vpn-routing.service
[Install]
WantedBy=timers.target
```
---
## ✅ 1. Проверка статуса
## 2. Команды управления
### Подключение OpenVPN:
### Первый запуск вручную (после запуска VPN)
```bash
sudo systemctl status openvpn-client@default_route
sudo /usr/local/bin/vpn-domains.sh
```
### Маршруты к доменам через VPN:
### Старт systemd-сервиса вручную
```bash
ip rule show
ip route show table vpnroute
sudo systemctl start vpn-routing.service
```
### Интерфейс VPN:
### Автозапуск при загрузке
```bash
ip a show tun0
sudo systemctl enable vpn-routing.service
```
### Проверка статуса
```bash
systemctl status vpn-routing.service
```
### Перезапуск
```bash
sudo systemctl restart vpn-routing.service
```
### (Опционально) Включение таймера
```bash
sudo systemctl enable --now vpn-routing.timer
```
---
## 🔁 2. Перезапуск компонентов
## 3. Важные замечания
### Перезапуск OpenVPN:
* OpenVPN клиент должен быть настроен с `route-nopull`, чтобы не перетягивать весь трафик через VPN.
* Файл `/etc/openvpn/client/default_route.conf` должен ссылаться на рабочий `.ovpn`-файл или содержать его содержимое.
* IP-адреса, добавленные вручную, будут сохранены при перезапуске скрипта.
* После редактирования `.txt`-файлов необходимо перезапустить сервис:
```bash
sudo systemctl restart openvpn-client@default_route
```
### Обновление маршрутов:
```bash
sudo systemctl restart vpn-routing
sudo systemctl restart vpn-routing.service
```
---
## 🔄 3. Обновление списка доменов
## 4. Устранение неполадок
Редактировать файл:
* Если сайт не открывается через VPN:
```bash
sudo nano /opt/ovpn/vpn-domains.txt
```
* Убедитесь, что его IP-адрес попадает в `vpnroute`:
Применить изменения:
```bash
ip rule show
ip route show table vpnroute
```
* Проверьте DNS-резолвинг:
```bash
sudo systemctl restart vpn-routing
```
```bash
dig +short <домен>
```
* Если после перезагрузки маршруты отсутствуют:
* Убедитесь, что unit-файл включён: `systemctl is-enabled vpn-routing.service`
* Проверить таймер: `systemctl list-timers | grep vpn-routing`
---
## 🕒 4. Автообновление маршрутов
Обновление каждые 15 минут через systemd-timer:
Проверка:
```bash
systemctl list-timers vpn-routing.timer
```
---
## 🔥 5. iptables / UFW
### NAT:
```bash
sudo iptables -t nat -L POSTROUTING -n -v
```
Должны быть `MASQUERADE` на `tun0` и `enp5s0`
### UFW:
```bash
sudo ufw status verbose
```
---
## 🧰 6. Обновление системы
```bash
sudo apt update && sudo apt upgrade
```
---
## 🪠 7. Сброс маршрутов
```bash
sudo ip rule | grep vpnroute | awk '{print $1}' | xargs -I {} sudo ip rule del priority {}
sudo ip route flush table vpnroute
```
---
## 📋 8. Логи
### vpn-routing:
```bash
sudo journalctl -u vpn-routing.service -n 50
```
### UFW:
```bash
sudo ufw logging on
```
---
## ⚠️ 9. При пропаже интернета у клиентов
1. `ping 192.168.1.120`
2. `cat /proc/sys/net/ipv4/ip_forward`
3. `iptables -t nat -L POSTROUTING`
4. `systemctl status openvpn-client@default_route`
5. `dmesg | grep UFW`
---
## ♻️ 10. Полная перезагрузка
```bash
sudo systemctl restart openvpn-client@default_route
sudo systemctl restart vpn-routing
sudo systemctl restart ufw
```
Готово. Инфраструктура настроена. Все изменения — только через `/opt/ovpn/vpn-domains.txt` и `/opt/ovpn/vpn-subnets.txt`.