Як змусити OpenVPN слухати як порти TCP, так і UDP


13

Я шукав навколо, і єдине, що я знайшов, це те, що "так, OpenVPN підтримує з'єднання через TCP" , але я не знайшов жодного способу примусити сервер openvpn слухати один і той же порт для обох протоколів одночасно. . Я знайшов дуже старі посібники щодо створення інтерфейсів для дотику або рекомендував одночасно працювати інший екземпляр сервера з тією ж конфігурацією. Перший виглядає занадто складним для чогось простого, а пізніше здається застарілим.

Відповіді:


11

Один і той же процес openvpn не може одночасно слухати UDP і TCP-сокети.

У вас є два хороших варіанти:

  1. використовувати два інтерфейсу для tapv для openvpn. Мати два серверні процеси openvpn, по одному для кожного інтерфейсу дотику; один повинен слухати на UDP, інший на TCP. З'єднайте ці два інтерфейси для натискання на сервері.

  2. використовувати два інтерфейси tun. Вони не можуть бути з'єднані, тому якщо ви хочете поділити IP-простір між клієнтами TCP та UDP, вам потрібно буде використовувати такий learn-addressсценарій, як той, на веб-сторінці http://thomas.gouverneur.name/2014/02/openvpn- liste-on-tcp-and-udp-with-tun / (однак, цей специфічний скрипт вразливий до атаки / tmp symlink, тому видаліть реєстрацію до / tmp, якщо ви її використовуєте).

Третій варіант - просто запустити два екземпляри openvpn і призначити окремий ІР-простір клієнта обом (наприклад, одному / 25 з тієї ж / 24 підмережі кожен). Це дозволяє уникнути встановлення мостів та необхідності створення сценарію для вивчення адреси.

EDIT: оскільки мені був потрібен такий сценарій для вивчення адреси, я написав його. Я розміщую його у відкритому доступі.

#!/bin/sh
#
# This script allows an openvpn server with several openvpn instances that
# use tun interfaces to share client IP space by adjusting the routing table
# to create entries towards specific clients as needed

action="$1"
addr="$2"
cn="$3" # not used, but it's there; you could e.g. log it

case "$action" in
        add)
                echo "sudo ip ro add $addr/32 dev $dev" >&2
                exec sudo ip ro add $addr/32 dev $dev
                ;;
        delete)
                echo "sudo ip ro del $addr/32 dev $dev" >&2
                sudo ip ro del $addr/32
                exit 0 # ignore errors
                ;;
        update)
                echo "sudo ip ro change $addr/32 dev $dev" >&2
                exec sudo ip ro change $addr/32 dev $dev
                ;;
esac

Цей скрипт записується до stderr, який повинен опинитися в журналі openvpn.


4

Якщо ви хочете, щоб ваш сервер OpenVPN слухав на порту TCP замість UDP-порту, використовуйте proto tcpзамість proto udp(Якщо ви хочете, щоб OpenVPN прослуховував як порт UDP, так і TCP, ви повинні запустити два окремих екземпляри OpenVPN).

Ви маєте на увазі, що ця сторінка застаріла?

Я думаю, ви можете запустити два сервери OpenVPN (один для TCP, один для UDP,), щоб перемикати кожного з них TUN, а потім підключити TUN.


1
tunінтерфейси не мають рівня MAC і, отже, не можуть бути членами мосту. Якщо ви хочете з'єднати мости, вам потрібно використовувати tapінтерфейси.
Андрас Корн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.