So lassen Sie OpenVPN sowohl TCP- als auch UDP-Ports überwachen


13

Ich habe mich umgesehen und das einzige, was ich gefunden habe, ist, dass "Ja, OpenVPN unterstützt Verbindungen über TCP" , aber ich habe keine Möglichkeit gefunden, den openvpn-Server dazu zu zwingen, denselben Port für beide Protokolle gleichzeitig abzuhören . Ich habe einige sehr alte Anleitungen zum Erstellen von Tap-Schnittstellen gefunden oder empfohlen, eine andere Instanz des Servers mit derselben Konfiguration zur gleichen Zeit auszuführen. Ersteres sieht für etwas Einfaches zu kompliziert aus, und letzteres scheint veraltet zu sein.

Antworten:


11

Der gleiche openvpn-Prozess kann nicht gleichzeitig UDP- und TCP-Sockets abhören.

Sie haben zwei gute Möglichkeiten:

  1. Verwenden Sie zwei Tap-Schnittstellen für openvpn. Haben Sie zwei openvpn-Serverprozesse, einen für jede Tap-Schnittstelle; Einer sollte UDP abhören, der andere TCP. Überbrücken Sie diese beiden Tap-Schnittstellen auf dem Server.

  2. Verwenden Sie zwei Tun-Schnittstellen. Diese können nicht überbrückt werden. Wenn Sie also den IP-Bereich zwischen TCP- und UDP-Clients freigeben möchten, müssen Sie ein learn-addressSkript wie das unter http://thomas.governur.name/2014/02/openvpn- verwenden. listen-on-tcp-and-udp-with-tun / (dieses spezielle Skript ist jedoch anfällig für einen / tmp-Symlink-Angriff. Entfernen Sie daher die Protokollierung in / tmp, wenn Sie es verwenden).

Die dritte Option besteht darin, nur zwei openvpn-Instanzen auszuführen und beiden einen separaten Client-IP-Bereich zuzuweisen (z. B. jeweils eine / 25 aus demselben / 24-Subnetz). Dies vermeidet Überbrückungen und die Notwendigkeit eines Skripts für Lernadressen.

EDIT: Da ich selbst ein solches Skript für Lernadressen benötigte, habe ich eines geschrieben. Ich stelle es in den öffentlichen Bereich.

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

Dieses Skript protokolliert bei stderr, das im openvpn-Protokoll landen soll.


4

Wenn Ihr OpenVPN-Server einen TCP-Port anstelle eines UDP-Ports überwachen soll, verwenden Sie proto tcpstattdessen proto udp(Wenn OpenVPN sowohl einen UDP- als auch einen TCP-Port überwachen soll, müssen Sie zwei separate OpenVPN-Instanzen ausführen).

Meinst du, diese Seite ist veraltet?

Ich denke, Sie können zwei OpenVPN-Server (einen für TCP, einen für UDP) ausführen, die jeweils einen TUN überbrücken und dann die TUNs verbinden.


1
tunSchnittstellen haben keine MAC-Schicht und können daher keine Mitglieder einer Bridge sein. Wenn Sie eine Überbrückung wünschen, müssen Sie tapSchnittstellen verwenden.
András Korn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.