OpenVPN para ciertas IP, eth0 para todo lo demás

OpenVPN para ciertas IP, eth0 para todo lo demás

Resumen: Me gustaría conectarme a mi VPN y tener acceso a ciertos servidores, pero para el resto del tráfico me gustaría usar mi red habitual.

Configuré un servidor OpenVPN en mi VPS, mi server.confarchivo se ve así:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log         /var/log/openvpn.log
verb 4
push "route 10.132.0.0 255.255.0.0"

Utilizo el siguiente .ovpnarchivo para configurar la conexión VPN:

client
dev tun
proto udp
remote <my.vpn.server.com> 1194
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
<ca>....</ca>
<cert>...</cert>
<key>...</key>

Finalmente, en el Administrador de red para la conexión VPN, en Configuración IPv4, me aseguré de configurar el "Método" en "Solo direcciones automáticas (VPN)".

La VPN se conecta bien, puedo acceder a todos los servidores internos que necesito (10.132.xx), sin embargo, no puedo acceder a nada más (como google.com). Me gustaría que mi configuración eth0 se usara para todo excepto para las IP 10.132.xx que me gustaría enrutar a través de la VPN.

PD: basado en otros artículos que intenté usar no-pullen el archivo .ovpn y agregar mi routeconfiguración allí, pero fue en vano.

EDITAR 1:

Resultados de la ejecución ip ay traceroutemientras está conectado a VPN:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:dc:a6:ef brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 86320sec preferred_lft 86320sec
    inet6 fe80::f3d1:6eb3:e13e:d61b/64 scope link 
       valid_lft forever preferred_lft forever
15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.6 peer 10.8.0.5/32 brd 10.8.0.6 scope global tun0
       valid_lft forever preferred_lft forever

$ traceroute google.com
google.com: Temporary failure in name resolution
Cannot handle "host" cmdline arg `google.com' on position 1 (argc 1)

EDITAR 2: resultados deip r

$ ip r
default via 10.8.0.5 dev tun0  proto static  metric 50 
default via 10.0.2.2 dev eth0  proto static  metric 100 
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15  metric 100 
10.8.0.1 via 10.8.0.5 dev tun0  proto static  metric 50 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6  metric 50 
10.132.0.0/16 via 10.8.0.5 dev tun0  proto static  metric 50 
104.236.239.153 via 10.0.2.2 dev eth0  proto static  metric 100 
169.254.0.0/16 dev eth0  scope link  metric 1000 

Respuesta1

El "Utilice esta conexión sólo para recursos en su red"La casilla de verificación en nm-connection-editor controla si NetworkManager debe agregar una ruta predeterminada a través de la VPN. Si está marcada, como lo hizo usted, solo los paquetes dirigidos a la subred VPN pasarán por la puerta de enlace VPN y el sistema usará la ruta predeterminada existente. ruta para otros destinos.

Puede cambiar la misma configuración desde la línea de comando usando nmcli:

nmcli connection modify <VPN connection> ipv4.never-default yes

Respuesta2

Logré obtener el efecto deseado jugando con la GUI del cliente (Ubuntu NetworkManager). Tuve que asegurarme IPv4 Settings -> Routesde que la casilla de verificación "Usar esta conexión solo para recursos en su red" estuviera marcada:

"Utilice esta conexión sólo para recursos en su red

No estoy del todo seguro de qué tendría que hacer en el archivo .ovpn para poder replicar esto.

Mi tabla de enrutamiento ahora se ve así:

$ sudo netstat -r -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.132.0.0      10.8.0.5        255.255.0.0     UG        0 0          0 tun0
104.236.239.153 10.0.2.2        255.255.255.255 UGH       0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

Recuerde que tenía push "route 10.132.0.0 255.255.0.0"en mi server.confeso explica la entrada 10.132.0.0y, por lo tanto, por qué ahora puedo acceder a mis servidores mientras todo lo demás se enruta fuera de la VPN (es decir, la 0.0.0.0entrada).

Sin que esta configuración estuviera marcada en la GUI, mi tabla de enrutamiento se veía así:

$ sudo netstat -r -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.8.0.5        0.0.0.0         UG        0 0          0 tun0
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.132.0.0      10.8.0.5        255.255.0.0     UG        0 0          0 tun0
104.236.239.153 10.0.2.2        255.255.255.255 UGH       0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

Supongo que la primera 0.0.0.0entrada (ruta predeterminada) estaba arruinando todo.

Respuesta3

Para explicar la respuesta de jdmorei, necesita lo que se llama una VPN de "túnel dividido"; en realidad, casi tuvo la solución cuando dijo: P.S. based on other articles I've tried using no-pull in the .ovpn file and adding in my route settings there but to no avail..

Querrá lo siguiente en su archivo ovpn:

route-nopull # Make sure not to pull the default routes
route 10.8.0.0 255.255.255.0 # Route the /24 of 10.8.0.0 across the VPN
route 192.168.2.2 255.255.255.255 # Route the /32 (single IP) across the VPN

Ahora la clave es que, dado que estás ejecutando Windows,debeEjecute la aplicación openvpn como administrador. Si no lo hace, verá entradas en el registro como:

Sat Nov 13 11:31:05 2010 ROUTE: route addition failed using CreateIpForwardEntry
: Access denied.   [status=5 if_index=11]
The requested operation requires elevation. 
Sat Nov 13 11:31:05 2010 ERROR: Windows route add command failed [adaptive]: ret
urned error code 1
Sat Nov 13 11:31:05 2010 Initialization Sequence Completed

Respuesta4

Estoy usando FreshTomato aquí. Solo logré redirigir 3 IP de destino a la VPN.

A continuación se muestra la configuración personalizada de OpenVPN:

allow-pull-fqdn
route-nopull
script-security 2
up /opt/openvpn-routes.sh

Luego el script mencionado anteriormente:

root@router:/tmp/home/root# cat /opt/openvpn-routes.sh 
#!/bin/sh
ip route add 204.11.51.251/32  dev tun11 # www.linksysinfo.org
ip route add 201.54.48.99/32   dev tun11 # www12.senado.leg.br
ip route add 34.160.111.145/32 dev tun11 # ifconfig.me

El punto de montaje /opt se configuró siguiendo las instrucciones dehttps://github.com/Entware/Entware/wiki/Install-on-TomatoUSB-and-FreshTomato

información relacionada