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指令什么也不做。
发布于 2021-11-18 15:13:28
你不能用IPTables来做这件事。为了使双向数据包转发正常工作,从VPS发送的数据包的源IP地址必须包含VPS地址。否则,应答包将不会发送到VPS,VPS将它们转发给客户端。
您需要第7层协议支持来将原始IP地址中继到您的应用程序。在HTTP / HTTPS中,这样做如下:
X-Forwarded-For: 以请求它发送到原始服务器。另一种可能是在VPS和源服务器之间使用SOCKS代理。SOCKS代理封装来自客户端的通信,并添加其他元数据,如客户端IP地址。
https://serverfault.com/questions/1083937
复制相似问题