之前写的 iptables/nftables 示例会给每个符合条件的包都发送一次伪装包,影响通信效率,以我 fork 版本的 mark 写个新例子,只在握手成功后发一次伪装包,iptables 太长发不出来,去项目主页看
https://github.com/kmb21y66/nf_deaf/例如 0xDEA10103:错误的 TCP 校验和,为防止原始包抢先发出设置 jiffies 为 1 ,TTL 为 3 。
nftables 配置文件示例:
#!/usr/sbin/nft -f
#清空 nftables 规则,小心这一条
flush ruleset
table inet filter {
chain postrouting {
type filter hook postrouting priority 0 ; policy accept;
#被标记的连接不再打标记
ct mark 0xDEA10103 return
#IPv4 ,目的地址 1.1.1.1 ,TCP 端口 0-65535 ,长度大于 120 的包,设置连接标记和包标记后发出
ip daddr {1.1.1.1} tcp dport { 0-65535 } meta length gt 120 ct mark set 0xDEA10103 meta mark set 0xDEA10103 return
#IPv6 ,目的地址 2606:4700:4700::1111 ,TCP 端口 0-65535 ,长度大于 100 的包,设置连接标记和包标记后发出
ip6 daddr {2606:4700:4700::1111} tcp dport { 0-65535 } meta length gt 100 ct mark set 0xDEA10103 meta mark set 0xDEA10103 return
}
}