Маршрут от VPN-сервера к VPN-клиенту

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

Моя цель – настроить двусторонний VPN между двумя сайтами.
Я хочу иметь возможность получать доступ к серверам с клиентской стороны и к клиентским устройствам с серверной стороны.

Я не делаю ничего сложного и пытался следовать инструкциям в руководстве по настройке соединения OpenVPN между сайтами. Но, думаю, из-за того, что я использую два роутера DD-WRT в качестве сервера и клиента для VPN, у меня возникают проблемы с сопоставлением руководства с моей ситуацией.

С клиентской стороны я могу подключаться к хостам сети серверной стороны.
С серверной стороны я не могу подключиться к хостам клиентской стороны.

Сетевое отображение:

CG-NAT Network LAN 192.168.0.0/22
OpenVPN клиент на DD-WRT 192.168.0.2

Обычная сеть LAN 192.168.4.0/22
OpenVPN сервер на DD-WRT 192.168.4.2

Туннель: 10.10.28.1 <-> 10.10.28.2 (Я вижу, что он настроен правильно в логах)

Я контролирую обе стороны, поэтому пытался настроить маршруты, чтобы исправить ситуацию.
Я подозреваю, что маршруты (или настройки на сервере OpenVPN) неправильные.

Это таблица маршрутизации на стороне клиента OpenVPN:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    0      0        0 br0
10.10.28.0      *               255.255.255.0   U     0      0        0 tun1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
192.168.0.0     *               255.255.252.0   U     0      0        0 br0
192.168.4.0     10.10.28.1      255.255.252.0   UG    200    0        0 tun1

Я могу пинговать с любой точки клиентской сети в сеть 192.168.4.0:

# ping 192.168.4.222
PING 192.168.4.222 (192.168.4.222): 56 data bytes
64 bytes from 192.168.4.222: seq=0 ttl=63 time=42.244 ms
64 bytes from 192.168.4.222: seq=1 ttl=63 time=32.047 ms

Это таблица маршрутизации на хосте сервера OpenVPN, когда я его впервые включаю:

default via 192.168.4.1 dev br0
10.10.28.0/24 dev tun2 scope link  src 10.10.28.1
127.0.0.0/8 dev lo scope link
192.168.4.0/22 dev br0 scope link  src 192.168.4.2

Наблюдения:
Я не могу пинговать с сети сервера в сеть 192.168.0.0.
ОДНАКО, находясь на хосте сервера OpenVPN (192.168.4.2), я могу пинговать другую сторону туннеля (10.10.28.2)

# ping 10.10.28.2
PING 10.10.28.2 (10.10.28.2): 56 data bytes
64 bytes from 10.10.28.2: seq=0 ttl=64 time=40.287 ms
64 bytes from 10.10.28.2: seq=1 ttl=64 time=35.791 ms

# traceroute 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 46 byte packets
 1  192.168.4.1 (192.168.4.1)  5.108 ms  4.927 ms  3.953 ms
 2  *  *

Так что, моя первая догадка была добавить этот маршрут, чтобы он соответствовал маршруту клиента для подсети сервера:

route add -net 192.168.0.0 netmask 255.255.252.0 gw 10.10.28.2 metric 200 tun2

Это создало дополнительную запись:

192.168.0.0     10.10.28.2      255.255.252.0   UG    200    0        0 tun2

Это внесло некоторые изменения, но traceroute или ping не возвращаются.

# traceroute 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 46 byte packets
 1  *  *  *

Очевидно, я новичок, так что дайте знать, какая дополнительная информация нужна, чтобы помочь мне.

OpenVPN доступ к LAN за клиентом (и наоборот)

Это должно быть вполне стандартной проблемой для OpenVPN между сайтами.
Если я все правильно понимаю, на вашей стороне сервера вы добавили:

  • маршрут к 192.168.0.0/22, который представляет сеть за вашим клиентом,
  • этот маршрут проходит через шлюз 10.10.28.2, который является внутренним адресом вашего сервера в VPN,
    Правильно?

Поскольку вы добавили маршрут в VPN, ваш сервер должен направить пакет к 192.168.0.2 (или любому последнему числу байта в подсети /22) через VPN.
Однако OpenVPN не знает, к какой точке завершения VPN ему направить этот пакет.

Примечание: возможно, это работает от подсети клиента к подсети сервера, потому что клиент должен добавить маршрут по умолчанию через VPN, так что все будет отправлено через него – это не совсем ясно из ваших выдержек.

Поэтому OpenVPN использует концепцию внутреннего маршрута “iroute”, чтобы знать, к какой точке завершения VPN направлять пакет для конкретного диапазона IP-адресов.

В файле конфигурации сервера вам нужно добавить:

route 192.168.0.0 255.255.255.0
client-config-dir ccd

Это сообщит, что пакеты для этой подсети необходимо отправлять на интерфейс VPN.

И включите папку, специфичную для клиента, ccd в конфигурационном файле на сервере:

ifconfig-push 10.10.28.1 255.255.255.0 (это установит IP-адрес, если все статично, я полагаю, это можно опустить, если ваш клиент имеет фиксированный IP в своей конфигурации).

iroute 192.168.0.0 255.255.255.0

Это заставит OpenVPN понять, что пакеты, входящие в VPN с этой подсетью в качестве адреса назначения, необходимо отправлять этому конкретному клиенту.

Клиент должен иметь необходимое для маршрутизации к машинам в своей собственной подсети.

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

Для настройки двунаправленного VPN-соединения между двумя маршрутизаторами DD-WRT, вам нужно убедиться, что маршрутизация настроена правильно как на клиентской, так и на серверной стороне. На основании вашего описания вашей проблемы и текущих маршрутов, давайте рассмотрим шаги для решения вашей ситуации.

Описание ситуации

  • У вас есть клиентская сеть: 192.168.0.0/22 с клиентом OpenVPN на 192.168.0.2.
  • Серверная сеть: 192.168.4.0/22 с сервером OpenVPN на 192.168.4.2.
  • Туннельные адреса: 10.10.28.1 (сервер) и 10.10.28.2 (клиент).

Проблема

Вы можете получить доступ к серверной сети с клиентской стороны, но не наоборот. Это означает, что маршрутизация с сервера на клиент не настроена должным образом.

Предлагаемое решение

  1. Проверка маршрутизаторов и конфигурации OpenVPN:
    Убедитесь, что у вас правильно настроена конфигурация OpenVPN и что на сервере включена опция client-config-dir.

    В конфигурационном файле сервера OpenVPN добавьте:

    route 192.168.0.0 255.255.252.0
    client-config-dir ccd
  2. Создание клиентского конфигурационного файла:
    Вам нужно создать файл для клиента в директории, указанной в client-config-dir. Назовите файл так же, как имя вашего клиента, например, client_name, и добавьте в него следующее:

    ifconfig-push 10.10.28.2 255.255.255.0
    iroute 192.168.0.0 255.255.252.0

    Это говорит серверу OpenVPN, что пакеты, адресованные в подсеть 192.168.0.0, должны быть отправлены этому конкретному клиенту (10.10.28.2).

  3. Настройка маршрутов на сервере и клиенте:
    Убедитесь, что у вас правильно настроены маршруты. На сервере OpenVPN, добавьте маршрут к подсети клиента. В вашем случае это уже сделано, но если нет, используйте команду, которую вы уже упоминали:

    route add -net 192.168.0.0 netmask 255.255.252.0 gw 10.10.28.2 metric 200 tun2
  4. Проверка маршрутов на клиенте:
    На клиентском маршрутизаторе должно быть два маршрута, которые направляют трафик по туннелю, например:

    192.168.4.0     10.10.28.1      255.255.252.0   UG    200    0        0 tun1

    Если необходимо, можете добавить маршрут вручную.

  5. Настройка брандмауэра:
    Убедитесь, что брандмауэры на обеих сторонах не блокируют пакеты, которые должны идти в обратном направлении. Проверьте соответствующие правила IPTables или настройки брандмауэра, чтобы убедиться, что разрешен трафик между двумя сетями.

  6. Тестирование подключения:
    После внесения всех изменений, перезапустите службу OpenVPN и протестируйте доступ. Попробуйте пинговать адреса из каждой сети, чтобы удостовериться, что соединение установлено корректно.

Заключение

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

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

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