
Estoy bastante confundido y no lo entiendo en absoluto iptables
.
Tengo un servidor nginx escuchando localhost:80
y quiero acceder a él con la IP de mi NIC 192.168.29.167:80
. yo estaba siguiendoocéano digitalEl tutorial de cómo configurar las reglas.
mi:
tipo | Interfaz | DIRECCIÓN |
---|---|---|
local |
lo |
127.0.0.1 |
NIC lan |
enp7s0 |
192.168.29.167 |
Hice,
iptables -A FORWARD -i lo -o enp7s0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i lo -o enp7s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp7s0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 127.0.0.1 -j SNAT --to-desitnation 127.0.0.1
Configurar las reglas y PREROUTING
no hizo nada. No puedo acceder a través de .POSTROUTING
FORWARD
localhost:80
enp7s0
(nota: tengo sudo sysctl -w net.ipv4.ip_forward=1
)
Respuesta1
- Tienes un error en las
nat
reglas: los nombres de tus interfaces parecen incorrectos. Es mejor utilizar elDNAT
basado en la dirección de destino, no en el nombre de la interfaz de entrada. Por lo tanto, solo necesitas una regla para lograr lo que deseas:
iptables -t nat -A PREROUTING --dst 192.168.29.167 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
- Estos paquetes no se reenvían (transmiten), pero se ingresan. Debes permitir este tráfico en la
filter/INPUT
cadena, no enfilter/FORWARD
. Tenga en cuenta que después deDNAT
la acción, la interfaz de entrada no cambia (por lo que debe especificarenp7s0
la interfaz, nolo
). Pero puedes permitir cualquierDNAT
conexión con una sola regla.
iptables -t filter -A INPUT -m conntrack --ctstate DNAT -j ACCEPT
- Ejecute el
sysctl -w net.ipv4.conf.enp7s0.route_localnet=1
para permitir recibir desde el exterior los paquetes, aquellos que están dirigidos al archivo127.0.0.1
. - Utilice mejor
iptables-save -c
los comandos para enumerar el conjunto completo de reglas con contadores. Deberías vernat/PREROUTING
al menos aumentar los contadores de reglas. Además, utiliceiptables-apply
para aplicar nuevas reglas. Consulte la documentación de estas utilidades. - Utilice
tcpdump -ni enp7s0 'tcp port 80'
para solucionar problemas de tráfico desde el exterior. - Para redirigir el tráfico originado localmente debes utilizar estas reglas
iptables -t nat -A OUTPUT -p tcp --dport 80 --dst 192.168.29.167 -j DNAT --to 127.0.0.1
De lo contrario, no podrá conectarse a su nginx a través de la dirección 192.168.29.167 desde el propio servidor.