Cómo hacer que OpenVPN escuche los puertos TCP y UDP

13

He buscado y lo único que he encontrado es que "sí, OpenVPN admite conexiones a través de TCP" , pero no he encontrado ninguna forma de obligar al servidor openvpn a escuchar el mismo puerto para ambos protocolos al mismo tiempo . He encontrado algunas guías muy antiguas sobre la creación de interfaces táctiles , o recomendar tener otra instancia del servidor con la misma configuración ejecutándose al mismo tiempo. El primero parece demasiado complicado para algo simple, y el segundo parece obsoleto.

Braiam
fuente

Respuestas:

11

El mismo proceso openvpn no puede escuchar en sockets UDP y TCP al mismo tiempo.

Tienes dos buenas opciones:

  1. 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.

  2. 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-addressscript 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.

András Korn
fuente
4

Si desea que su servidor OpenVPN escuche en un puerto TCP en lugar de un puerto UDP, use en proto tcplugar de proto udp(Si desea que OpenVPN escuche en un puerto UDP y TCP, debe ejecutar dos instancias OpenVPN separadas).

¿Quieres decir que esta página está obsoleta?

Creo que puede ejecutar dos servidores OpenVPN (uno para TCP, uno para UDP), unir cada uno de ellos con un TUN y luego conectar los TUN.

nodakai
fuente
1
tunLas interfaces no tienen una capa MAC y, por lo tanto, no pueden ser miembros de un puente. Si quiere unir, necesita usar tapinterfaces.
András Korn