
Tenho uma situação conforme descrita abaixo: 1- Tenho 2 servidores OpenVPN (servidor A e servidor B).
2- Os clientes se conectam a cada servidor via VPN, sem LANs diretas.
3- Servidor B conectado como cliente VPN ao Servidor A.
4- Servidor B executa 2 instâncias OpenVPN
5- Asuume Laptop B conectado via VPN ao Servidor B, preciso que ele chegue ao Servidor A (pelo menos).
6- Servidor A VPN DHCP é 10.8.0.0/24
7- Servidor B VPN DHCP é 172.30.0.0/16
8- O servidor B possui IP estático 10.8.0.101 (cliente VPN)
- O problema é que não consigo acessar o Servidor A do Laptop B. E o Servidor A não consegue acessar o Servidor B no IP do servidor VPN, não no IP do cliente.
A configuração de rede é a seguinte:
Configuração do servidor A
[root@localhost ~]# ifconfig
eth0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
eth0:0 inet addr:X.X.X.X Bcast:X.X.255.255 Mask:255.255.0.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:629066 errors:0 dropped:0 overruns:0 frame:0
TX packets:416252 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:136006302 (129.7 MiB) TX bytes:114377768 (109.0 MiB)
Servidor B
[root@vps8887 ~]# ifconfig
eth0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
eth0:0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.30.0.1 P-t-P:172.30.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:69 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:4140 (4.0 KiB) TX bytes:240 (240.0 b)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.101 P-t-P:10.8.0.102 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:34 errors:0 dropped:0 overruns:0 frame:0
TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2856 (2.7 KiB) TX bytes:8820 (8.6 KiB)
Roteamento para o Servidor A:
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
O roteamento para o Servidor B:
[root@vps8887 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.102 * 255.255.255.255 UH 0 0 0 tun1
172.30.0.2 * 255.255.255.255 UH 0 0 0 tun0
X.X.X.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.101 255.255.255.0 UG 0 0 0 tun1
X.X.X.0 * 255.255.255.0 U 0 0 0 eth0
172.30.0.0 172.30.0.2 255.255.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 0 0 0 eth0
default X.X.X.1 0.0.0.0 UG 0 0 0 eth0
default X.X.X.1 0.0.0.0 UG 0 0 0 eth0
Aparece um problema quando tento adicionar roteamento no Servidor A, ao adicionar o seguinte comando:
route add -net 172.30.0.0/16 gw 10.8.0.101
Este erro aparece:
"SIOCADDRT: Rede inacessível"
Configuração OpenVPN para serverA porta 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
client-to-client
duplicate-cn
server 10.8.0.0 255.255.255.0
client-config-dir ccd
push "dhcp-option DNS 10.8.0.1"
status openvpn-status.log
keepalive 10 120
comp-lzo
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
verb 3
================ Server B Client ccd ================
push "dhcp-option DNS 8.8.8.8"
ifconfig-push 10.8.0.101 10.8.0.102
=====================================================
Configuração OpenVPN para servidor B
======================= Server B ( Server Config )========================
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
client-to-client
duplicate-cn
server 172.30.0.0 255.255.0.0
push " route 10.8.0.0 255.255.255.0 "
status openvpn-status.log
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3
==============================================================================
================= Server B ( Client Config )==============================
client
dev tun
proto udp
remote serverA 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
route-nopull
route 10.8.0.0 255.255.255.0 10.8.0.101
comp-lzo
verb 5
===============================================================================
Finalmente: preciso que esses sites se comuniquem.
Responder1
Comandos de roteamento OpenVPN em geral
rota
O route
comando entra na configuração do servidor e diz ao servidor para adicionar uma rota à sua própria tabela de roteamento do kernel. Você não precisa adicionar um route
comando para a sub-rede na server
diretiva, mas precisa adicionar um route
comando para todas as outras sub-redes que o servidor deve controlar. Essencialmente, isso dirá ao kernel para enviar essas sub-redes para o servidor openvpn. Por exemplo:
# serverA.conf (just a fragment)
server 10.8.0.0 255.255.255.0
...
route 172.30.0.0 255.255.255.0 # Add a route to the kernel routing table
rota
O iroute
comando cria rotas que são "internas" ao openvpn para que o servidor openvpn saiba quais clientes são responsáveis pelas sub-redes, conforme descritoaquieaqui. Antes que os pacotes cheguem à tabela de roteamento do kernel, o openvpn os descriptografa conforme eles chegam do dispositivo tun/tap e os examina para ver o que fazer com eles. Sem um comando irute, o servidor não os reconhecerá.
# ccd/ServerB.conf
iroute 172.30.0.0
pressione " rota ... "
O push
comando também é usado para outras coisas, mas para roteamento você precisa das push
rotas de sub-redes para clientes. Isso instruirá os clientes a alterar sua tabela de roteamento do kernel para enviar tráfego ao servidor VPN. Sem isso, os clientes não saberão como obter pacotes da sub-rede privada 10.8.0.0 a 172.30.0.0. Eles devem estar no ccd/client ou apenas na configuração do servidor se for universal para todos os clientes.
# ServerA.conf (more of the fragment)
server 10.8.0.0 255.255255.0
...
route 172.30.0.0 255.255.255.0 # add the route to the server's kernel
push "route 172.30.0.0 255.255.255.0" # add the route to the clients
cliente para cliente
O client-to-client
comando informa ao servidor que os clientes podem se comunicar entre si. Acredito que isso é comentado por padrão e será necessário.
encaminhamento de ip do kernel
Esta não é uma configuração OpenVPN e o seguinte é específico para Linux. No entanto, isso será importante para qualquer pessoa que execute um servidor OpenVPN. Cada servidor deve ter o encaminhamento de IP habilitado no kernel, comoesse. Certifique-se também de que as regras de firewall não impeçam o encaminhamento.
Em relação à sua configuração
Parece que estão faltando iroute
diretivas. O servidor B precisará de uma entrada em seu arquivo ccd. O iroute
comando informa ao servidor openvpn qual cliente conhece aquela sub-rede.
# ccd/ServerB
iroute 172.30.0.0 255.255.255.0
EDIT: Olhando novamente, noto outra coisa.
Parece também que o Servidor A não envia a rota para o Servidor B para seus clientes:
# ServerA config
push " route 172.30.0.0 255.255.255.0 "
Eu faço isso com dois servidores que estou executando o openvpn. Você não deve precisar adicionar manualmente nenhuma rota a nenhuma das máquinas. Se você acertar as configurações do openvpn, o Servidor B informará ao Servidor A que ele lida com 172.30.0.0 com iroute
. O Servidor A dirá aos clientes para enviarem 172.30.0.0 através do Servidor A com extensão push " route ... "
. E você já tem o Servidor B enviando a rota para 10.8.0.0.
Para testar se isso está funcionando, eu recomendaria ping
não tentar adicionar rotas.
Responder2
Eu resolvo sozinho. O importante "ipforwarding" não estava habilitado em ambos os lados. Este é o grande problema. iroute não está claro para mim, li este artigo: OpenVPN e rota O roteamento todo feito pelo OpenVPN. Nenhum roteamento necessário manualmente. Como mostrado abaixo:
Finalmente, obrigado a Danger Ginger pela ajuda.