關於VPN的初始設定和架設,可以看我之前的[Debian] VPN架設 這篇文章。
恩,原本的iptables設定 基本上都可以達到VPN的功用...
但是,我在測試日版ARAD的組隊的時候,總是不夠順暢,
我也知道這遊戲組隊用到的port是UDP 5063,
中間一直用codomo的防火牆來觀察連線的狀態,
經過兩天的測試,才發現需要在iptables多一些prerouting的規則,
不然,A電腦和B電腦都用VPN組隊時,UDP的封包沒辦法轉送給對方,
導致可以組隊,但是會不夠順暢...(偶而會出現電腦的小圖示)
像是下面的圖:
┌----> VPN Server <-----┐
| |
| port:5063 | port:5063
| udp(out) | udp(out)
A B
會變成兩邊的遊戲端,都會向對方傳送組隊的封包,
VPN Server卻沒有轉送給對方,造成UDP封包送不到對方的遊戲端...(昏)
(PS: UDP的運作原理就不用多說了,請參考Google囉)
後來,我把iptables的設定改成以下:
# clean all setting
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# DNF port pre-routing
iptables -t nat -A PREROUTING -p udp --dport 5063 -i eth0 -j DNAT -s 0/0 --to 192.168.10.234
iptables -t nat -A PREROUTING -p udp --dport 5063 -i eth0 -j DNAT -s 0/0 --to 192.168.10.235
iptables -t nat -A PREROUTING -p udp --dport 5063 -i eth0 -j DNAT -s 192.168.10.234 --to 0.0.0.0-255.255.255.255
iptables -t nat -A PREROUTING -p udp --dport 5063 -i eth0 -j DNAT -s 192.168.10.235 --to 0.0.0.0-255.255.255.255
iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
iptables -o eth0 -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 800:1536 -j TCPMSS --clamp-mss-to-pmtu
主要是DNF port pre-routing那四行,VPN Server把接收到port為5063的UDP封包,
做轉送的動作,像是下面的圖:
A傳給B:
┌----> VPN Server ------┐
| |
| port:5063 | port:5063
| udp(out) ↓ udp(in)
A B
B傳給A:
┌----- VPN Server <-----┐
| |
| port:5063 | port:5063
↓ udp(in) | udp(out)
A B
這樣就解決了ARAD組隊不順暢的問題了,
本來還在想說,遊戲連線會很聰明的直接在A和B建立一個UDP,
就不需要在經由VPN Server說...(汗)
PS: 至於可不可以和外面的人組隊的話,我還沒測試過,基本上應該沒問題才對。
但是,如果組隊雙方都是用VPN連線的話,
就需要確定提供VPN主機的人,防火牆設定有沒有調整好,
不然,只有一方的VPN有設定,另一方沒設定,
也是會有不順暢的問題!
(這我測過了,A電腦用別人家的付費VPN,B電腦是連我自己架設的VPN)
至於別人家的VPN幫不幫你設定,只好看對方的誠意了。