在我的 CentOS7 服务器中,我清空了所有的 iptables 规则,然后添加以下规则:
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
我可以检查一下:
[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
并且我的服务器中的 iptables 服务处于活动状态。
您可以MARK set 0x1
在规则中看到标签,然后我使用ping www.demo.com
`curl -vo 1'https://google.com'来测试数据。我用wireshark捕获包,您可以检查:
https://github.com/moonshineBoy/pastebin_files
我没有找到 MARK 设置 0x1 的位置capture-https.pcapng
,请告诉我 MARK 位置在哪里。
答案1
无处可去。标记仅存在于内核的网络堆栈内部 - 它们可以被其他 iptables 规则、策略路由规则、tc 过滤器匹配 - 但不会通过网络传输。
(数据包标记存储在skb->mark
字段中;连接标记存储在conntrack系统中。)