Вопрос или проблема
У меня есть удаленный роутер (не 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
— это локальные сети двух отдельных клиентов.
Процедура
-
Отредактируйте
/var/packages/VPNPlusServer/target/scripts/openvpn.sh
и/var/packages/VPNPlusServer/target/scripts/restart_openvpn.sh
-
Внутри процедуры
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
-
Измените строку поиска
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
-
Отредактируйте
/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
-
[РЕКОМЕНДУЕТСЯ, НО НЕ ОБЯЗАТЕЛЬНО] Сохраните дополнительные значения
route
в резервном файле на случай их удаления. Я создалopenvpn.inject
-
Перезагрузите роутер, выполнив
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), поэтому данные изменения могут исчезнуть при обновлении системы.
Шаги для сохранения настроек маршрута
-
Подключение по SSH: Используйте SSH, чтобы подключиться к маршрутизатору Synology с учетной записью администратора.
-
Редактирование скриптов:
- Найдите и отредактируйте файлы:
/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
- Найдите и отредактируйте файлы:
-
Добавление маршрутов в конфигурацию 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
- Отредактируйте файл конфигурации
-
Резервное копирование настроек маршрута:
- Рекомендуется сохранить дополнительные маршруты в резервный файл, например,
openvpn.inject
.
- Рекомендуется сохранить дополнительные маршруты в резервный файл, например,
-
Перезапуск 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.