TCP 包中的 iptables MARK 位置在哪里?

TCP 包中的 iptables MARK 位置在哪里?

在我的 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系统中。)

相关内容