關於 CentOS 快速安裝 VPN Server (PPTP) 的安裝、測試、錯誤排除部分,內容完全由 Vixual 處轉載,所有關於文章的法定權利仍歸原作者所有,感謝原作者同意轉載
安裝
ppp - 點對點協定 (Point-to-Point Protocol)
pptpd - 點對點通道協定 (Point-to-Point Tunneling Protocol)
iptables - 設定封包轉發規則
1. 判斷 ppp 是否可用:
$ cat /dev/ppp
cat: /dev/ppp: No such device or address
如果出現跟上面一樣的訊息 "No such device or address",不用擔心,這表示 ppp 是可用的,可以正常架設 pptp。若出現 "Permission denied",表示 ppp 是關閉的,下面就可以不用再看了。
2. 安裝 ppp 與 iptables
$ yum -y install ppp iptables
$ cp -rpf /etc/sysconfig/iptables /etc/sysconfig/iptables.pptpsave
$ cd /usr/src
3. 請依照你的系統環境下載適合的 pptp 套件:
http://poptop.sourceforge.net/yum/stable/
# for CentOS 6.x 32bit
$ wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/pptpd-1.3.4-2.el6.i686.rpm
# for CentOS 6.x x64
$ wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptpd-1.3.4-2.el6.x86_64.rpm
# for CentOS 5.x 32bit
$ wget http://poptop.sourceforge.net/yum/stable/rhel5/i386/pptpd-1.3.4-2.rhel5.i386.rpm
# for CentOS 6.x x64
$ wget http://poptop.sourceforge.net/yum/stable/rhel5/x86_64/pptpd-1.3.4-2.rhel5.x86_64.rpm
上面這些載點如果失效,有可能是更新版本了,請自行前往 poptop 的網站下載,或是備用載點。
4. 安裝上一個步驟所下載的 pptp 套件:
$ rpm -ivh pptpd-1.3.4-2.el6.i686.rpm
5. 編輯 "/etc/sysctl.conf",找到:
net.ipv4.ip_forward = 0
將後面的 0 改成 1
6. 下面的指令全部給它下去:
sysctl -p
echo "localip 192.168.240.1" >> /etc/pptpd.conf
echo "remoteip 192.168.240.101-200" >> /etc/pptpd.conf
echo "ms-dns 8.8.8.8" >> /etc/ppp/options.pptpd
echo "ms-dns 8.8.4.4" >> /etc/ppp/options.pptpd
iptables --flush POSTROUTING --table nat
iptables --flush FORWARD
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.240.0/24 -o eth0 -j MASQUERADE
service iptables save
service pptpd restart
service iptables restart
chkconfig pptpd on
chkconfig iptables on
上面這些指令會創造一個 192.168.240.* 的網段給連上來的 vpn 用戶使用,並透過 Server 上的 eth0 轉送對外上網的封包 (Forward)。
iptables 規則說明
設定步驟中的這三條指令是最重要的 iptables 規則:
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.240.0/24 -o eth0 -j MASQUERADE
因為 pptp 是以 GRE (Generic Routing Encapsulation) 封包透過 1723 Port 進行傳輸,並且還要設定 VPN 的網段是由哪個網路介面轉送對外的封包。
補充:
sysctl -p Load in sysctl settings from the file specified or /etc/sysctl.conf
/etc/pptpd.conf 會在檔尾被加入
localip 192.168.240.1
remoteip 192.168.240.101-200
/etc/ppp/options.pptpd 會在檔尾被加入
ms-dns 8.8.8.8
ms-dns 8.8.4.4
/etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed May 7 17:21:58 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:636]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p gre -j ACCEPT
COMMIT
# Completed on Wed May 7 17:21:58 2014
# Generated by iptables-save v1.4.7 on Wed May 7 17:21:58 2014
*nat
:PREROUTING ACCEPT [3:484]
:POSTROUTING ACCEPT [1:124]
:OUTPUT ACCEPT [1:124]
-A POSTROUTING -s 192.168.240.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed May 7 17:21:58 2014
7.加入 VPN 帳號
編輯 "/etc/ppp/chap-secrets" 以加入 VPN 帳號,一個帳號一行,格式為:
帳號名稱 pptpd 密碼 *
例如,我要新增一個帳號為 "vpn",密碼為 "test123",則只要在 "/etc/ppp/chap-secrets" 加入一行:
vpn pptpd test123 *
加入之後,不用重新啟動 pptpd,你就可在 Client 端以 pptp 協定用 VPN 連線至這台 Server 了。
管理
8.把使用者登入的log整理好
在/etc/ppp/ip-up加入登入log
#!/bin/bash
# This file should not be modified -- make local changes to
# /etc/ppp/ip-up.local instead
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
LOGDEVICE=$6
REALDEVICE=$1
[ -f /etc/sysconfig/network-scripts/ifcfg-${LOGDEVICE} ] && /etc/sysconfig/network-scripts/ifup-post --realdevice ${REALDEVICE} ifcfg-${LOGDEVICE}
/etc/ppp/ip-up.ipv6to4 ${LOGDEVICE}
[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@"
echo "" >> /var/log/pptpd.log
echo "IP UP `date -d today +%F_%T` $6 $PEERNAME $1 $5" >> /var/log/pptpd.log
exit 0
在/etc/ppp/ip-down加入登出log並且整理至登入log下一行方便查詢
#!/bin/bash
# This file should not be modified -- make local changes to
# /etc/ppp/ip-down.local instead
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
LOGDEVICE=$6
REALDEVICE=$1
/etc/ppp/ip-down.ipv6to4 ${LOGDEVICE}
[ -x /etc/ppp/ip-down.local ] && /etc/ppp/ip-down.local "$@"
/etc/sysconfig/network-scripts/ifdown-post --realdevice ${REALDEVICE} \
ifcfg-${LOGDEVICE}
tac /var/log/pptpd.log | while read line
do
_tmphead=$(echo $line | cut -d" " -f1,2)
_tmptime=$(echo $line | cut -d" " -f3)
_tmpuser=$(echo $line | cut -d" " -f5)
if [ "IP UP" = "$_tmphead" -a "$PEERNAME" = "$_tmpuser" ]
then
_rep_line="$line"
sed -i "s/$line/$_rep_line\nIP DOWN `date -d today +%F_%T` $6 $PEERNAME $1 $5/" /var/log/pptpd.log
break
fi
done
exit 0
連線
9.win7登入VPN設定
a. 控制台\網路和網際網路\網路和共用中心點選設定新的連線或網路
b.點選連線到工作地點
c.點選使用我的網際網路連線(VPN)(I)
d.設定VPN服務的網際網路位址(I),勾選不要立即連線,先設定好,我稍後再連線(D)
e.輸入你的使用者名稱及密碼
f.連線已就續可供使用,先不要急著連線,還要設其他選項
g.控制台\網路和網際網路\網路和共用中心點選連線到網路
h.VPN連線按右鍵
i.修改安全性選項後確定
j.點擊VPN連線
k.連線帳號密碼
10.錯誤處理
在撥接 vpn 時,如果出現 807 錯誤,或是其它在確認帳號、密碼之前出現的錯誤,如果確定不是自己電腦的問題,你可以編輯 /etc/sysconfig/iptables,查看這兩條規則是否有正確出現在檔案裡面:
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p gre -j ACCEPT
並且這兩條規則的位置不能在任何 "-A INPUT -j REJECT ..." 的規則下面。若有這種情形,請把它移到 "-A INPUT -J REJECT ..." 的上方。
儲存之後,再重新啟動 iptables:
service iptables restart
11.連線測試
連線成功之後,你可以連到 ip.calm9.com 查看你是否用 VPN Server 的 IP 在上網。
參考與延伸閱讀資料
http://www.vixual.net/blog/archives/32
http://jcktu.blogspot.tw/2011/03/pptpd-vpn-log.html
http://mirror.sars.tw/Bash_Shell_by_ols3/x737.html
http://www.delightpress.com.tw/bookRead/skns00004_read.pdf