原文中文,约7300字,阅读约需18分钟。
📝
内容提要
最近发现服务器访问日志中的IP都是内网IP,经过排查发现是socat工具导致的。尝试使用iptables解决,但发现不行。关闭openclash后一切正常,增加iptables规则后可以正常响应http请求,但获取的来源IP变成了宿主机的内网IP。经过分析发现是openclash内核导致的。尝试让流量不经过内核,成功解决问题。但后续发现内部服务无法访问,解决办法是增加NAT回环规则。总结使用socat进行端口转发会导致http server无法正确获取来源IP,在部署了openclash的内网NAT环境下,正确使用iptables进行端口映射需要配置不经过内核的源端口流量,并增加端口转发规则和NAT回环规则。
❓
Q&A
socat工具如何影响HTTP服务器的IP获取?
socat工具会改变来源的端口IP,导致HTTP服务器无法正确获取真实的来源IP。
关闭openclash后,问题有什么变化?
关闭openclash后,HTTP服务器能够正常获取真实的来源IP。
如何使用iptables解决socat导致的问题?
需要配置iptables规则,确保流量不经过openclash内核,并增加NAT回环规则。
为什么增加iptables规则后来源IP变为宿主机内网IP?
因为流量经过openclash内核处理,导致返回的来源IP被替换为宿主机的内网IP。
如何配置不经过内核的源端口流量?
在openclash的访问控制中设置不经过内核的源端口流量,例如80和443端口。
NAT回环规则的作用是什么?
NAT回环规则确保内部服务能够正常访问外部IP,避免流量被错误处理。
🏷️