Como fazer o OpenVPN escutar as portas TCP e UDP

9

Eu pesquisei e a única coisa que descobri é que "sim, o OpenVPN suporta conexões via TCP" , mas eu não encontrei nenhuma maneira de coagir o servidor openvpn para ouvir a mesma porta para os dois protocolos ao mesmo tempo. Eu encontrei alguns guias muito antigos sobre criando interfaces de toque , ou recomendando ter outra instância do servidor com a mesma configuração correndo ao mesmo tempo. O primeiro parece muito complicado para algo simples, e o posterior parece obsoleto.

    
por Braiam 15.03.2016 / 17:00

2 respostas

8

O mesmo processo openvpn não pode escutar soquetes UDP e TCP ao mesmo tempo.

Você tem duas boas opções:

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

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

    
por 01.07.2016 / 18:05
4

If you want your OpenVPN server to listen on a TCP port instead of a UDP port, use proto tcp instead of proto udp (If you want OpenVPN to listen on both a UDP and TCP port, you must run two separate OpenVPN instances).

Você quer dizer que esta página está obsoleta?

Acho que você pode executar dois servidores OpenVPN (um para TCP, um para UDP), conectar cada um deles com um TUN e, em seguida, conectar os TUNs.

    
por 15.03.2016 / 20:07

Tags