用套接字归属打破本地代理的重定向环路
把代理进程自身的出站套接字从本地 OUTPUT 重定向中排除,而不是去猜它的源端口。
本地拦截代理会打开新的向外连接。如果一条覆盖所有流量的 OUTPUT 重定向把这些套接字也一并捕获,就会把代理送回它自己的监听端口。
对于已有的 IPv4 iptables NAT 配置,专用的服务身份可以把这些套接字区分出来:
-A OUTPUT -p tcp -m owner ! --uid-owner proxyuser \
-m multiport --dports 80,443 -j REDIRECT --to-ports 8080
这段规则假定可拦截的监听器已经存在于端口 8080,并且代理的出站套接字属于 proxyuser。该用户的连接会被这条规则排除;其他用户的符合条件的连接则会被重定向。
浏览器通常选择一个临时源端口。匹配源端口 80 或 443 并不是识别其网站连接或豁免代理的可靠办法。
所有者匹配针对的是带套接字归属的本地生成流量。它不能替代针对来自其他机器的数据包的源地址策略。
请留意现有的规则顺序和网络策略。重定向并不会把裸 SOCKS 监听器变成拦截适配器,IPv6 也需要其相应的配置。