2012年4月4日 星期三

[Debian] PPTP VPN 防火牆設定 for DNF (日版Arad)



關於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幫不幫你設定,只好看對方的誠意了。



沒有留言:

張貼留言