Come fare OpenVPN per ascoltare entrambe le porte TCP e UDP


13

Ho cercato in giro e l'unica cosa che ho trovato è che "sì, OpenVPN supporta connessioni su TCP" , ma non ho trovato alcun modo per forzare il server openvpn ad ascoltare la stessa porta per entrambi i protocolli allo stesso tempo . Ho trovato alcune guide molto vecchie sulla creazione di interfacce di tocco o sulla raccomandazione di avere un'altra istanza del server con la stessa configurazione in esecuzione contemporaneamente. Il primo sembra troppo complicato per qualcosa di semplice e il secondo sembra obsoleto.

Risposte:


11

Lo stesso processo openvpn non può ascoltare contemporaneamente su socket UDP e TCP.

Hai due buone opzioni:

  1. usa due interfacce di tocco per openvpn. Avere due processi server openvpn, uno per ogni interfaccia di tocco; uno dovrebbe ascoltare su UDP, l'altro su TCP. Collega queste due interfacce di tocco sul server.

  2. usa due interfacce tun. Non è possibile collegarli, quindi se si desidera condividere lo spazio IP tra i client TCP e UDP, è necessario utilizzare uno learn-addressscript come quello su http://thomas.gouverneur.name/2014/02//envpn- hear-on-tcp-and-udp-with-tun / (tuttavia, questo script specifico è vulnerabile a un attacco symlink / tmp, quindi rimuovere la registrazione su / tmp se lo si utilizza).

La terza opzione è semplicemente eseguire due istanze openvpn e assegnare uno spazio IP client separato a entrambi (ad esempio, uno / 25 dalla stessa / 24 sottorete ciascuno). Questo evita il bridging e la necessità di uno script di apprendimento.

EDIT: dato che avevo bisogno anch'io di un simile script di apprendimento, ne ho scritto uno. Lo metto di dominio pubblico.

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

Questo script registra su stderr, che dovrebbe finire nel registro di openvpn.


4

Se vuoi che il tuo server OpenVPN ascolti su una porta TCP anziché su una porta UDP, usa proto tcpinvece di proto udp(Se vuoi che OpenVPN ascolti sia su una porta UDP che TCP, devi eseguire due istanze OpenVPN separate).

Vuoi dire che questa pagina è obsoleta?

Penso che tu possa eseguire due server OpenVPN (uno per TCP, uno per UDP,) collegandoli ciascuno con un TUN, e quindi collegando i TUN.


1
tunle interfacce non hanno un livello MAC e quindi non possono essere membri di un bridge. Se si desidera creare un ponte, è necessario utilizzare le tapinterfacce.
András Korn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.