¿Reenvío de puertos openvpn para SNAT o DNAT con Iptables?

¿Reenvío de puertos openvpn para SNAT o DNAT con Iptables?

Logré configurar openvpn y lograr que emita ips internas estáticas a los clientes. Ahora el problema que tengo es que estoy intentando asignar un puerto abierto por cliente, ya que ahora tienen una IP interna estática, lo que facilita estar listo para agregar reglas. Donde tengo problemas es cómo hacer esto correctamente a través de iptables.

El ejemplo de IP estática interna 10.8.0.10 enviada por el cliente sería reenviar el puerto 1234

Probé esto sin suerte. VPN usa udp y en el puerto 1194, pero probé las siguientes reglas modificadas como udp y tcp y ambas juntas. Tenga en cuenta que VPN ya funciona y tiene las reglas de enmascaramiento, pero aparte de eso, iptables está vacío.

iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 10.8.0.10
iptables -A FORWARD -s 10.8.0.10 -p tcp --dport 1234 -j ACCEPT

También probé 10.8.0.1 como puerta de enlace y 10.8.0.10 como cliente que necesita puerto, todos los puertos reenviados.

iptables -t nat -A PREROUTING -d 10.8.0.1 -j DNAT --to-destination 10.8.0.10

Estoy tratando de lograr 2 cosas: primero poder reenviar un puerto por cliente y, si es necesario, una IP pública estática si necesitan reenviar todos los puertos.

servidor openvpn.conf

local 123.123.123.123 #- your_server_ip goes here
port 1194 #- port
proto udp #- protocol
client-config-dir /etc/openvpn/ccd
push "route 10.8.0.0 255.255.0.0"
ifconfig-pool-persist /etc/openvpn/openvpn.dhcp 30
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push redirect-gateway def1
push dhcp-option DNS 8.8.8.8
push dhcp-option DNS 8.8.4.4
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3

iptables-save:

# Generated by iptables-save v1.3.5 on Sun Aug 26 14:27:12 2012
*nat
:PREROUTING ACCEPT [4834:503608]
:POSTROUTING ACCEPT [1000:70847]
:OUTPUT ACCEPT [1000:70847]
-A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sun Aug 26 14:27:12 2012
# Generated by iptables-save v1.3.5 on Sun Aug 26 14:27:12 2012
*filter
:INPUT ACCEPT [21545:23742094]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14867:1938275]
COMMIT
# Completed on Sun Aug 26 14:27:12 2012

Respuesta1

Funciona bien para mí. Un par de cosas para comprobar:

  • Esto no afectará a las conexiones NAT realizadas desde el propio servidor VPN, para ello necesita la regla en la cadena de SALIDA.
  • ¿Está el cliente configurado para enrutartodo¿Tráfico a través de la VPN? De lo contrario, es posible que los paquetes de respuesta no se envíen de vuelta a través de la VPN.
  • ¿Está seguro de que está utilizando la dirección IP del lado del cliente y no la del lado del servidor de la conexión punto a punto de ese cliente?
  • Desea hacer coincidir una IP de destino específica en la regla; de lo contrario, captará otras conexiones en ese número de puerto.
  • Es probable que la conexión NAT de todas las conexiones a 10.8.0.1 cause problemas, ya que todos los clientes enrutan el tráfico a través de esta IP.

Respuesta2

-A  PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination 10.8.0.10

es lo que buscas :)

Yo mismo pasé por este mismo problema.

Veo y asumo que estás usando el archivo ccd para enviar la IP interna estática. Si es así, la regla anterior debería funcionar cuando se edite en sus iptables.

información relacionada