El mismo proceso openvpn no puede escuchar en sockets UDP y TCP al mismo tiempo.
Tienes dos buenas opciones:
use dos interfaces de tap para openvpn. Tener dos procesos de servidor openvpn, uno para cada interfaz de toque; uno debería escuchar en UDP, el otro en TCP. Puentee estas dos interfaces táctiles en el servidor.
usa dos interfaces tun. No se pueden unir, por lo que si desea compartir el espacio IP entre los clientes TCP y UDP, deberá usar un learn-address
script como el que se encuentra en http://thomas.gouverneur.name/2014/02/openvpn- listen-on-tcp-and-udp-with-tun / (sin embargo, este script específico es vulnerable a un ataque de enlace simbólico / tmp, por lo tanto, elimine el registro en / tmp si lo usa).
La tercera opción es simplemente ejecutar dos instancias de openvpn y asignar un espacio de IP de cliente separado a ambas (por ejemplo, una / 25 de la misma subred / 24 cada una). Esto evita el puente y la necesidad de un script de dirección de aprendizaje.
EDITAR: como yo mismo necesitaba un script de dirección de aprendizaje, escribí uno. Lo coloco en el dominio público.
#!/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
Este script se registra en stderr, que debería terminar en el registro de openvpn.
tun
Las interfaces no tienen una capa MAC y, por lo tanto, no pueden ser miembros de un puente. Si quiere unir, necesita usartap
interfaces.