• Как объединить две локальные сети через OpenVPN?

    Frostealth
    @Frostealth
    Backend Developer
    Не помешают конфиги OpenVPN и таблицы маршрутизации с обоих роутеров.
    Предполагаю, что на роутере1 (кв1) отсутствует маршрут до сети кв2 через VPN.
    Исходный ответ

    Настройка маршрутов в ASUS описана здесь: https://www.asus.com/ru/support/FAQ/1011706/

    Итак, требуется на роутере1 прописать маршрут к роутеру2 для сети кв2.
    Маршрут примерно такой:
    - IP-адрес сети: 192.168.1.0
    - Сетевая маска: 255.255.255.0
    - Шлюз: IP-адрес роутера2 внутри сети VPN, например 10.8.0.2

    И не забыть прописать для роутера2 статический адрес (10.8.0.2) для OpenVPN. Иначе OpenVPN сервер может выдать роутеру2 другой IP.

    Без маршрута, роутер1 не будет понимать на какой порт/интерфейс направлять запросы к сети 192.168.1.0/24.

    Если не заработает, то, вероятно, через сеть VPN в сеть клиента VPN отсутствует NAT. Тогда следует сконфигурировать брандмауэр (firewall) на роутерах, в т.ч. и на роутере1. Настройка брандмауэра в ASUS описана здесь: https://www.asus.com/ru/support/FAQ/1013630/

    Необходимо, чтобы брандмауэр на роутере1 пропускал запросы из сети 192.168.1.0/24 в сеть 192.268.0.0/24. И наоборот, на роутере2 - из сети 192.168.0.0/24 в сеть 192.168.1.0/24. Без этого роутер будет отбрасывать все запросы во внутреннюю сеть из других сетей.


    При решении данного вопроса с автором возникли проблемы с роутерами ASUS. Клиент (роутер2) ни в какую не видел сеть за сервером (возможно упустил какую-то опцию, "route ..", "iroute" и "push 'route ...'" не помогли). Решение с tap не подходило из-за отключения DHCP на роутере2.
    Основная проблема - это невозможность загрузить в роутер целиком файл конфигурации сервером. А документацию консоли роутера (через ssh) найти быстро не удалось.
    Если кто знает решение, прошу описать его в комментариях.

    Аренда VPS (выделенного сервера) с Ubuntu и поднятие OpenVPN сервера уже на нем с последующим подключением двух роутеров в качестве клиента решили проблему.
    Можно поднять и на ПК в сети, конечно. В таком случае нужно будет добавить статический IP для этого ПК и выполнить проброс портов в настройках роутера.

    Установку и основную настройку сервера OpenVPN помог упростить скрипт https://git.io/vpn, который пришлось редактировать для замены зашитой в нем сети 10.8.0.0 на другую в связи с наличием пересечения данной сети с другой на одном из роутеров.

    Итак, установка и конфигурация сервера OpenVPN на Ubuntu для объединения двух сетей роутеров без выхода в интернет через VPN. Для начала необходимо подключиться к серверу по SSH.

    Установка OpenVPN с помощью скрипта через терминал. Скачиваем скрипт и запускаем его командами ниже.
    >>> wget https://git.io/vpn -O openvpn-install.sh
    >>> sudo bash openvpn-install.sh


    Отвечаем на все запросы скрипта, выбираем протокол UDP.
    После завершения установки открываем файл nano /etc/openvpn/server/server.conf, удаляем все строки, начинающиеся на push, и добавляем следующее:
    ifconfig-pool-persist ipp.txt
    client-config-dir /etc/openvpn/server/ccd
    client-to-client
    
    route 192.168.0.0 255.255.255.0
    push 'route 192.168.0.0 255.255.255.0'
    
    route 192.168.1.0 255.255.255.0
    push 'route 192.168.1.0 255.255.255.0'

    Пояснение к конфигу

    ifconfig-pool-persist ipp.txt - будет сохранять соответствия выданных им IP адресов в файл `ipp.txt`. Таким образом, каждый клиент будет всегда получать один и тот же IP.

    client-config-dir /etc/openvpn/server/ccd - указывает серверу директорию с дополнительной конфигурацией для каждого клиента.

    client-to-client - разрешает передачу данных между клиентами.

    route 192.168.0.0 255.255.255.0 - уведомляет сервер о локальной сети (192.168.0.0/24) клиента.

    push 'route 192.168.0.0 255.255.255.0' - сервер будет передавать маршрут к указанной сети всем клиентам.


    Далее создадим указанную в конфиге директорию sudo mkdir /etc/openvpn/server/ccd.
    И добавим в нее файлы, названия которых будут отражать имена наших клиентов (указываются далее). И пропишем в них какая сеть какому клиенту принадлежит.
    /etc/openvpn/server/ccd/router1

    iroute 192.168.0.0 255.255.255.0

    /etc/openvpn/server/ccd/router2

    iroute 192.168.1.0 255.255.255.0


    Запускаем скрипт снова для добавления клиента. Для добавления второго запускаем потом еще раз.
    После запуска скрипта вводим цифру 1, соответствующую опции 1) Add a new client.
    Здесь же и указываем название клиента (router1, router2).
    >>> sudo bash openvpn-install.sh

    Скачиваем файлы конфигурации для клиентов, которые сгенерировал скрипт, и загружаем соответствующий конфиг при создании OpenVPN клиента на роутерах.
    Маршруты на роутерах прописывать не надо, как и правила в брандмауэре. OpenVPN сервер сам отправляет маршруты клиентам, которые мы указали в его конфиге ранее с помощью push 'route ...'.
    Ответ написан
    1 комментарий