Encaminhe clientes OpenVPN para outro servidor OpenVPN diferente

0

Eu tenho este cenário ...

  1. Servidor (principal) com várias conexões OpenVPN (portanto, o servidor é conectado como um cliente para vários servidores OpenVPN .. vamos dizer servidores secundários)
  2. Esse servidor também executa o servidor OpenVPN

Agora, o que eu preciso é que o Cliente se conecte ao servidor OpenVPN (Principal) com nome de usuário / senha. dependendo do nome de usuário, o servidor roteará todo o tráfego daquele cliente para o servidor OpenVPN especificado (secundário)

Existe uma maneira de fazer isso usando iptables ?

Obrigado

    
por skypik 05.09.2014 / 20:21

1 resposta

1

Eu suponho que você quer:

one specific secondary VPN server to become the default gateway for a given client.

Se isso ocorrer, isso pode ser feito usando o envio de rota. Você já sabe que pode informar ao cliente o endereço do seu "novo" gateway após a conexão do OpenVPN ter subido.

Bem, você pode fazer isso dinamicamente .

Do manual :

--client-connect script Run script on client connection. The script is passed the common name and IP address of the just-authenticated client as environmental variables (see environmental variable section below). The script is also passed the pathname of a not-yet-created temporary file as $1 (i.e. the first command line argument), to be used by the script to pass dynamically generated config file directives back to OpenVPN.

If the script wants to generate a dynamic config file to be applied on the server when the client connects, it should write it to the file named by $1.

See the --client-config-dir option below for options which can be legally used in a dynamically generated config file.

Note that the return value of script is significant. If script returns a non-zero error status, it will cause the client to be disconnected.

Portanto, tudo o que você precisa fazer é manter uma lista de entradas (cliente-nome-comum, gateway padrão) e preparar um script client-connect que verificará o nome do cliente e preparará o push "route-gateway a.b.c.d" apropriado a ser enviado para o servidor OpenVPN, e de lá para o cliente.

Você também pode colocar ip comandos no script, mas talvez não precise deles.

Por exemplo:

#!/bin/sh

# Connect script for OpenVPN. This is /usr/local/bin/openvpn-connect-script.sh
# and OpenVPN server requires the extra option
#
#     --connect-client /usr/local/bin/openvpn-connect-script.sh
#

$script="$1"

# We could even fetch this from, say, a MySQL database.
# GATEWAY=$( echo "SELECT gateway FROM users_config WHERE user='$username';" \
#     | mysql -N openvpn )

case "$username" in
    "lserni")
        GATEWAY=192.168.168.192
        ;;
    "apiraino")
        GATEWAY=192.168.170.133
        ;;
    "*")
        GATEWAY=192.168.172.1
        ;;
esac

cat <<-CONFIG > $script

# Extra options, user-dependant.

gateway $GATEWAY

CONFIG

exit 0
    
por 05.09.2014 / 23:51