Estou executando meu cliente proxy na mesma máquina Linux em que estou usando a conexão. Na configuração, posso dizer para ele fazer tproxy para a porta 2500. O proxy é executado na porta 443, usando TLS (embora o proxy assuma o gerenciamento dessa parte)
Então preciso usar iptables ou nftables para rotear todos os pacotes para o proxy. Mas preciso marcá-los também, para não criar um loop.
Minhas tentativas iniciais não tiveram sucesso, parece que meus pacotes UDP não passaram (estou atrás de um NAT, mas não sei se é esse o problema, já que estou fazendo proxy de qualquer maneira). Gostaria de saber como funciona melhor para que eu possa depurar sozinho.
Aqui está minha tentativa:
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
#Setup a chain DIVERT to mark packets
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
#Use DIVERT to prevent existing connections going through TPROXY twice:
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT
#Mark all other (new) packets and use TPROXY to pass into xray
iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 2500
iptables -t mangle -A PREROUTING -p udp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 2500
#disable rp_filter and enable ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.wlp38s0.rp_filter=0
os pacotes simplesmente passam pelas minhas regras como se não existissem