2012/06/09

PPTPD VPN 服務安裝使用 debian linux 6 (squeeze)

Server 端環境及設定
------------------------
Server 為裝在Virtualbox 中的 debian linux squeeze
cpu i5-2320 記憶體 640MB

pptpd Server 安裝
# 安裝 pptpd
root@vpn:~# apt-get install pptpd  (debian 的安裝方式)

----- CentOS 補充分隔線 ----
# 如果你是使用 centos or rhel 的 linux 可以用 rpm 方式安裝,因為 centos or epel 沒有收錄這個套件,你必須要官方網站下載。這裡以 rhel5 版的為例。

[root@lab ~]# rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptp-release-4-6.rhel5.noarch.rpm
[root@lab ~]#  rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm
# 其他設定檔幾乎一樣 

# 主要設定檔 /etc/pptpd.conf
# 選項設定檔 /etc/ppp/options.pptpd
# 登入帳號設定檔 /etc/ppp/chap-secrets
----- CentOS 補充分隔線 ----

# 設定vpn server端的 ppp  ip (localip)
# 設定連入的客戶端取得的 ip 範圍 (remoteip)
root@vpn:~# vim /etc/pptpd.conf
localip 192.168.194.254
remoteip 192.168.194.20-150

# 設定連入的客戶端取得的 dns server
root@vpn:/etc/ppp# vim pptpd-options
ms-dns  8.8.8.8

# 去除註解#,看到的完整內容應該只有這樣(參考)
root@vpn:/etc/ppp# grep -v '#' pptpd-options | grep -v '^$' 
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2  # 認證機制
require-mppe-128   # 資料加密機制
ms-dns  8.8.8.8 # DNS server
proxyarp
nodefaultroute
lock
nobsdcomp


# 設定連入的客戶端登入的認證機制
root@vpn:/etc/ppp# vim chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
mtchang       pptpd  lkjhgfdsd            *

NAT防火牆設定
# 設定開啟 linux ip route 的功能
root@vpn:~# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 立即載入設定
root@vpn:~# sysctl -p

# 設定 ip 偽裝,引導 192.168.194.0/24 這個子網路的 ip 從 eth0 出去,因為
# 是私有ip需要透過偽裝的方式打包後出去。
root@vpn:~# iptables -A POSTROUTING -s 192.168.194.0/24 -o eth0 -j MASQUERADE

# 解決 facebook , msn 使用不正常的狀況. MTU 問題(幾乎一定會有)
root@vpn:~# iptables -A FORWARD -s 192.168.194.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300

# 關於 MTU 的測試可以使用 ping -f -l xxxx 路由 ip 來測試推算

C:\Users\mtchang>ping -f -l 1373 140.1.69.15 -n 1

Pinging 140.1.69.15 with 1373 bytes of data:
Packet needs to be fragmented but DF set. ==>(封包需要被分割 DF 旗標需要被設定)

Ping statistics for 140.1.69.15:
    Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),

C:\Users\mtchang>ping -f -l 1372 140.1.69.15 -n 1

Pinging 140.1.69.15 with 1372 bytes of data:
Reply from 140.1.69.15: bytes=1372 time=27ms TTL=63

Ping statistics for 140.1.69.15:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 27ms, Maximum = 27ms, Average = 27ms


# 所以 MTU 應該是 1372bytes + 28bytes(ip + icmp header的大小) = 1400 bytes

# 驗證 iptables

root@vpn:~# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination      

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination      
MASQUERADE  all  --  192.168.194.0/24     0.0.0.0/0        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      
root@vpn:~# iptables -L -n 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination      

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination      
TCPMSS     tcp  --  192.168.194.0/24     0.0.0.0/0      tcp flags:0x06/0x02 TCPMSS set 1300 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      



# 儲存 iptables 規則,以提供下次重開機自動啟動
root@vpn:~# iptables-save  > /etc/iptable.rule

# 寫入 /etc/rc.local 確定下次開機可以啟動
root@vpn:~# iptables-save  > /etc/iptables.rule
root@vpn:~# vim /etc/rc.local
/sbin/iptables-restore /etc/iptables.rule


VPN client 端設定(win7)
動作如下:
1.網路共用中心 ->  設定連線到網路
2.建立 VPN 連線
3.輸入 vpn server ip , 及帳號密碼
4.測試











ref:
http://www.howtogeek.com/51237/setting-up-a-vpn-pptp-server-on-debian/
http://blog.secaserver.com/2011/10/install-vpn-pptp-server-centos-6/
張貼留言

like