iptables实现透明代理的核心是开启ip转发、配置精准重定向规则、确保代理服务支持透明模式;需加载内核模块、放行forward链、处理https证书问题,缺一不可。

配置 iptables 实现透明代理,核心不是“加几条规则”,而是让流量在不改客户端设置的前提下,被内核自动导向本地代理进程(如 Squid、Clash、Sing-Box),同时保证回程路径正确、连接状态可追踪、HTTPS 不报证书错误。关键在于三件事:开启转发、精准重定向、代理服务配合。
一、确认基础前提是否就绪
缺一不可,否则流量直接静默丢弃:
- 启用 IPv4 转发:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p,验证输出为1 - 确保代理服务已运行且监听在
127.0.0.1(如127.0.0.1:1080),并明确支持透明模式(例如 Squid 配置含http_port 3128 transparent,Clash 启用TProxy模式) - 确认内核加载了必要模块:
sudo modprobe xt_REDIRECT xt_socket nf_conntrack_netlink(TPROXY 场景还需xt_TPROXY_IPV4 nf_tproxy_ipv4)
二、iptables 规则配置(以 REDIRECT 方式为例)
适用于 HTTP/HTTPS 流量拦截到本机代理,简单可靠:
一款AI视频创作工具,主要用于蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具,适合需要提升相关任务效率的用户。
- 拦截局域网入向流量(旁路由模式,假设内网口是
eth0):sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 1080 - 避免循环:代理自身发出的请求不能再次被重定向
sudo iptables -t nat -I PREROUTING -s 127.0.0.1 -j RETURNsudo iptables -t nat -I PREROUTING -d 127.0.0.1 -j RETURN - 若使用 Docker 容器运行代理,还需排除容器网段(如
172.17.0.0/16)
三、放行转发与状态追踪
仅写 NAT 规则远远不够,FORWARD 链必须允许流量通过:
- 先查默认策略:
sudo iptables -L FORWARD -n | head -1,若显示policy DROP,需显式放行 - 允许新建连接出向:
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state NEW -j ACCEPT(eth1是上行口) - 允许已建立连接回程:
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT - UDP 流量(如 DNS)需单独处理,因无连接状态:
正向:sudo iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j ACCEPT
反向:sudo iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 53 -j ACCEPT
四、HTTPS 透传与证书问题
REDIRECT 方式下,HTTPS 请求目标 IP 被改成 127.0.0.1,但 SNI 和 Host 头仍保留;代理必须能解析并重建 TLS 连接:
- Squid 等传统代理需启用 SSL Bump 并部署自签名 CA 证书到客户端信任库,否则浏览器提示证书错误
- 现代工具如 Clash、Sing-Box 的 TPROXY 模式可保留原始目的 IP,配合策略路由 + socket 匹配,实现真透明,无需证书干预(但配置更复杂)
- 若只做分流(如国内直连、国外走代理),建议结合
ipset+mangle表打标 + 策略路由,比全量重定向更可控










