Vpn

將特定網路流量轉發到其他伺服器

  • January 5, 2012

是否可以將我的 Ubuntu Linux 伺服器機器的特定埠上的傳入流量重定向到另一台伺服器(具有另一個公共 IP 地址並位於另一個站點)?我在另一台伺服器上執行遊戲伺服器,但我希望人們能夠連接到舊 IP 地址。這可以通過某種結合 VPN 的 NAT/PAT 來完成嗎?

這是我使用 iptables 規則的測試結果…

root@oldserver:~# tcpdump -n -i eth0 port 83
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
17:47:40.349492 IP client.63633 > oldserver.83: Flags [S], seq 783927589, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:47:40.597801 IP client.63634 > oldserver.83: Flags [S], seq 924277477, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:47:43.349118 IP client.63633 > oldserver.83: Flags [S], seq 783927589, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:47:43.596024 IP client.63634 > oldserver.83: Flags [S], seq 924277477, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:47:49.349400 IP client.63633 > oldserver.83: Flags [S], seq 783927589, win 8192, options [mss 1460,nop,nop,sackOK], length 0
17:47:49.600172 IP client.63634 > oldserver.83: Flags [S], seq 924277477, win 8192, options [mss 1460,nop,nop,sackOK], length 0

這兩行

iptables -t nat -A PREROUTING -p tcp --dport <yourgameserverport> -j DNAT --to <yournewserver>:<yournewport>

iptables -t nat -A POSTROUTING -p tcp -d <yournewserver> --dport <yournewport> -j MASQUERADE

應該

  • 將流量重定向到新伺服器(如果是公共流量,則不需要 VPN)
  • 將重定向的數據包偽裝成來自您的“舊”伺服器,因此它肯定會在路由路徑中反向映射轉發連接的響應數據包。

有關DNAT 和 MASQUERADE 目標的詳細資訊,請參見各自的手冊頁部分。iptables

請注意,這種重定向設置起來很簡單,但會破壞您在目標伺服器上的 IP 日誌記錄 - 每個轉發的連接都會顯示為來自<youroldserver>. 只要這只是一個過渡解決方案,它應該可以解決。如果您想永久執行此操作,您可能會考慮通過虛擬介面(例如 VPN)對轉發的請求進行隧道傳輸<youroldserver>,並通過使用相同的虛擬介面將響應路由迴路由來確保您的轉發主機位於響應數據包的路由路徑中備用路由表

啊,你需要通過發布echo "1" > /proc/sys/net/ipv4/ip_forward(臨時更改)或編輯 /etc/sysctl.cfg 和設置net.ipv4.ip_forward=1(重啟後生效)來啟用路由。

引用自:https://serverfault.com/questions/346740