OpenVPN no es una puerta de enlace predeterminada para todo el tráfico

21

Estoy tratando de hacer que mi cliente reenvíe todo el tráfico a través de un VPS con OpenVPN. Como puede ver, permitirá pings tanto en dominios como en direcciones IP sin procesar, pero no permitirá tráfico como el que se realiza a través de curl y traceroute no produce nada. El tráfico funciona correctamente cuando no está conectado a la VPN.

Toda la información está aquí: https://pastebin.com/tGspNefn

Gracias.

Configuraciones de trabajo gracias a la solución a continuación:

Servidor:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Cliente:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
DrDinosaur
fuente
/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 ¿Por qué netmask 128.0.0.0?
Antony Gibbs
Gracias DrDinosaur por señalar serverfault.com/questions/312860/…
Antony Gibbs
3
La próxima vez extraiga la información relevante e inclúyala en la pregunta. Los fragmentos de Pastebin tienen una vida útil limitada.
MLu

Respuestas:

34

Hay dos partes en la solución:

1. Redirige todo el tráfico hacia el túnel

La solución más fácil: use la --redirect-gateway autolocalopción de OpenVPN (o póngala en el archivo de configuración como redirect-gateway autolocal.

2. Manejar el tráfico en el servidor OpenVPN

Ahora que el túnel está arriba, todo el tráfico va al túnel y aparece en el extremo del servidor desde la tun0interfaz.

Necesita configurar dos cosas para que funcione:

a. Habilitar el reenvío de paquetes

Por defecto en la mayoría de las distribuciones, el reenvío de paquetes está deshabilitado, por lo tanto, los paquetes de la interfaz del túnel nunca llegan a la interfaz pública. Debe habilitar el reenvío con:

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Una vez probado, haga el cambio permanente en /etc/sysctl.conf

También asegúrese de que iptablesno estén bloqueando el tráfico reenviado:

~ # iptables -I FORWARD -j ACCEPT

Esto es lo suficientemente bueno para las pruebas: en producción querrá hacer que las reglas del firewall sean un poco más específicas, pero eso está fuera de alcance aquí.

si. NAT los paquetes salientes del túnel

Con el reenvío habilitado, los paquetes se reenvían de manera predeterminada con su dirección de origen sin cambios, es decir, en este caso 10.8.0.6, dichos paquetes se descartan en la puerta de enlace del ISP o incluso si llegan al destino, la respuesta nunca encuentra el camino de regreso. Estas direcciones privadas no son enrutables en Internet.

La solución es NAT el tráfico de salida, es decir, reemplazar la 10.8.0.6dirección privada con la IP pública del servidor VPN. Eso asegurará que las respuestas lleguen al servidor VPN y allí serán enviadas nuevamente al túnel.

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. Pruébalo

Ahora intente ping 8.8.4.4desde su cliente VPN. Deberías ver una respuesta. Háganos saber si no :)

MLu
fuente
Esto funciona perfectamente ahora. Muchas gracias por la respuesta de alta calidad.
DrDinosaur
En el lado del cliente, agregue add pull al archivo client.conf, o agregue la opción --pull a la línea de comandos, para que el cliente acepte la configuración que el servidor ha enviado. Además, si el cliente se ejecuta en Windows Vista o más reciente, deshabilite UAC, de lo contrario, el servicio openpn que se ejecuta en el cliente no podrá establecer rutas.
Viktor
> b. NAT los paquetes salientes del túnel Eso fue útil para mí.
FelikZ
Realmente tenga en cuenta que la regla ADELANTE -j ACEPTAR convierte al servidor en un enrutador abierto entre todas sus interfaces. No debe usarse en sistemas de producción. Pero para que un HowTo funcione básicamente rápidamente, es un muy buen conjunto de instrucciones.
Sprinterfreak
¿El Redirect all the traffic into the tunnelpaso en la configuración del cliente?
avión