Como encadear dois servidores OpenVPN?

2

Estou querendo encapsular duas VPNs usando o OpenVPN. Assim, o cliente se conectaria à primeira VPN e seria redirecionado para a segunda VPN. (Estes são todos VPSs, eu não tenho acesso físico a ele, pois será importante um pouco mais tarde.)

Então, aqui está a foto:

Client              VPN1                    VPN2
10.8.0.2[tun0]------10.8.0.1[tun0]
[1.1.1.1][eth0]     10.8.100.2[tun1]----------10.8.100.1[tun0]
                    45.55.45.55[eth0]         186.186.186.186[eth0]------internet

A configuração do servidor é uma configuração bastante padrão:

port 1194
auth-user-pass-verify /etc/openvpn/script/login.py via-env
username-as-common-name
script-security 3
proto udp
dev tun
duplicate-cn
sndbuf 0
rcvbuf 0
vca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0 (or 10.8.100.0 in the VPN2)
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem

A configuração do cliente também é bastante padronizada:

client
dev tun
auth-user-pass login.txt
proto udp
sndbuf 0
rcvbuf 0
remote 45.55.45.55 1194 (or 186.186.186.186 for VPN2)
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-128-CBC
comp-lzo
key-direction 1
verb 3

Assim, para alcançar o encadeamento VPN, estou me conectando diretamente com a VPN1.

openvpn --config toOpenVPN1.ovpn

Se eu me conectar assim de VPN1 a VPN2, eu fico bloqueado do servidor VPN1, pois todo o tráfego é redirecionado para VPN2 e o IP público da VPN1 é definido como VPN2. Então, eu rejeito a rota empurrada vindo da segunda VPN com a opção --route-nopull.

openvpn --config toOpenVPN2.ovpn --route-nopull

Então, isso se conecta bem. Eu tenho tráfego proveniente de localhost para VPN1 e meu IP público é o VPN1s. Eu também atribuí IP's às interfaces do tunX. No entanto, ainda não há tráfego proveniente de localhost (client) para VPN2. Eu tenho que criar as rotas para fazer isso funcionar. E isso é que estou falhando.

Como o cliente não precisa se preocupar se o tráfego está sendo redirecionado para outro local, estou assumindo que não há regras de configuração ou iptables necessárias para serem feitas em seu lado (cliente). O mesmo acontece com o servidor VPN2, que não precisa saber se é proveniente da VPN1 ou de outros pares. Então, tudo que eu tenho que configurar é o VPN1.

Primeiro de tudo, vou definir as regras do iptables, como segue. Isso apenas permitirá que o tráfego passe.

iptables -A INPUT -i tun1 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun1 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun1 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p udp -m multiport --dports 6880:7000 -j DROP
iptables -A FORWARD -i tun1 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -d 10.8.100.0/24 -i tun0 -o tun1 -m conntrack --ctstate NEW -j ACCEPT 
iptables -A FORWARD -s 10.8.100.0/24 -d 10.8.0.0/24 -i tun1 -o tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

Agora, eu tenho que criar as rotas para um ponto ver os outros:

route add 0.0.0.0/0 dev tun0
route add 0.0.0.0/0 dev tun1
### route from the the first tunnel, through the client's IP
route add -net 10.8.0.0/24 gw 10.8.0.2 dev tun0
### same for the 2nd
route add -net 10.8.100.0/24 gw 10.8.100.1 dev tun1
### route all the traffic to the 2nd VPN
### end server's IP and internet's gateway
route add 186.186.186.186 gw 45.55.45.1
route add default gw 10.8.100.1 dev tun1 <<<<<<<<<<<<<<<<<< got locked out of VPN1 server

Então, ou estou criando rotas erradas ou as regras iptables não estão configuradas corretamente, mas não posso ter tráfego vindo de um cliente para a segunda VPN. E depois de muitas tentativas, eu sempre fico bloqueado da VPN1.

Como seria um conjunto correto de rotas para VPN1?

    
por anonimou 12.08.2017 / 20:34

1 resposta

1

Então, eu entendo. Para fazer isso, é preciso usar tabelas de roteamento personalizadas e regras do iptables para marcar todos os pacotes que você deseja encaminhar.

Por exemplo, para encaminhar uma porta no TCP, você pode usar algo como:

iptables -t mangle -I PREROUTING -p tcp -m multiport --dport 9999 -j MARK --set-mark 0x9999

Em seguida, crie uma tabela de roteamento em /etc/iproute2/rt_tables para os pacotes marcados: digamos 9999 tableToForward .

Por fim, adicione duas regras para encaminhar todos os pacotes marcados para essa tabela por meio da interface tun1 :

ip route add 0.0.0.0/0 dev tun1 table tableToForward
ip rule add from all fwmark 1 table tableToForward
    
por 02.04.2018 / 16:12