
Para fazer alguns trabalhos de encaminhamento, uso um script para adicionar uma cadeia personalizada. Parte do código está aqui (executado 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
O código funciona bem e tenho certeza de que os pacotes foram retransmitidos corretamente. Mas, depois que eu toco sudo iptables -L
, sai:
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
No meu roteador (OpenWRT), iptables -L
sempre mostra que todas as cadeias existem, mas não funciona no meu laptop. Alguém poderia me dizer por quê?
Obrigado!
Responder1
As cadeias personalizadas estão vinculadas a uma tabela. Isso significa que você não pode usar uma cadeia, que foi criada na mangle
tabela, nas regras das filter
tabelas nat
.
O iptables -L
comando mostra apenas as filter
cadeias de tabelas. Verifique a saída de iptables -t nat -L
. Mas é melhor usar o iptables-save -c
comando para listar o conjunto completo de regras com contadores.