CentOS 5/6 快速安裝 VPN Server (PPTP)

「VPN」是一種常用於中、大型企業或團體與團體間的私人網路的通訊方法。藉由 VPN 所建立的加密通道,可以讓你從外部存取公司內部的資源,或透過連線到 VPN 的 Server 當跳板,去存取被限制的外部資源 (俗稱「翻牆」)。

在使用 VPN 之前,你得先有一台提供服務的 VPN Server,現在滿多人會去租用國外的 VPS 當 Server,要架站兼翻牆,Linode 是不錯的選擇。

以下把握幾個重點即可快速完成 Linux 的 PPTP 的 VPN Server 架設:

  • PPP - 點對點協定 (Point-to-Point Protocol)
  • PPTP - 點對點通道協定 (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 套件:

# 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 轉送對外上網的封包 (你可以自行將 192.168.240eth0 改成符合你需求的設定)。

加入 VPN 帳號

接著我們要加入 VPN 的連線帳號。

編輯 /etc/ppp/chap-secrets 以加入 VPN 帳號,一個帳號一行,格式為:

帳號名稱 pptpd 密碼 *

例如,我要新增一個帳號為「vpn」,密碼為「test123」,則只要在 /etc/ppp/chap-secrets 加入一行:

vpn pptpd test123 *

加入之後不用重新啟動 pptpd,你就可在 Client 端以 pptp 協定用 VPN 連線至這台 Server 了。

連線測試

連線成功之後,你可以連到 ip.calm9.com 查看你是否用 VPN Server 的 IP 在上網。

下面這張圖的連線資訊是我用 linode 的試用帳號所建立的 VPS,位置在「日本」:

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 的網段是由哪個網路介面轉送對外的封包。

錯誤處理

807 錯誤

在撥接至 VPN 時,如果出現 807 錯誤 (在您的電腦與 VPN 伺服器之間的網路連線已經中斷),或是其它在確認帳號、密碼之前出現的錯誤,如果確定不是自己電腦的問題,你可以編輯 Server 的 /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

734 錯誤

在撥接至 VPN 時,如果出現 734 錯誤 (已經終止 PPP 連結控制通訊協定),請修改 Windows 的 VPN 安全性設定:

  1. 將資料加密改為「可省略加密」
  2. 勾選「未加密的密碼」
  3. 勾選「Challenge Handshake 驗證通訊協定」

參考網頁

  1. 我的 IP 位址
  2. 嘗試在 Windows Vista 中進行撥號連線或 VPN 連線時,可能會收到的錯誤碼的清單
    • OL
    • 09/11. 2013 3:27下午
    Using Google Chrome Google Chrome 29.0.1547.66 on Windows Windows 7

    这个教程非常不错 学习了

    • lee
    • 09/20. 2013 10:23下午
    Using Google Chrome Google Chrome 26.0.1410.5 on Windows Windows 7

    你好我按照这个安装以后,只有win7可以正常使用vpn,Mac and linux都无法使用,mac我测试了 MBP笔记本和 iphone手机,都是可以连接,也能看到有数据交互,但是就是不能显示网页。 能不能给点debug提示,这块我是新手。谢谢。

    • jasrnine
    • 11/26. 2013 1:30上午
    Using Google Chrome Google Chrome 31.0.1650.57 on Windows Windows NT

    我到第二部的第二条就出现了错误,提示iptables 不存在。

    • farmer6
    • 12/05. 2013 5:11下午
    Using Google Chrome Google Chrome 29.0.1547.76 on Windows Windows 7

    博主的文章写得很仔细,照着配置了一次,非常顺利。谢谢。

  1. Using Google Chrome Google Chrome 33.0.1750.154 on Windows Windows 7

    出现800错误了,怎么破?
    /etc/sysconfig/iptables 内容如下

    # Generated by iptables-save v1.4.7 on Fri Mar 28 11:05:27 2014
    *nat
    :PREROUTING ACCEPT [11344:885015]
    :POSTROUTING ACCEPT [2:169]
    :OUTPUT ACCEPT [2:169]
    -A POSTROUTING -s 192.168.240.0/24 -o eth0 -j MASQUERADE
    COMMIT
    # Completed on Fri Mar 28 11:05:27 2014
    # Generated by iptables-save v1.4.7 on Fri Mar 28 11:05:27 2014
    *filter
    :INPUT ACCEPT [33741:2636152]
    :FORWARD ACCEPT [27:2325]
    :OUTPUT ACCEPT [110:15695]
    -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
    -A INPUT -p gre -j ACCEPT
    COMMIT
    # Completed on Fri Mar 28 11:05:27 2014

    • Lzh1104
    • 04/16. 2014 10:28上午
    Using Mozilla Firefox Mozilla Firefox 28.0 on Windows Windows XP

    连不上 800 错误

    cause unexpected results. Use restart-kill to
    destroy existing connections during a restart.
    [root@localhost src]# vim /etc/rsyslog.conf

    [1]+ Stopped vim /etc/rsyslog.conf
    [root@localhost src]# vim /etc/sysconfig/iptables

    # Generated by iptables-save v1.4.7 on Wed Apr 16 10:21:44 2014
    *nat
    :PREROUTING ACCEPT [1:78]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A POSTROUTING -s 192.168.11.0/24 -o eth0 -j MASQUERADE
    COMMIT
    # Completed on Wed Apr 16 10:21:44 2014
    # Generated by iptables-save v1.4.7 on Wed Apr 16 10:21:44 2014
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [41:4504]
    -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 20 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8005 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8983 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 30000:50000 -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 Apr 16 10:21:44 2014

      • Lzh1104
      • 04/16. 2014 10:35上午
      Using Mozilla Firefox Mozilla Firefox 28.0 on Windows Windows XP

      这个搞定了--

        • sekaiai
        • 11/12. 2014 3:41下午
        Using Google Chrome Google Chrome 38.0.2125.111 on Windows Windows NT

        请问下如何搞定的?

  2. Using Google Chrome Google Chrome 35.0.1916.114 on Windows Windows 7

    默认安装会807,照说明做好后连接成功

    • hee
    • 07/25. 2014 11:24上午
    Using Google Chrome Google Chrome 35.0.1916.153 on Windows Windows NT

    http://ihww.cn/2014/07/25/%E5%B7%A5%E5%85%B7/centos_pptpd/

  3. Using Google Chrome Google Chrome 39.0.2171.95 on Windows Windows NT

    大大 能不能寫個centos 7的教學阿
    感覺centos7 有些不能適用你的文章
    感謝你

    • Using Google Chrome Google Chrome 39.0.2171.95 on Windows Windows NT

      錯誤807 請問該怎麼辦?
      第五步驟找不到 net.ipv4.ip_forward = 0 有辦法解決嗎? 謝謝

    • qiao
    • 02/12. 2015 10:01下午
    Using Mozilla Firefox Mozilla Firefox 35.0 on Windows Windows 7

    807错误解决了,多谢

    • arc
    • 03/04. 2015 11:13上午
    Using Google Chrome Google Chrome 41.0.2272.74 on Windows Windows NT

    謝謝你的教學,照上面作法做完後可以順利連上VPN,不過部分網頁無法開啟,參考http://www.320dr.net/bencandy.php?fid=14&id=846 後發現應該是MTU的問題,
    修改/etc/ppp/ip-up,在“exit 0”之前的任意位置添加:“ifconfig $1 mtu 1500”
    得以解決

    • leo
    • 03/27. 2015 8:28下午
    Using Google Chrome Google Chrome 39.0.2171.95 on Windows Windows NT

    安装成功并连上了,但是上不了网!

    • 大黑
    • 04/29. 2015 5:17下午
    Using Google Chrome Google Chrome 42.0.2311.135 on Windows Windows 8

    标记下部分网页不能上 速度慢设定mtu值
    iptables -A FORWARD -s 192.168.240.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS
    保存service iptables save
    重启service iptables restart

      • 大黑
      • 04/29. 2015 5:18下午
      Using Google Chrome Google Chrome 42.0.2311.135 on Windows Windows 8

      额标错
      iptables -A FORWARD -s 192.168.240.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1356

    • killyman
    • 07/26. 2015 5:33上午
    Using Mozilla Firefox Mozilla Firefox 31.0 on Linux Linux

    为什么我按你的,无法成功呢?

return top

%d 位部落客按了讚: