Как получить доступ к LAN-клиенту OpenVPN с Synology RT2600AC в качестве сервера OpenVPN?

Вопрос или проблема

У меня есть удаленный роутер (не Synology), который подключается к моему локальному роутеру Synology RT2600ac в качестве клиента OpenVPN, и я хотел бы получить доступ к устройствам за ним из локальной сети. Необходимая директива route в файле openvpn.conf удаляется после перезапуска службы или перезагрузки устройства.

Хотя было бы проще настроить удаленный роутер как сервер OpenVPN, он использует LTE для WAN-соединения и имеет IP-адрес CGNAT, поэтому входящие соединения невозможны. Получить статический IP нецелесообразно (это учетная запись для конечных пользователей).

Как мне сделать так, чтобы настройки route не исчезали?

Во-первых, выясняется, что хотя Synology позиционирует RT2600ac как предлагающий OpenVPN в конфигурации сервера, реализация Synology имеет ограниченные возможности (например, поддерживает только режим tun, нет tap и требует устаревшую топологию net30) из-за их интерфейса конфигурации и скриптов на серверной стороне. Конкретная версия OpenVPN (2.4.11) также считается устаревшей и неподдерживаемой согласно этой вики OpenVPN.

Тем не менее, я нашел способ сохранить директивы route в файле openvpn.conf после перезапусков и перезагрузок. ОБРАТИТЕ ВНИМАНИЕ, ЧТО ЭТО НЕ ПОДДЕРЖИВАЕТСЯ ТЕХНИЧЕСКОЙ ПОДДЕРЖКОЙ SYNOLOGY, И ВАШИ ИЗМЕНЕНИЯ МОГУТ БЫТЬ УДАЛЕНЫ ПРИ ОБНОВЛЕНИИ SRM ИЛИ ПАКЕТА VPN PLUS SERVER.

Следующие изменения необходимо внести через консоль SSH, используя учетную запись с правами администратора (например, способную выполнять sudo).

Ключевые элементы:

  • /var/packages/VPNPlusServer/target/scripts/openvpn.sh
  • /var/packages/VPNPlusServer/target/scripts/restart_openvpn.sh
  • /usr/syno/etc/packages/VPNPlusServer/openvpn/openvpn.conf
  • IP-адрес и маска подсети сети клиента. В моем случае 10.168.0.0/16 и 10.128.0.0/16 — это локальные сети двух отдельных клиентов.

Процедура

  1. Отредактируйте /var/packages/VPNPlusServer/target/scripts/openvpn.sh и /var/packages/VPNPlusServer/target/scripts/restart_openvpn.sh

  2. Внутри процедуры modify_push_route () четвертая строка ищет маршруты в подготовке к удалению. Строка должна выглядеть как одна из следующих:

    /bin/grep route "${CONF_DIR}/${OPENVPN_CONF}" | /bin/grep -v "${ServerInfo}" | while read -r line
    /bin/grep route "${OPENVPN_CONFIG}" | /bin/grep -v "${ServerInfo}" | while read -r line

  3. Измените строку поиска grep с route на ^route. Это заставит скрипт игнорировать директивы route, предшествующие пробелом или двойным дефисом (--). Измененные строки должны выглядеть как одна из следующих:

    /bin/grep ^route "${CONF_DIR}/${OPENVPN_CONF}" | /bin/grep -v "${ServerInfo}" | while read -r line
    /bin/grep ^route "${OPENVPN_CONFIG}" | /bin/grep -v "${ServerInfo}" | while read -r line

  4. Отредактируйте /usr/syno/etc/packages/VPNPlusServer/openvpn/openvpn.conf и добавьте вашу директиву route предваряя ее пробелом или двойным дефисом. Я добавил свою сразу под директивой server, между двумя строками комментариев. Сохраните изменения.

    server 10.0.160.0 255.255.255.0
    ##inject start
    --route 10.168.0.0 255.255.0.0
     route 10.128.0.0 255.255.0.0
    ##inject end
    
  5. [РЕКОМЕНДУЕТСЯ, НО НЕ ОБЯЗАТЕЛЬНО] Сохраните дополнительные значения route в резервном файле на случай их удаления. Я создал openvpn.inject

  6. Перезагрузите роутер, выполнив reboot, или перезапустите OpenVPN, выполнив openvpn restart

ПРИМЕЧАНИЕ: Для работы маршрутизации в сторону клиентской локальной сети вы также должны включить директиву iroute (например, iroute 10.128.0.0 255.255.0.0) в конфигурационный файл экземпляра клиента с использованием --client-config-dir (также известного как ccd). См. директиву --iroute в справочном руководстве для получения дополнительной информации.

Почему это работает

Справочное руководство OpenVPN 2.4: Опции утверждает, что параметры конфигурации могут быть включены в конфигурационный файл и что два ведущих дефиса (“–“) могут быть опущены. В результате, похоже, что ведущие пробелы и двойные дефисы не мешают применению директив во время выполнения. Кроме того, эти строки игнорируются скриптами запуска из-за изменений в третьем шаге.

Ответ или решение

Чтобы получить доступ к локальной сети за маршрутизатором OpenVPN-клиентом, подключенным к вашему маршрутизатору Synology RT2600AC, необходимо выполнить несколько шагов для того, чтобы настройки маршрутов остались неизменными после перезагрузки или перезапуска службы OpenVPN. Важно отметить, что Synology реализует возможности OpenVPN серверной конфигурации с определенными ограничениями (например, поддерживает только режим tun и требует устаревшую топологию net30), поэтому данные изменения могут исчезнуть при обновлении системы.

Шаги для сохранения настроек маршрута

  1. Подключение по SSH: Используйте SSH, чтобы подключиться к маршрутизатору Synology с учетной записью администратора.

  2. Редактирование скриптов:

    • Найдите и отредактируйте файлы:
      • /var/packages/VPNPlusServer/target/scripts/openvpn.sh
      • /var/packages/VPNPlusServer/target/scripts/restart_openvpn.sh
    • Внутри функции modify_push_route(), измените строки, которые ищут маршруты, добавив символ ^ перед словом route. Например:
      /bin/grep ^route "${CONF_DIR}/${OPENVPN_CONF}" | /bin/grep -v "${ServerInfo}" | while read -r line
  3. Добавление маршрутов в конфигурацию OpenVPN:

    • Отредактируйте файл конфигурации /usr/syno/etc/packages/VPNPlusServer/openvpn/openvpn.conf и добавьте нужные вам маршруты. Важно, чтобы перед директивами route стоял пробел или двойной дефис. Например:
      server 10.0.160.0 255.255.255.0
      ##inject start
      --route 10.168.0.0 255.255.0.0
      route 10.128.0.0 255.255.0.0
      ##inject end
  4. Резервное копирование настроек маршрута:

    • Рекомендуется сохранить дополнительные маршруты в резервный файл, например, openvpn.inject.
  5. Перезапуск OpenVPN:

    • Перезагрузите маршрутизатор с помощью команды reboot или перезапустите OpenVPN с помощью команды openvpn restart.

Дополнительные шаги

  • Для обеспечения работы маршрутизации на стороне клиента необходимо также включить директиву iroute в конфигурационный файл клиентского экземпляра, используя --client-config-dir (или ccd). Например:
    iroute 10.128.0.0 255.255.0.0

Объяснение работы

Изменения, внесенные в скрипты, позволяют избежать удаления директив route, поскольку они теперь игнорируют строки маршрутов с ведущими пробелами или двойными дефисами. Команды OpenVPN совершенно не противоречат этому оформлению, что позволяет маршрутам при этом работать как должно.

Важное замечание

Изменения, внесенные в системные файлы, могут быть стираемы при обновлении SRM или пакета VPN Plus Server, поэтому всегда рекомендуется делать резервные копии важных настроек и быть готовыми к повторному внесению изменений после обновления.

Эти шаги позволят обеспечить доступ к удаленным устройствам в вашей локальной сети через OpenVPN клиента на маршрутизаторе Synology RT2600AC.

Оцените материал
Добавить комментарий

Капча загружается...