TL;DR: ฉันจะทำให้ไคลเอนต์ ip ที่เชื่อมต่อกับ VPS ที่โฮสต์ระยะไกลเป็น IP ที่ได้รับการส่งต่อ/แนทผ่าน iptables ไปยังเซิร์ฟเวอร์เกมที่ทำงานที่บ้านของฉันได้อย่างไร
ฉันมีเซิร์ฟเวอร์เกม Rust ที่ฉันโฮสต์อยู่ที่บ้าน ฉันต้องการให้เป็นสาธารณะ แต่ฉันไม่ต้องการให้ที่อยู่ IP ของฉันแก่ทุกคน ดังนั้นฉันจึงเช่า VPS ขนาดเล็กที่ตั้งใจจะใช้เป็น reverse proxy ขณะนี้ฉันใช้ nginx เพื่อส่งต่อทราฟฟิกผ่าน clinet-server VPN ซึ่งใช้งานได้ดี อย่างไรก็ตาม บนเซิร์ฟเวอร์เกม IP ของผู้เล่นทุกคนคือที่อยู่ทันเนลของ VPS ไม่ใช่ IP ไคลเอนต์จริง ฉันลองใช้ proxy_pass $remote_addr:28015 ความโปร่งใส; proxy_responses 0
ในการกำหนดค่า nginx ของฉันไม่มีการเปลี่ยนแปลง ดังนั้นฉันจึงเปลี่ยนไปทำผ่าน iptables
ฉันสามารถทำให้มันทำงานได้ 99% อย่างที่ฉันต้องการ ทำสิ่งนี้:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 28015 -j NAT --to-ปลายทาง my_ip:28015
iptables -t nat -A PREROUTING -p udp --dport 28015 -j NAT --to-ปลายทาง my_ip:28015
iptables -t nat -A PREROUTING -p tcp --dport 28016 -j NAT --to-ปลายทาง my_ip:28016
iptables -t nat -A PREROUTING -p udp --dport 28016 -j NAT --to-ปลายทาง my_ip:28016
iptables -t nat -A โพสต์ -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 NEW,ESTABLISHED,RELATED -j ยอมรับ
ufw ปิดการใช้งาน
ufw เปิดใช้งาน
รีบูต vps \
สิ่งนี้ทำโดยพื้นฐานแล้วเหมือนกับ nginx ซึ่งใช้งานได้ดี แต่ทุกคนมี ip สาธารณะของ VPS เท่านั้น (โปรดทราบว่า LAN และที่อยู่ ip สาธารณะของ VPS นั้นเหมือนกัน) ถ้าฉันละเว้นการสวมหน้ากาก มันจะไม่ทำงาน
ข้อมูลบางอย่างเกี่ยวกับการตั้งค่า:
VPS มีอินเทอร์เฟซเดียว: eth0
VPS กำลังทำงานอยู่ อูบุนตู 20.04
ที่บ้านของฉัน โมเด็มอยู่ในโหมด passthru ไปยัง pfsesneใน pfsense ฉันมีกฎการส่งต่อพอร์ตเพื่อส่ง 28015/28016 tcp/udp ไปที่ เซิร์ฟเวอร์เกม
.
หมายเหตุด้านข้าง:
ฉันไม่แน่ใจว่าทำไม nginx ไม่ทำงานสำหรับสิ่งนี้ มันเกือบจะเหมือนกับว่า nginx ไม่ได้ทำอะไรเลยกับ proxy_pass $remote_addr
คำสั่ง