在我的 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 set 0x1 in 的位置capture-https.pcapng
,请告诉我 MARK 位置在哪里。
无处。标记只存在于内核的网络堆栈内部——它们可以与其他 iptables 规则、策略路由规则、tc 过滤器匹配——但不会通过网络传输。
(数据包标记存储在
skb->mark
字段中;连接标记存储在 conntrack 系统中。)