
Tengo una situación como se describe a continuación: 1- Tengo 2 servidores OpenVPN (Servidor A y Servidor B).
2- Los clientes se conectan a cada servidor a través de VPN, no de LAN directa.
3- Servidor B conectado como cliente VPN al Servidor A.
4- El servidor B ejecuta 2 instancias de OpenVPN
5- Asuume Laptop B conectada vía VPN al Servidor B, necesito que llegue al Servidor A (al menos).
6- El servidor A VPN DHCP es 10.8.0.0/24
7- El DHCP VPN del servidor B es 172.30.0.0/16
8- El servidor B tiene una IP estática 10.8.0.101 (cliente VPN)
- El problema es que no puedo acceder al servidor A desde la computadora portátil B. Y el servidor A no puede comunicarse con el servidor B en la IP del servidor VPN, no en la IP del cliente.
La configuración de red es la siguiente:
Configuración del 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)
Enrutamiento para el 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
El enrutamiento para el 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 un problema cuando intento agregar enrutamiento en el servidor A, al agregar el siguiente comando:
route add -net 172.30.0.0/16 gw 10.8.0.101
Aparece este error:
"SIOCADDRT: La red es inalcanzable"
Configuración de OpenVPN para el puerto 1194 del servidor A
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
=====================================================
Configuración OpenVPN para el 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: necesito que estos sitios se comuniquen entre sí.
Respuesta1
Comandos de enrutamiento OpenVPN en general
ruta
El route
comando va en la configuración del servidor y le dice al servidor que agregue una ruta a su propia tabla de enrutamiento del kernel. No es necesario agregar un route
comando para la subred en la server
directiva, pero sí es necesario agregar un route
comando para cada otra subred que el servidor deba manejar. Básicamente, esto le indicará al kernel que envíe estas subredes al servidor openvpn. Por ejemplo:
# 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
iroute
El iroute
comando crea rutas que son "internas" a openvpn para que el servidor openvpn sepa qué clientes son responsables de las subredes, como se describeaquíyaquí. Antes de que los paquetes lleguen a la tabla de enrutamiento del kernel, openvpn los descifra a medida que ingresan desde el dispositivo tun/tap y los examina para ver qué hacer con ellos. Sin un comando iroute, el servidor no los reconocerá.
# ccd/ServerB.conf
iroute 172.30.0.0
presione "ruta..."
El push
comando también se usa para otras cosas, pero para enrutar necesita push
las rutas de las subredes a los clientes. Esto les indicará a los clientes que modifiquen su tabla de enrutamiento kernel para enviar tráfico al servidor VPN. Sin esto, los clientes no sabrán cómo obtener paquetes de la subred privada 10.8.0.0 a 172.30.0.0. Estos deben ir en ccd/client o simplemente en la configuración del servidor si es universal para todos los 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 a cliente
El client-to-client
comando le dice al servidor que los clientes pueden comunicarse entre sí. Creo que esto está comentado por defecto y será necesario.
reenvío de IP del núcleo
Esta no es una configuración OpenVPN y lo siguiente es específico de Linux. Sin embargo, esto será importante para cualquiera que ejecute un servidor OpenVPN. Cada servidor debe tener habilitado el reenvío de IP en el kernel, comoeste. Asegúrese también de que las reglas del firewall no impidan el reenvío.
Respecto a su configuración
Parece que te faltan iroute
directivas. El servidor B necesitará una entrada en su archivo ccd. El iroute
comando le dice al servidor openvpn qué cliente conoce esa subred.
# ccd/ServerB
iroute 172.30.0.0 255.255.255.0
EDITAR: Mirando de nuevo, noto otra cosa.
También parece que el servidor A no envía la ruta al servidor B a sus clientes:
# ServerA config
push " route 172.30.0.0 255.255.255.0 "
Hago esto con dos servidores que tengo ejecutando openvpn. No debería tener que agregar manualmente ninguna ruta a ninguna de las máquinas. Si obtiene las configuraciones de openvpn correctas, el servidor B le dirá al servidor A que maneja 172.30.0.0 con iroute
. El servidor A les indicará a los clientes que envíen 172.30.0.0 a través del servidor A con push " route ... "
. Y ya tiene el Servidor B impulsando la ruta para 10.8.0.0.
Para probar si esto funciona, recomendaría ping
no intentar agregar rutas.
Respuesta2
Lo soluciono yo mismo. Lo importante "ipforwarding" no estaba habilitado en ambos lados. Éste es el principal problema. Iroute no me queda claro, miré este artículo: OpenVPN e iroute Todo el enrutamiento realizado por OpenVPN. No es necesario enrutar manualmente. Como se muestra abajo:
Finalmente, gracias a Danger Ginger por su ayuda.