Le même processus openvpn ne peut pas écouter simultanément sur les sockets UDP et TCP.
Vous avez deux bonnes options:
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.
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-address
script 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.
tun
les 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 destap
interfaces.