💡
原文中文,约7300字,阅读约需18分钟。
📝
内容提要
最近发现服务器访问日志中的IP都是内网IP,经过排查发现是socat工具导致的。尝试使用iptables解决,但发现不行。关闭openclash后一切正常,增加iptables规则后可以正常响应http请求,但获取的来源IP变成了宿主机的内网IP。经过分析发现是openclash内核导致的。尝试让流量不经过内核,成功解决问题。但后续发现内部服务无法访问,解决办法是增加NAT回环规则。总结使用socat进行端口转发会导致http server无法正确获取来源IP,在部署了openclash的内网NAT环境下,正确使用iptables进行端口映射需要配置不经过内核的源端口流量,并增加端口转发规则和NAT回环规则。
🎯
关键要点
- 服务器访问日志中的IP都是内网IP,问题由socat工具引起。
- 尝试使用iptables进行解决,但未能成功。
- 关闭openclash后,问题得到解决,获取的源IP为真实IP。
- 增加iptables规则后,HTTP请求正常响应,但来源IP变为宿主机内网IP。
- 分析发现openclash内核导致流量处理不一致。
- 通过tcpdump观察数据包,发现客户端与服务端握手成功,但收到RST包。
- 解决方案是让流量不经过clash内核,并在openclash中设置不经过内核的源端口流量。
- 增加NAT回环规则以确保内部服务可以访问。
- 总结:使用socat进行端口转发会导致HTTP服务器无法正确获取来源IP,需配置iptables和NAT回环规则。
➡️