Не удается использовать клиент OpenVPN в качестве шлюза для другой сети.

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

У меня есть две сети: 10.8.0.0/24 и 192.168.1.0/24.

У меня есть OpenVPN сервер на Linux с IP 10.8.0.1 и один клиент с IP 10.8.0.2, который имеет интерфейс в сети 192.168.1.0/24. На обеих машинах используется net.ipv4.ip_forward=1.

Интерфейс в сети 10.8.0.0/24 на OpenVPN сервере называется tun0, интерфейс в сети 10.8.0.0/24 на OpenVPN клиенте также называется tun0, а интерфейс в сети 192.168.1.0/24 на OpenVPN клиенте называется ens19.

Когда я добавляю маршрут к 192.168.1.0/24 с командой “ip route add 192.168.1.0/24 via 10.8.0.2” на OpenVPN сервере под управлением Linux, и запускаю “tcpdump -i tun0” на сервере, и пытаюсь сделать пинг 192.168.1.100, который находится в сети 192.168.1.0/24 (с сервера), я вижу следующее в выводе tcpdump: “08:26:50.121070 IP 10.8.0.1 > 192.168.1.100: ICMP echo request, id 27746, seq 1, length 64”, однако, когда я выполняю “tcpdump -i tun0” на стороне клиента, я ничего не вижу.

Если на серверной стороне я вижу, что из tun0 пакеты отправляются туда, почему ничего не видно в выводе tcpdump клиента, указывающего на то, что он что-то получает?

Когда я пингую с сервера клиента, например, делая это: “ping 10.8.0.2”, я вижу это в выводе tcpdump клиента: “08:34:27.681295 IP 10.8.0.1 > 10.8.0.2: ICMP echo request, id 27750, seq 1, length 64”, что означает, что интерфейс действительно работает. Почему же тогда не получаются пакеты, предназначенные для сети 192.168.1.0/24? Где они блокируются и почему?

Кстати, я не хочу делать никакого NAT. Я просто хочу уметь маршрутизировать между двумя сетями, как я могу делать это, когда нет подключения через OpenVPN. Я просто не понимаю, в чем разница.

Здесь также нет правил брандмауэра.

Любая помощь будет очень оценена, это сводит меня с ума.

Вот схема сети:

Схема

Вот таблица маршрутизации OpenVPN сервера:

# ip route show
default via 10.1.0.1 dev ens18 
10.1.0.0/24 dev ens18 proto kernel scope link src 10.1.0.119 
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 
192.168.1.0/24 via 10.8.0.2 dev tun0

Вы можете видеть, что последний маршрут вызывает проблемы. 10.1.0.0/24 – это, очевидно, моя реальная LAN сеть.

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

# ip route show
default via 10.1.0.1 dev ens18 
10.1.0.0/24 dev ens18 proto kernel scope link src 10.1.0.135 
10.1.0.119 via 10.1.0.1 dev ens18 
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 
192.168.1.0/24 dev ens19 proto kernel scope link src 192.168.1.1

И это таблица маршрутизации на ПК в сети 192.168.1.0/24:

# ip route show
default via 192.168.1.1 dev ens18 onlink 
192.168.1.0/24 dev ens18 proto kernel scope link src 192.168.1.100

В случае, если кто-то захочет предложить создать маршрут к 10.8.0.0/24 на ПК (вместо машины 10.8.0.1, которая также действует как роутер), это не то, что я хочу (кроме того, что это все равно не сработает), потому что я хочу, чтобы роутер маршрутизировал трафик, а не чтобы конечный ПК знал маршрут сам по себе, что не имело бы особого смысла…

Я уже пробовал установить маршрут как 10.8.0.1, а не 10.8.0.2, но, как и ожидалось, это не работает, потому что тот, кто должен быть непосредственно подключен к 192.168.1.0/24, это 10.8.0.2, а не 10.8.0.1.

Примечания:

10.1.0.0/24 – это моя LAN сеть. Она работает как WAN сеть для OpenVPN сервера, а также для клиента, как вы можете видеть в таблицах маршрутизации.
10.8.0.0/24 – это VPN сеть.
192.168.1.0/24 – это сеть ПК, в которую у меня проблемы попасть с VPN сервера.

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

Конечно, давайте рассмотрим данную ситуацию подробнее.

Теория

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

Каждое устройство в сети имеет таблицу маршрутизации, которая определяет, каким образом трафик перемещается в сети и за ее пределами. Ваш OpenVPN сервер и клиент находятся в сетях 10.8.0.0/24, а клиент также подключен к сети 192.168.1.0/24. Оба устройства настроены для пересылки IP-пакетов (net.ipv4.ip_forward=1), что является необходимым при маршрутизации за интерфейсом VPN.

Проблема

Вы указали следующую проблему: при попытке маршрутизировать трафик к сети 192.168.1.0/24 через VPN-сервер, вы сталкиваетесь с тем, что пакеты просто не доходят до клиента, несмотря на их видимость в tcpdump на сервере.

Пример

Давайте посмотрим на ваши действия и диаграмму сети более детально:

  1. На сервере OpenVPN с IP 10.8.0.1 вы добавили маршрут к сети 192.168.1.0/24 через команду:

    ip route add 192.168.1.0/24 via 10.8.0.2

    Это значит, что всякий раз, когда серверу необходимо отправить пакеты в сеть 192.168.1.0/24, он будет отправлять их через интерфейс tun0 к клиенту 10.8.0.2.

  2. Однако, судя по описанию, пакеты не видны на клиентской стороне, несмотря на их отправку из интерфейса tun0 на стороне сервера.

  3. Вы используете утилиту tcpdump для захвата пакетов, и на стороне клиента не видите ICMP-запросы к машине с адресом 192.168.1.100, которые должны были бы быть видны, если бы они прошли через VPN-туннель.

Применение

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

  1. Проблемы с маршрутизацией и IP-адресацией: В вашем сценарии маршруты выглядят правильно, однако убедитесь, что конфигурационные файлы OpenVPN позволяют клиенту объявлять маршрут для сети 192.168.1.0/24. В клиентском конфигурационном файле OpenVPN должна быть опция push "route 192.168.1.0 255.255.255.0".

  2. Проверка клиентов и сервера на сетевом уровне: Убедитесь, что пакеты от сервера через интерфейс tun0 действительно доходят до клиента. Для этого выполните отладочные команды tcpdump на интерфейсе ens19 клиента, чтобы удостовериться, что пакеты по ICMP идут в 192.168.1.0/24 по каналу.

  3. Проверка сетевых привилегий: Поскольку у вас указано, что файервол отсутствует, важно также проверить, что на всей вашей сетевой инфраструктуре отсутствуют ACL или другие ограничения, которые могли бы блокировать ICMP-запросы или маршрутизацию между subnet’ами.

  4. Альтернативные проверки маршрутизации: Попробуйте вместо ICMP использовать другую утилиту или сетевой протокол для тестирования связности, например, traceroute, чтобы проследить путь пакетов и выявить, где именно они застревают.

  5. Конфигурация OpenVPN: Пересмотрите конфигурационные файлы OpenVPN на сервере и клиенте. Проверьте директивы: особенно server, client, client-to-client, которые могут повлиять на маршрутизацию.

Заключение

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

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

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