
Para realizar algunos trabajos de reenvío, utilizo un script para agregar una cadena personalizada. Parte del código está aquí (ejecutarlo como root):
iptables -t nat -N v2ray_forwarder
iptables -t nat -I OUTPUT -j v2ray_forwarder
iptables -t nat -A v2ray_forwarder -p tcp -m set --match-set srv_ip dst -j RETURN
iptables -t nat -A v2ray_forwarder -d 0.0.0.0/8 -j RETURN
iptables -t nat -A v2ray_forwarder -d 10.0.0.0/8 -j RETURN
iptables -t nat -A v2ray_forwarder -d 127.0.0.0/8 -j RETURN
iptables -t nat -A v2ray_forwarder -d 192.168.0.0/16 -j RETURN
iptables -t nat -A v2ray_forwarder -p tcp -m set --match-set gfw_ip dst -j REDIRECT --to-port 1081
iptables -t nat -A v2ray_forwarder -p tcp -m set ! --match-set chn_ip dst -j REDIRECT --to-port 1081
El código funciona bien y estoy seguro de que los paquetes se han transmitido correctamente. Pero, después de tocar sudo iptables -L
, sale:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
En mi enrutador (OpenWRT), iptables -L
siempre muestra que existen todas las cadenas, pero no funciona en mi computadora portátil. ¿Alguien podría decirme por qué?
¡Gracias!
Respuesta1
Las cadenas personalizadas están vinculadas a una mesa. Significa que no puede usar una cadena que haya sido creada en la mangle
tabla, en las reglas de filter
o las nat
tablas.
El iptables -L
comando muestra solo las filter
cadenas de tablas. Verifique la salida de iptables -t nat -L
. Pero es mejor utilizar el iptables-save -c
comando para enumerar el conjunto completo de reglas con contadores.