Как заставить OpenVPN прослушивать как TCP, так и UDP порты

13

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

Braiam
источник

Ответы:

11

Один и тот же процесс openvpn не может прослушивать сокеты UDP и TCP одновременно.

У вас есть два хороших варианта:

  1. использовать два интерфейса крана для openvpn. Иметь два серверных процесса openvpn, по одному для каждого интерфейса крана; один должен слушать по UDP, другой по TCP. Соедините эти два интерфейса на сервере.

  2. использовать два интерфейса Tun. Они не могут быть соединены мостом, поэтому, если вы хотите разделить пространство IP между клиентами TCP и UDP, вам нужно использовать learn-addressскрипт, подобный тому, что на http://thomas.gouverneur.name/2014/02/openvpn- listen-on-tcp-and-udp-with-tun / (однако этот конкретный сценарий уязвим для атаки символической ссылки / tmp, поэтому удалите запись в / tmp, если вы его используете).

Третий вариант - просто запустить два экземпляра openvpn и назначить каждому клиенту отдельное IP-пространство (например, по одному / 25 из одной подсети / 24 каждого подсети). Это позволяет избежать мостов и необходимости в скрипте с адресом обучения.

РЕДАКТИРОВАТЬ: так как мне нужен такой сценарий учиться адрес, я написал один. Я размещаю это в открытом доступе.

#!/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.

nodakai
источник
1
tunинтерфейсы не имеют уровня MAC и, следовательно, не могут быть членами моста. Если вы хотите использовать мосты, вам нужно использовать tapинтерфейсы.
Андраш Корн