OpenVPN: как включить связь между клиентами без активации параметра client-to-client

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

У меня проблема с коммуникацией между двумя клиентами на моем сервере OpenVPN, который был настроен с помощью этого руководства.

На сервере OpenVPN в tun0 (172.16.0.0/24) есть три клиента:

  • client1: 172.16.0.11
  • client2: 172.16.0.10
  • client3: 172.16.0.12

Директива “client-to-client” отключена, чтобы предотвратить общение клиентов друг с другом.

Моя цель – создать “группы”, чтобы позволить client1 и client2 общаться, но без возможности общения с ними client3.

Добавление правил iptables не приводит к разрешению коммуникации:

Цепочка FORWARD (политика DROP 7 пакетов, 364 байта)
pkts bytes target prot opt ​​in out source destination
0 0 ACCEPT 0 -- tun0 tun0 172.16.0.10 172.16.0.11
0 0 ACCEPT 0 -- tun0 tun0 172.16.0.11 172.16.0.10

Однако включение “client-to-client” работает.

Я не знаю, связано ли это с тем, что мои правила iptables плохо настроены, или с какой-то настройкой в server.conf или конфигурации клиента.

Соответствующее правило в цепочке FORWARD таблицы filter не запускает переадресацию, оно только разрешает её.

Обычно, когда client-to-client включен, маршрутизацию клиентов фактически выполняет процесс сервера openvpn. Маршрутизация операционной системой не задействована. Это связано с тем, что с точки зрения ОС все пакеты в VPN воспринимаются как приходящие из интерфейса tun* или tap*.

Возможно, имеется решение вашей проблемы, которое использует правила цепочки PREROUTING в таблицах nat или raw, и/или используя хостовые маршруты, но без возможности экспериментов с ними я не уверен, что это за решение.

Вместо этого, позвольте мне предложить рассмотреть влан-тегирование. Ознакомьтесь с опцией сервера --vlan-tagging, и опцией клиента --vlan-pvid. Клиенты с одинаковым PVID смогут видеть друг друга, но клиенты с разным или отсутствующим/по умолчанию PVID не смогут. Учтите, что это требует использования устройства tap вместо tun, и может быть небезопасно (если вы не можете обеспечить выполнение каждого клиента значения PVID).

.

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

Для разрешения коммуникации между клиентами OpenVPN без использования директивы client-to-client, необходимо учитывать несколько важных аспектов настройки IP-маршрутизации и правил брандмауэра. Данная задача предполагает наличие сети с адресами в диапазоне 172.16.0.0/24 и существующий запрет на прямую коммуникацию между всеми клиентами. Основная цель — обеспечить взаимодействие только между client1 и client2 (IP-адреса 172.16.0.11 и 172.16.0.10) с возможностью изоляции client3 (172.16.0.12). Разберем, как этого добиться, применяя подходы, не связанные с непосредственным включением client-to-client.

Теория

По умолчанию, директива client-to-client позволяет всем клиентам OpenVPN взаимодействовать между собой через сервер, маршрутизируя трафик между клиентами. Отключение этой опции требует альтернативных решений, таких как настройка правил фильтрации в iptables, использование устройств типа tun и tap, а также применение технологии VLAN.

Маршрутизация и IPtables

  • Маршрутизация и Forwarding: Сначала необходимо включить возможность пересылки пакетов на уровне ядра операционной системы. Это выполняется установкой параметра net.ipv4.ip_forward=1. Без этого изменения пакеты не будут пересылаться системой, независимо от правил iptables.

  • Настройка IPTables: Правила iptables должны не только разрешать связи, но и правильно учитывать цепочки и таблицы, задействованные в маршрутизации. Правила в цепочке FORWARD только разрешают пересылку, но не инициируют её. Это значит, что для работы iptables вам нужно дополнительно указать корректные правила маршрутизации. Пример:

    sysctl -w net.ipv4.ip_forward=1
    
    iptables -A FORWARD -i tun0 -s 172.16.0.10 -d 172.16.0.11 -j ACCEPT
    iptables -A FORWARD -i tun0 -s 172.16.0.11 -d 172.16.0.10 -j ACCEPT
    iptables -A FORWARD -i tun0 -s 172.16.0.0/24 -d 172.16.0.0/24 -j DROP
  • RAW и NAT: Иногда для более сложной настройки маршрутизации можно задействовать таблицы nat и raw, например, цепочка PREROUTING может использоваться для изменений в ходе обработки пакетов перед их передачей в пользовательское пространство.

VLAN Тегирование

  • Использование VLAN: Возможность использования VLAN-тегирования в OpenVPN позволяет группировать клиенты, предоставляя каждому клиенту идентификатор VLAN (PVID), который группирует клиентов с одинаковыми PVID в одну логическую сеть. Это требует перехода с использования устройства типа tun на tap.

    Конфигурация на стороне сервера может выглядеть так:

    server-bridge
    --vlan-tagging

    Клиенты настраиваются с указанием данного конфигурационного параметра:

    --vlan-pvid 10 # для client1 и client2

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

Применение

На практике, реализация антитрадиционных решений (без директивы client-to-client) может быть технически сложной и сопряжена с необходимостью настройки маршрутизации на уровне системы, а также более продвинутых правил iptables. В данном случае требуется:

  1. Включить пересылку IP-пакетов на сервере, что является стандартной практикой для обеспечения корректной работы VPN-сетей.
  2. Создать индивидуальные правила в iptables для контроля над тем, какие клиенты имеют доступ друг к другу.
  3. Рассмотреть возможность использования VLAN для изоляции трафика между различными группами клиентов.
  4. Обеспечить, чтобы каждая конфигурация проходила тщательное тестирование, чтобы избежать нарушений в безопасности сети.

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

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

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