TL;DR: Как я могу получить IP-адрес клиента, подключающийся к удаленно размещенному VPS, чтобы он был IP-адресом, который перенаправляется/нет через iptables на игровой сервер, работающий у меня дома?
У меня есть игровой сервер Rust, который я размещаю у себя дома. Я хочу, чтобы это было общедоступно, однако я не обязательно хочу раздавать свой IP-адрес всем. Поэтому я арендую небольшой VPS, который собираюсь использовать в основном как обратный прокси. В настоящее время я использую nginx для пересылки трафика через clinet-server VPN, который отлично работает. Однако на игровом сервере IP-адрес каждого игрока соответствует туннельному адресу VPS, а не фактическому IP-адресу клиента. я пытался использовать proxy_pass $remote_addr:28015 прозрачность; прокси_ответы 0
в моей конфигурации nginx никаких изменений. Поэтому я переключился на это через iptables.
Я могу заставить его работать на 99% так, как я хочу, делая именно это:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 28015 -j NAT --to-destination my_ip:28015
iptables -t nat -A PREROUTING -p udp --dport 28015 -j NAT --to-destination my_ip:28015
iptables -t nat -A PREROUTING -p tcp --dport 28016 -j NAT --to-destination my_ip:28016
iptables -t nat -A PREROUTING -p udp --dport 28016 -j NAT --to-destination my_ip:28016
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp -d my_ip --dport 28015 -m state --state НОВЫЙ, УСТАНОВЛЕННЫЙ, СВЯЗАННЫЙ -j ПРИНЯТЬ
iptables -A FORWARD -p ucp -d my_ip --dport 28015 -m state --state НОВЫЙ, УСТАНОВЛЕННЫЙ, СВЯЗАННЫЙ -j ПРИНЯТЬ
ufw отключить
ufw включить
перезагрузка впс \
Это в основном то же самое, что и nginx, где он работает нормально, но у всех просто есть общедоступный IP-адрес VPS (обратите внимание, что локальная сеть и общедоступный IP-адрес VPS одинаковы). Если я опускаю маскарад, он не работает.
Немного информации по настройке:
VPS имеет единый интерфейс: eth0
VPS работает Убунту 20.04
У меня дома модем находится в режиме сквозного доступа к pfsesne.В pfsense у меня есть правила переадресации портов для передачи 28015/28016 tcp/udp на игровой сервер
.
Примечание:
Я не уверен, почему nginx не работал для этого. Как будто nginx ничего не делал с proxy_pass $remote_addr
директива.