Comandos de enrutamiento OpenVPN en general

Comandos de enrutamiento OpenVPN en general

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.

Estructura de red (imagen)

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 routecomando 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 routecomando para la subred en la serverdirectiva, pero sí es necesario agregar un routecomando 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 iroutecomando 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 pushcomando también se usa para otras cosas, pero para enrutar necesita pushlas 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-clientcomando 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 iroutedirectivas. El servidor B necesitará una entrada en su archivo ccd. El iroutecomando 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 pingno 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:

Estructura con solución

Finalmente, gracias a Danger Ginger por su ayuda.

información relacionada