2012年4月4日 星期三

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

晚上10:14


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



2012年4月3日 星期二

[Debian] VPN架設

凌晨3:50


恩...最近買了一個VPS來用拉!!!

第一件事就是先架VPN來用囉....

基本上,我是參考 這個網站 的教學

apt-get update
apt-get upgrade
apt-get install pptpd


移除這兩個#的註解
vim /etc/pptpd.conf

localip 192.168.0.234-238,192.168.0.245
remoteip 192.168.1.234-238,192.168.1.245


VPN連線時的帳號密碼,請自己設定囉
vim /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
fu              pptpd   passwordhere            *


把#註解拿掉
vim /etc/sysctl.conf
net.ipv4.ip_forward=1


會出現剛剛你拿掉註解的那行,沒出現的話就是有錯誤,回去看看有沒有修改到
sysctl -p


iptables的設定,他的網站"減號"有大小寫的問題,當初改了一下才成功,沒出現錯誤。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -o eth0 -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-m tcpmss --mss 800:1536 -j TCPMSS --clamp-mss-to-pmtu


chmod +x /etc/init.d/pptpd
/usr/sbin/update-rc.d -f pptpd defaults


設定防火牆 iptables的設定
vim /etc/iptables.sh
#!/bin/sh
IPT="/sbin/iptables"
$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$IPT -o eth0 -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-m tcpmss --mss 800:1536 -j TCPMSS --clamp-mss-to-pmtu


chown root /etc/iptables.sh
chmod 700 /etc/iptables.sh


加入 pre-up /etc/iptables.sh
vim /etc/network/interfaces
pre-up /etc/iptables.sh


重新開機,測試看看能不能連囉。