O mesmo processo openvpn não pode escutar soquetes UDP e TCP ao mesmo tempo.
Você tem duas boas opções:
-
use duas interfaces de toque para o openvpn. Ter dois processos do servidor openvpn, um para cada interface de toque; deve-se ouvir em UDP, o outro em TCP. Transforme essas duas interfaces de toque no servidor.
-
use duas interfaces tun. Isso não pode ser superado, portanto, se você quiser compartilhar o espaço IP entre os clientes TCP e UDP, será necessário usar um script
learn-address
como esse em (no entanto, esse script específico é vulnerável a um ataque de link simbólico / tmp, portanto, remova o log para / tmp se você usá-lo).
A terceira opção é apenas executar duas instâncias de openvpn e designar um espaço IP de cliente separado para ambos. Isso evita a ponte e a necessidade de um script de endereço de aprendizado.
EDIT: desde que eu precisava de um script de aprendizado, escrevi um. Eu coloco isso no domínio 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 loga em stderr, que deve terminar no log openvpn.