
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/PREROUTING
cadena a otra filter/FORWARD
.
1.1.1.1
es mi ip externa192.168.10.1
es mi ip interna10.0.1.1
es la IP del servidor VPNeth0
es interfaz externaeth1
es interfaz interna
Reglas NAT(funciona. PKTS
y BYTES
se 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 PKTS
y BYTES
no 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 = 1
y puedo hacer ping 10.0.1.1
desde el servidor NAT.
El tcpdump
puerto 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 eth0
y obtuve RTNETLINK answers: Invalid argument
. Por cierto , obtuve alguna respuesta y luego usé cualquier iif
nombre ( eth0
,, ). Obtuve la ruta válida y luego no usé el argumento.eth1
eth2
iif
UPD2
. Agregué -A FORWARD -d 10.0.1.1/32 -j ACCEPT
la regla a filter/FORWARD
la 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 -c
comando. Investiga las reglas superiores a las que has creado.Entre las cadenas
nat/PREROUTING
yfilter/FORWARD
se toma la decisión de enrutamiento. Verifique la ruta conip 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 -az
comando.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 seguimientotcpdump
-j NFLOG
ytcpdump -ni nflog
- permitir capturar los paquetes de la regla iptables.-j TRACE
objetivo: puede investigar la ruta de los paquetes a través de las reglas del firewall.
PDActualice la pregunta si todavía está atascado.