Skip to content

Инструкция по обслуживанию VPN-шлюза

1. Расположение файлов

Скрипт маршрутизации

  • Путь: /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
  • Содержимое:
[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 у доменов

  • Содержимое:

    [Unit]
    Description=Timer to refresh selective VPN routing
    [Timer]
    OnBootSec=1min
    OnUnitActiveSec=30min
    Unit=vpn-routing.service
    [Install]
    WantedBy=timers.target

2. Команды управления

Первый запуск вручную (после запуска VPN)

Terminal window
sudo /usr/local/bin/vpn-domains.sh

Старт systemd-сервиса вручную

Terminal window
sudo systemctl start vpn-routing.service

Автозапуск при загрузке

Terminal window
sudo systemctl enable vpn-routing.service

Проверка статуса

Terminal window
systemctl status vpn-routing.service

Перезапуск

Terminal window
sudo systemctl restart vpn-routing.service

(Опционально) Включение таймера

Terminal window
sudo systemctl enable --now vpn-routing.timer

3. Важные замечания

  • OpenVPN клиент должен быть настроен с route-nopull, чтобы не перетягивать весь трафик через VPN.
  • Файл /etc/openvpn/client/default_route.conf должен ссылаться на рабочий .ovpn-файл или содержать его содержимое.
  • IP-адреса, добавленные вручную, будут сохранены при перезапуске скрипта.
  • После редактирования .txt-файлов необходимо перезапустить сервис:
Terminal window
sudo systemctl restart vpn-routing.service

4. Устранение неполадок

  • Если сайт не открывается через VPN:

    • Убедитесь, что его IP-адрес попадает в vpnroute:

      Terminal window
      ip rule show
      ip route show table vpnroute
    • Проверьте DNS-резолвинг:

      Terminal window
      dig +short <домен>
  • Если после перезагрузки маршруты отсутствуют:

    • Убедитесь, что unit-файл включён: systemctl is-enabled vpn-routing.service
    • Проверить таймер: systemctl list-timers | grep vpn-routing

Готово. Инфраструктура настроена. Все изменения — только через /opt/ovpn/vpn-domains.txt и /opt/ovpn/vpn-subnets.txt.