Comment faire OpenVPN pour écouter les ports TCP et UDP

13

J'ai cherché et la seule chose que j'ai trouvée est que "oui, OpenVPN prend en charge les connexions via TCP" , mais je n'ai trouvé aucun moyen de contraindre le serveur openvpn à écouter le même port pour les deux protocoles en même temps . J'ai trouvé de très vieux guides sur la création d'interfaces tap , ou recommandant d'avoir une autre instance du serveur avec la même configuration en même temps. Le premier semble trop compliqué pour quelque chose de simple, et le dernier semble obsolète.

Braiam
la source

Réponses:

11

Le même processus openvpn ne peut pas écouter simultanément sur les sockets UDP et TCP.

Vous avez deux bonnes options:

  1. utiliser deux interfaces tap pour openvpn. Avoir deux processus serveur openvpn, un pour chaque interface tactile; l'un devrait écouter sur UDP, l'autre sur TCP. Reliez ces deux interfaces tactiles sur le serveur.

  2. utiliser deux interfaces tun. Ceux-ci ne peuvent pas être pontés, donc si vous voulez partager l'espace IP entre les clients TCP et UDP, vous devrez utiliser un learn-addressscript comme celui de http://thomas.gouverneur.name/2014/02/openvpn- listen-on-tcp-and-udp-with-tun / (cependant, ce script spécifique est vulnérable à une attaque de lien symbolique / tmp, donc supprimez la journalisation dans / tmp si vous l'utilisez).

La troisième option consiste à simplement exécuter deux instances openvpn et à attribuer un espace IP client distinct aux deux (par exemple, un / 25 du même sous-réseau / 24 chacun). Cela évite le pontage et la nécessité d'un script d'apprentissage d'adresse.

EDIT: puisque j'avais moi-même besoin d'un tel script d'adresse d'apprentissage, j'en ai écrit un. Je le place dans le domaine public.

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

Ce script se connecte à stderr, qui devrait se retrouver dans le journal openvpn.

András Korn
la source
4

Si vous souhaitez que votre serveur OpenVPN écoute sur un port TCP au lieu d'un port UDP, utilisez à la proto tcpplace de proto udp(Si vous voulez qu'OpenVPN écoute à la fois sur un port UDP et TCP, vous devez exécuter deux instances OpenVPN distinctes).

Voulez-vous dire que cette page est obsolète?

Je pense que vous pouvez exécuter deux serveurs OpenVPN (un pour TCP, un pour UDP), pont chacun d'eux avec un TUN, puis connectez les TUN.

nodakai
la source
1
tunles interfaces n'ont pas de couche MAC et ne peuvent donc pas être membres d'un pont. Si vous voulez un pontage, vous devez utiliser des tapinterfaces.
András Korn