OpenVPN клиент-клиент

17

При использовании сервера OpenVPN TUN (уровень 3) с client-to-clientотключенным, мои клиенты могут по-прежнему общаться друг с другом.

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

Раскомментируйте директиву «клиент-клиент», если вы хотите, чтобы клиенты могли соединяться друг с другом через VPN. По умолчанию клиенты будут иметь доступ только к серверу.

Почему клиенты могут продолжать общаться друг с другом, если эта опция отключена?

Вот мой сервер conf:

port 443
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
topology subnet
server 10.10.201.0 255.255.255.128
ifconfig-pool-persist ipp.txt
crl-verify /etc/openvpn/keys/crl.pem
push "route [omitted]"
push "dhcp-option DNS [omitted]"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
cipher AES-256-CBC
tls-auth /etc/openvpn/keys/pfs.key 0
verb 4
лоби
источник

Ответы:

54

Если client-to-clientбудет включен , сервер VPN передает клиент-клиент пакеты внутри , не отправляя их на уровень IP хоста (т.е. к ядру). Сетевой стек хоста вообще не видит эти пакеты.

           .-------------------.
           | IP Layer          |
           '-------------------'


           .-------------------.
           | TUN device (tun0) |
           '-------------------'


           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  2   
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

Если client-to-clientэто отключено , пакеты от клиента к другому клиенту пройти через IP хост слой (Iptables, таблицу маршрутизации и т.д.) машины хостинга сервера VPN: если IP переадресация включена , хост может пересылать пакет (используя его таблицу маршрутизации) снова к интерфейсу TUN, и демон VPN перенаправит пакет нужному клиенту внутри туннеля.

           .-------------------.
           | IP Layer          |  (4) routing, firewall, NAT, etc.
           '-------------------'      (iptables, nftables, conntrack, tc, etc.)
              ^          |
          3   |          |  5
              |          v
           .-------------------.
           | TUN device (tun0) |
           '-------------------'
             ^           |
          2  |           |  6  
             |           v
           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  7  
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

В этом случае ( client-to-clientотключено), вы можете заблокировать клиент-клиентские пакеты, используя iptables:

 iptables -A FORWARD -i tun0 -o tun0 -j DROP

где tun0твой VPN интерфейс

ysdx
источник
Помечено это как ответ; краткий, но очень информативный и фактически предоставляет в ответе правило брандмауэра iptables.
Лоби
1
У меня есть вопрос о диаграмме, вы рисуете ее символ за символом и пробел за пространством? или вы используете какое-либо приложение, чтобы помочь вам получить это просто и быстро?
Мохаммед Нурельдин
3
@MohammedNoureldin, я сделал оригинальную диаграмму с помощью asciio ( search.cpan.org/dist/App-Asciio ), который представляет собой редактор WYSWYG типа «укажи и щелкни» для диаграмм Asciiart.
ysdx
Спасибо, вам удалось запустить его на Windows? Похоже, это приложение из средних веков, и я не смог запустить его на Windows, я пытался установить его с пакетом camelbox, но всегда получаю ошибку 404.
Мухаммед Нурельдин
2
@MohammedNoureldin, я не пользуюсь Windows. Я использую Debian, и он напрямую устанавливается из пакетов.
ysdx
5

Следующий абзац справочной страницы для openvpnответов на этот вопрос, хотя это не обязательно понятно при первом чтении:

Поскольку режим сервера OpenVPN обрабатывает несколько клиентов через единый интерфейс tun или tap, он фактически является маршрутизатором. --client-to-client Флаг указывает OpenVPN внутренне маршрута клиент-клиент трафика , а не толкая все клиент исходящего трафика на интерфейсе TUN / TAP.

Когда эта опция используется, каждый клиент будет «видеть» других клиентов, которые в данный момент подключены. В противном случае каждый клиент увидит только сервер. Не используйте эту опцию, если вы хотите туннелировать трафик брандмауэра с использованием пользовательских правил для каждого клиента.

client-to-clientВариант короткого замыкания обычных таблиц маршрутизации на сервере. Удаление этого не мешает клиентам использовать таблицы маршрутизации сервера. Если эти таблицы маршрутизации - и конфигурация брандмауэра сервера - позволяют клиентам видеть друг друга, они смогут это сделать.

roaima
источник
5

Вам нужно сделать больше, чем просто комментировать директиву, как здесь сказано :

Раскомментируйте эту директиву, чтобы разные клиенты могли «видеть» друг друга. По умолчанию клиенты видят только сервер. Чтобы клиенты могли видеть только сервер, вам также необходимо соответствующим образом настроить брандмауэр на интерфейсе TUN / TAP сервера.

Поэтому вы можете настроить отдельную политику IP-адресов для каждого клиента. См. Раздел Настройка клиентских правил и политик доступа здесь: https://openvpn.net/index.php/open-source/documentation/howto.html . и здесь: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .

Diamant
источник
Тогда это означает, что я подумал: единственный способ добиться этого - поместить каждого клиента в разные подсети. Это в основном отвечает на вопрос, плюс вы дали некоторую документацию о том, как это сделать. Я отмечу это как ответ. Благодарю.
Лоби