No meu servidor CentOS7, esvaziei todas as regras do iptables e adicionei a regra abaixo:
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
posso verificar:
[root@localhost go-tproxy]# iptables -n -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DIVERT tcp -- 0.0.0.0/0 0.0.0.0/0 socket
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
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain DIVERT (1 references)
target prot opt source destination
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK set 0x1
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
e meu serviço iptables no meu servidor está ativo.
Você vê a MARK set 0x1
tag nas regras e então eu uso ping www.demo.com
e `curl -vo 1 'https://google.com' para testar os dados. e eu capturo os pacotes pelo wireshark, você pode conferir:
https://github.com/moonshineBoy/pastebin_files
Não encontrei a localização do MARK set 0x1 em capture-https.pcapng
, por favor me diga onde fica a localização do MARK.
Lugar algum. As marcas só existem internamente dentro da pilha de rede do kernel – elas podem ser correspondidas por outras regras do iptables, regras de roteamento de política, filtros tc – mas não são transmitidas pela rede.
(As marcas de pacote são armazenadas no
skb->mark
campo; as marcas de conexão são armazenadas no sistema conntrack.)