OpenVPN клієнт-клієнт


18

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

Конфігурація «клієнт-клієнт» повинна запобігати цьому відповідно до документації:

Відмовтесь від директиви «клієнт-клієнт», якщо ви хочете, щоб клієнти, що з'єднувались, змогли дістатися один до одного через VPN. За замовчуванням клієнти зможуть дістатися лише до сервера.

Чому клієнти можуть продовжувати спілкуватися один з одним, коли ця опція відключена?

Ось мій серверний конф:

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

Відповіді:


56

Якщо 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.


Позначив це як відповідь; лаконічний, але дуже інформативний і насправді забезпечує правило брандмауера iptables у відповіді.
лобі

1
У мене є питання щодо діаграми, ви малюєте це за допомогою char та пробіл у просторі? або ви використовуєте будь-який додаток, щоб допомогти вам отримати це просто та швидко?
Мохаммед Нурелдін

3
@MohammedNoureldin, я створив оригінальну діаграму з asciio ( search.cpan.org/dist/App-Asciio ), який є WYSWYG редактором точок та клацання для діаграм asciiart.
ysdx

Дякую, вам вдалося запустити його на Windows? здається, це додаток середніх віків, і я не міг запустити його на Windows, я намагався встановити його за допомогою пакету camelbox, але я завжди отримую помилку 404.
Мохаммед Нурелдін

2
@MohammedNoureldin, я не використовую Windows. Я використовую Debian, і це легко встановити з пакунків.
ysdx

7

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

Відміняйте цю директиву, щоб дозволити різним клієнтам "бачити" один одного. За замовчуванням клієнти бачитимуть лише сервер. Щоб змусити клієнтів бачити тільки сервер, вам також знадобиться відповідний брандмауер 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 .


Тоді це означає, що я думав: єдиний спосіб досягти цього - розмістити кожного клієнта в різних підмережах. Це здебільшого відповідає на питання, плюс ви надали деяку документацію, як це зробити. Я відзначу це як відповідь. Спасибі.
лобі

6

Наступний параграф довідкової сторінки openvpnвідповідає на це запитання, хоча це не обов'язково зрозуміло при першому читанні:

Оскільки серверний режим OpenVPN обробляє декілька клієнтів через один інтерфейс налаштування або натискання, це ефективно маршрутизатор. --client-to-client Прапор вказує OpenVPN внутрішньо маршруту клієнт-клієнт трафіку , а не штовхаючи все клієнт вихідного трафіку на інтерфейсі TUN / TAP.

Коли використовується ця опція, кожен клієнт буде "бачити" інших клієнтів, які зараз підключені. Інакше кожен клієнт побачить лише сервер. Не використовуйте цю опцію, якщо ви хочете трафікувати трафік брандмауера, використовуючи спеціальні правила для кожного клієнта.

client-to-clientВаріант короткого замикання звичайних таблиць маршрутизації на сервері. Видалення його не заважає клієнтам використовувати таблиці маршрутизації сервера. Якщо ці таблиці маршрутизації - і конфігурація брандмауера сервера - дозволяють клієнтам бачити один одного, вони зможуть це зробити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.