Инструкция по обслуживанию VPN-шлюза
1. Расположение файлов
Скрипт маршрутизации
- Путь:
/usr/local/bin/vpn-domains.sh
- Назначение: разрешает домены из файла и добавляет маршруты в таблицу
vpnroute
Список доменов
- Путь:
/opt/ovpn/vpn-domains.txt
- Содержит список доменов, к которым трафик должен идти через VPN
- Пример:
youtube.comtu.begooglevideo.com
Список IP-подсетей
- Путь:
/opt/ovpn/vpn-subnets.txt
- Содержит список IP-адресов или подсетей, к которым трафик также направляется через VPN
- Пример:
8.8.8.0/24209.85.0.0/16
systemd unit-файл
- Путь:
/etc/systemd/system/vpn-routing.service
- Назначение: запускает скрипт
vpn-domains.sh
после подключения VPN - Содержимое:
[Unit]Description=Selective VPN routing via tun0After=network-online.target openvpn-client@default_route.serviceRequires=openvpn-client@default_route.service
[Service]Type=oneshotExecStart=/usr/local/bin/vpn-domains.shRemainAfterExit=true
systemd таймер (опционально)
-
Путь:
/etc/systemd/system/vpn-routing.timer
-
Назначение: периодически обновляет маршруты на случай смены IP у доменов
-
Содержимое:
[Unit]Description=Timer to refresh selective VPN routing[Timer]OnBootSec=1minOnUnitActiveSec=30minUnit=vpn-routing.service[Install]WantedBy=timers.target
2. Команды управления
Первый запуск вручную (после запуска VPN)
sudo /usr/local/bin/vpn-domains.sh
Старт systemd-сервиса вручную
sudo systemctl start vpn-routing.service
Автозапуск при загрузке
sudo systemctl enable vpn-routing.service
Проверка статуса
systemctl status vpn-routing.service
Перезапуск
sudo systemctl restart vpn-routing.service
(Опционально) Включение таймера
sudo systemctl enable --now vpn-routing.timer
3. Важные замечания
- OpenVPN клиент должен быть настроен с
route-nopull
, чтобы не перетягивать весь трафик через VPN. - Файл
/etc/openvpn/client/default_route.conf
должен ссылаться на рабочий.ovpn
-файл или содержать его содержимое. - IP-адреса, добавленные вручную, будут сохранены при перезапуске скрипта.
- После редактирования
.txt
-файлов необходимо перезапустить сервис:
sudo systemctl restart vpn-routing.service
4. Устранение неполадок
-
Если сайт не открывается через VPN:
-
Убедитесь, что его IP-адрес попадает в
vpnroute
:Terminal window ip rule showip route show table vpnroute -
Проверьте DNS-резолвинг:
Terminal window dig +short <домен>
-
-
Если после перезагрузки маршруты отсутствуют:
- Убедитесь, что unit-файл включён:
systemctl is-enabled vpn-routing.service
- Проверить таймер:
systemctl list-timers | grep vpn-routing
- Убедитесь, что unit-файл включён:
Готово. Инфраструктура настроена. Все изменения — только через /opt/ovpn/vpn-domains.txt
и /opt/ovpn/vpn-subnets.txt
.