首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iptable端口转发同时保留客户端IP

Iptable端口转发同时保留客户端IP
EN

Server Fault用户
提问于 2021-11-18 14:47:06
回答 1查看 1.4K关注 0票数 1

TL;DR:如何使连接到远程托管VPS的客户端ip成为通过iptables转发/处理到在我家运行的游戏服务器的IP?

我有一个锈蚀游戏服务器,我是主持在我的房子。我希望这是公开的,但我不一定要把我的IP地址给每个人。因此,我租了一个小的VPS,打算基本上用作反向代理。我目前正在使用nginx在clinet服务器VPN上转发流量,这很好。然而,在游戏服务器上,每个玩家的IP都是VPS的隧道地址,而不是实际的客户端IP。我尝试在我的nginx配置中使用proxy_pass $remote_addr:28015 transparancy; proxy_responses 0,没有改变。于是我转而通过iptable来做这件事。

我可以让它按照我想要的方式工作99%,就这样做:

sysctl net.ipv4.ip_forward=1 iptables -t nat -A PREROUTING -p tcp -dport 28015 -j nat --to- my_ip:28015 iptables -t -t -A PREROUTING -p udp -dport 28015 -j nat -to-目的地my_ip:28015 iptables -A PREROUTING -p tcp --dport 28016 -j NAT --to--目的地址my_ip:28016 iptables -t nat -j udp -dport 28016 NAT --目的地iptables -t nat -A POSTROUTING -o eth0 -j伪装iptables -A FORWARD -p tcp -d my_ip -dport 28015 -m state -state NEW,已建立,相关-j接受iptables -A FORWARD -p ucp -d my_ip -dport 28015 -m状态-状态新,已建立,关联-j接受ufw禁用ufw启用vps重新启动\

这基本上和nginx一样,它的工作原理很好,但是每个人都有VPS的公共ip (请注意,VPS的LAN和public ip地址是相同的)。如果我漏掉了面糊,它就不管用了。

有关设置的一些信息: VPS只有一个接口:eth0 VPS在我家运行Ubuntu 20.04,调制解调器在pfsesne的密码模式下运行。在pfsense上,我有端口转发规则将28015/28016 tcp/udp传递给gameserver

西德诺特:我不知道为什么nginx不适合这样做。这就好像nginx对proxy_pass $remote_addr指令什么也不做。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-11-18 15:13:28

你不能用IPTables来做这件事。为了使双向数据包转发正常工作,从VPS发送的数据包的源IP地址必须包含VPS地址。否则,应答包将不会发送到VPS,VPS将它们转发给客户端。

您需要第7层协议支持来将原始IP地址中继到您的应用程序。在HTTP / HTTPS中,这样做如下:

  1. nginx反向代理适用于您的VPS。
  2. 反向代理添加报头X-Forwarded-For: 以请求它发送到原始服务器。
  3. 源服务器读取报头并将其用作客户端IP地址,而不是使用与TCP套接字关联的IP地址。

另一种可能是在VPS和源服务器之间使用SOCKS代理。SOCKS代理封装来自客户端的通信,并添加其他元数据,如客户端IP地址。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1083937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档