Der gleiche openvpn-Prozess kann nicht gleichzeitig UDP- und TCP-Sockets abhören.
Sie haben zwei gute Möglichkeiten:
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.
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-address
Skript 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.
tun
Schnittstellen haben keine MAC-Schicht und können daher keine Mitglieder einer Bridge sein. Wenn Sie eine Überbrückung wünschen, müssen Sietap
Schnittstellen verwenden.