diff --git a/src/content/docs/knowledge-base/Администрирование/Инструкция по обслуживанию VPN-шлюза.md b/src/content/docs/knowledge-base/Администрирование/Инструкция по обслуживанию VPN-шлюза.md index 805c24b..2a9506d 100644 --- a/src/content/docs/knowledge-base/Администрирование/Инструкция по обслуживанию VPN-шлюза.md +++ b/src/content/docs/knowledge-base/Администрирование/Инструкция по обслуживанию VPN-шлюза.md @@ -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`.