我在专用的ubuntu服务器上有一个防火墙(基于iptables)。我有几个局域网客户端。
在我的一个LAN客户端中,我正在运行可基于IP限制访问权限的软件。对我而言,重要的是我可以通过使用WAN IP而不是LAN IP进行限制。
我已经配置了防火墙,以便将一个端口转发到运行良好的LAN客户端(在stackoverflow上找到了解决方案)。到目前为止没有问题。
但是,在LAN客户端上,我看不到外部发送者的IP,但是-我认为由于转发-客户端看到数据包来自我的LAN服务器。
问题是:如何将服务器上的端口转发到具有不同端口的另一个LAN IP,以便LAN客户端识别数据包的外部IP。
让我们更清楚一点:
服务器局域网IP:192.168.1.10服务器端口:8080
应该转发给:客户端LAN IP:192.168.1.20客户端LAN端口:8000
使用iptables我有:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -d 192.168.1.10 -j DNAT --to 192.168.1.20:8000
iptables -A FORWARD -p tcp -d 192.168.1.20 --dport 8000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp --dport 8000 -d 192.168.1.20 -j SNAT --to 192.168.1.10
Run Code Online (Sandbox Code Playgroud)
如所写的可行,但是当IP 88.77.66.55的某人发送数据包时,我的LAN客户端(192.168.1.20)看到该数据包来自我的LAN服务器(192.168.1.10),不幸的是不是来自88.77.66.55。
我可以解决...吗?
小智 5
您的最后一条规则与MASQUERADE规则相同。
例如:
iptables -t nat -A POSTROUTING --out-interface eth0 -j伪装
使用MASQUERADE或SNAT,您正在修改源IP地址经过第一台服务器时的地址。第二台服务器看到该数据包,并将其响应发送回该IP,然后将该IP发送回客户端。
但是,服务器将请求视为来自192.168.1.10-因为它来自此请求。
客户端>网关> iptables-router>服务器(请参阅.10)> iptables-router>网关>客户端
如果删除MASQUERADE / SNAT,服务器将看到真实IP,但是当发送答复时,数据包将转到其默认网关(默认路由),该网关可能是您的路由器或数据中心的网关。客户端从一个未知的IP地址获得响应,并且不知道该如何处理,因此看起来好像不起作用。可选地,网关/路由器看到没有关联连接的SYNACK,并丢弃数据包。
客户端>网关> iptables-router>服务器>网关(DROP)或>客户端(DROP)
如果您希望服务器获取客户端的真实IP,可以通过以下两种常用方法使其工作:
客户端>网关> iptables-路由器>服务器(真实IP)> iptables-路由器>网关>客户端
客户端>网关> iptables-路由器>服务器(请参阅X-Original-IP标头)> iptables-路由器>网关>客户端
最好的问候,尼尔
| 归档时间: |
|
| 查看次数: |
13822 次 |
| 最近记录: |