Enrutamiento NAT e IPTABLES de CentOS 7

Enrutamiento NAT e IPTABLES de CentOS 7

Tengo la instancia de CentOS como NAT para mi red local. Hay algunas subredes en mi red local. Hay un servidor VPN PPTP dentro de uno. Necesito publicar este servidor en Internet.

Entonces. Mi problema es que el tráfico no pasa de una nat/PREROUTINGcadena a otra filter/FORWARD.

  • 1.1.1.1es mi ip externa
  • 192.168.10.1es mi ip interna
  • 10.0.1.1es la IP del servidor VPN
  • eth0es interfaz externa
  • eth1es interfaz interna

Reglas NAT(funciona. PKTSy BYTESse cambian)

-A PREROUTING -d 1.1.1.1/32 -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.1.1
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p gre -j DNAT --to-destination 10.0.1.1

Reglas de FILTRO(no funciona PKTSy BYTESno se modifica)

-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p tcp -m tcp --sport 1723 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p gre -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

Por supuesto, net.ipv4.ip_forward = 1y puedo hacer ping 10.0.1.1desde el servidor NAT.

El tcpdumppuerto 1723 mostró acciones solo en la interfaz externa.

No tengo idea.

UPD1. Revisé la ruta con ip route get 10.0.1.1 from <src> iif eth0y obtuve RTNETLINK answers: Invalid argument. Por cierto , obtuve alguna respuesta y luego usé cualquier iifnombre ( eth0,, ). Obtuve la ruta válida y luego no usé el argumento.eth1eth2iif

UPD2. Agregué -A FORWARD -d 10.0.1.1/32 -j ACCEPTla regla a filter/FORWARDla cadena como primero. Pero nada. Los paquetes y bytes eran cero.

Respuesta1

  • Otras reglas son muy importantes. Y el orden de las reglas también lo es. Entonces, verifique el resultado del iptables-save -ccomando. Investiga las reglas superiores a las que has creado.

  • Entre las cadenas nat/PREROUTINGy filter/FORWARDse toma la decisión de enrutamiento. Verifique la ruta con ip route get 10.0.1.1 from <src> iif eth0. Debería devolver la ruta válida. Si es otra cosa, pégala en la pregunta.

  • Investigue también una salida del nstat -azcomando.

  • Para pasar el pptp por la NAT necesitas cargar los módulos para conntrack:

    • nf_conntrack_proto_gre
    • nf_nat_proto_gre
    • nf_conntrack_pptp
    • nf_nat_pptp
  • En los kernels recientes deberías habilitar explícitamente los asistentes de conntrack, especialmente para pptp. Entonces necesitas agregar la regla adicional.

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
  • Otra forma de habilitar el asistente es el comando sysctl:
sysctl -w net.netfilter.nf_conntrack_helper=1
  • Otras herramientas para solucionar su problema:
    • conntrack -E- seguimiento de eventos de seguimiento
    • tcpdump
    • -j NFLOGy tcpdump -ni nflog- permitir capturar los paquetes de la regla iptables.
    • -j TRACEobjetivo: puede investigar la ruta de los paquetes a través de las reglas del firewall.

PDActualice la pregunta si todavía está atascado.

información relacionada