You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在通过iptables转发443端口后保留用户原始IP

如何在通过iptables转发443端口后保留用户原始IP

嘿,我来帮你搞定这个问题!你现在遇到的情况是因为用了SNAT规则,它把用户的原始IP替换成了1serv的IP(99.99.99.99),所以2serv只能看到转发服务器的地址,而看不到真实的用户IP。要保留用户IP,我们需要调整iptables规则,同时确保路由配置正确。

问题根源

你之前添加的SNAT --to-source 99.99.99.99规则会修改出站请求的源IP,把用户的真实IP替换成转发服务器的IP。这就导致2serv收到的请求看起来都是来自1serv的,自然看不到用户的原始地址。

解决方案

我们需要去掉SNAT规则,转而依靠iptables的连接追踪功能,同时确保2serv的回程流量能通过1serv返回给用户。具体步骤如下:

1. 先清理旧的nat规则(可选,但能避免冲突)

iptables -t nat -F
iptables -F

2. 确保IP转发功能开启

sysctl net.ipv4.ip_forward=1

如果需要永久生效(重启服务器后依然有效),编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward这一行,把值改成1,然后执行sysctl -p让配置生效。

3. 添加DNAT规则,将443流量转发到2serv

iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -m state --state NEW -j DNAT --to-destination 111.111.111.111:443

这条规则会把进入ens3接口的新TCP 443连接,转发到2serv的443端口。

4. 允许转发已建立/相关的流量

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

这条规则允许已经建立的连接和相关的回程流量通过1serv,iptables会自动追踪连接状态,把回程流量正确转发回用户。

5. 允许转发到2serv的新443流量

iptables -A FORWARD -d 111.111.111.111 -p tcp --dport 443 -m state --state NEW -j ACCEPT

这条规则允许新的443请求转发到2serv。

关键配置:调整2serv的默认网关

你需要确保2serv的默认网关设置为1serv的IP(99.99.99.99),这样2serv的回程流量会先发送到1serv,再由1serv转发给用户。如果2serv和1serv不在同一个子网,可能还需要在1serv上添加静态路由,确保能到达2serv。

为什么这样能保留用户IP?

去掉SNAT规则后,用户的原始IP会被保留在请求的源地址中,2serv收到的请求源IP就是用户的真实地址。只要回程流量经过1serv,iptables的连接追踪机制会自动把回程流量的目的IP改回用户的IP,完成整个通信链路。

备注:内容来源于stack exchange,提问作者Sasha Kuperman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:13:01