Cómo configurar el servidor OpenVPN en Debian para enrutar el tráfico VPN a Internet

Cómo configurar el servidor OpenVPN en Debian para enrutar el tráfico VPN a Internet

Estoy configurando un servidor OpenVPN en Debian.

Tengo el servidor configurado y los clientes pueden conectarse; se les asignan direcciones IP en el rango 10.11.22.0/24.

Tengo lo siguiente en mi archivo server.conf:

client-to-client
status /var/log/openvpn-status.log
verb 3

server 10.11.22.0 255.255.255.0

# This ensures Internet-bound traffic to-from clients can pass through the VPN
push "redirect-gateway def1"
push "dhcp-option DNS (my DNS address)"

Tengo el reenvío de IP activado (configurado en /etc/sysctl.conf)

Creo que necesito agregar una regla NAT a iptables, probablemente de la forma

iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE

(¡se aceptan correcciones!)

Mi pregunta es, ¿dónde debería ir esta regla para que sea persistente (para sobrevivir a los reinicios)?

Supongo que, en un mundo ideal, la regla se agregaría cuando el servidor VPN se active y se eliminaría cuando se caiga, pero el servidor está configurado para iniciarse automáticamente en systemctl de todos modos, por lo que probablemente no importe.

Solo quiero hacerlo en el lugar correcto, para que otro administrador de sistemas no se sorprenda y pueda encontrarlo.

Respuesta1

En general, el firewall debe ser independiente de la VPN. En Debian se puede gestionar (guardar y restaurar) utilizando los paquetes netfilter-persistenty iptables-persistent(ambos son necesarios).

Sin embargo, es posible ejecutar cualquier comando cuando el servidor OpenVPN se inicia o se apaga, para lo cual tiene una interfaz de secuencias de comandos. En este caso, no lo use netfilter-persistent; iptables-persistentde ​​lo contrario, su firewall podría inflarse (considere el siguiente escenario: el script agregó una regla, luego el firewall se guarda, luego el script elimina la regla, reinicie y el firewall se cargó).salvadoestado con la regla, luego el script se ejecuta y agregaotroregla; después de algunas repeticiones verás varias reglas iguales en el firewall).

Primero, agregue a la configuración de OpenVPN:

script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh

script-securityes necesario para que pueda ejecutar scripts.

Es muy probable que tenga una configuración no root usery/o groupen el servidor (¡lo cual es bueno!), por lo que su downscript se ejecutará con esos privilegios de usuario/grupo. Por lo tanto, deberá volver a obtener privilegios para poder eliminar la regla. Cree un archivo /etc/sudoers.d/openvpn-remove-ruleque contenga la siguiente línea que permitirá a este usuario ejecutar dicho comando:

<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh

(reemplace <user>con cualquier usuario configurado en la configuración de OpenVPN, probablemente nobody). De chmod 0400 /etc/sudoers.d/openvpn-remove-rulelo contrario, sudo se negará a cargarlo.

Explicaciónpor qué necesitamos un guióny no simplemente poner una llamada de comando de iptables a través de sudo directamente en la configuración de OpenVPN. En resumen: seguridad.

Por el contrario, upel comando se ejecuta antes de perder los privilegios de root, pero para mantener la coherencia, sugiero usar un script también.

El contenido de esos scripts es obvio, simplemente coloque los comandos de iptables que deben ejecutarse al iniciar y apagar el servidor. (En principio, puede usar cualquier comando allí, no solo iptables). Haga que ambos scripts sean ejecutables.

Lea man openvpncomo referencia su interfaz de secuencias de comandos.

información relacionada