如何快速搭建一个VPN(pptp)

  这是一个简短的教程,目的是为了快速搭建一个可用的VPN,本文并不涉及有关VPN的正常使用内容。本简短教程基于以下硬件条件:

  1. 一台安装了Debian GNU/Linux 5.0的VPS。
    • 当然理论上所有可以安装pptpd包的*nix系统都可以作为主机,教程中安装方式是基于Debian的apt-get命令,其他发行版请自行对照使用。
  2. 这台VPS的物理位置是Fremont, CA。
    • 物理位置作为VPN这个应用本身并不重要,在这里提出只是多此一举。

安装服务器端软件

# apt-get install pptpd

  Debian的包管理是所有发行版里最好的,所以这条命令打完就安装完毕了我们的pptp服务器端程序。

配置IP地址范围
  编辑/etc/pptpd.conf,在最后添加如下地址:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

  这两句设置了当外部计算机通过pptp联接到vpn后所能拿到的ip地址范围和服务器的ip地址设置。

增加一个用户
  编辑/etc/ppp/chap-secrets,在下面增加类似的条目:

username pptpd password *

  上面内容很好理解,最后那个星号是说允许从任何IP地址联接,如果你想单独设定IP地址也可以。

重启pptpd服务

# /etc/init.d/pptpd restart

  理论上到这里一个vpn就已经搭建完毕了。无论你用的是Windows还是OSX,或者是iPhone OS,都可以通过建立一个pptp链接来联入这个VPN。不过你并不能通过这个来上Internet,因为所有的数据都作用于那台pptpd的服务器上,而不会传入拨入的计算机设备上。要上Internet还需要这么干:

dns解析支持
  编辑:/etc/ppp/options,在里面找一下“ms-dns”项目:

ms-dns 208.67.222.222
ms-dns 208.67.220.220

  我填写的是OpenDNS的地址,当然你也可以填写电信的DNS。

允许转发
  编辑/etc/sysctl.conf,看一下net.ipv4.ip_forward参数是不是1。

net.ipv4.ip_forward=1

  最后的最后,运行一下这条命令来打开iptables的转发支持:

/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE 

注意:来自@LEMONed的消息,只有Xen的VPS可以搭建pptp,OpenVZ的不行。

引用来自@LEMONed的话:
因为openvz下只有venet0,没有eth0,而绝大多数的vps都是openvz的,然后绝大多数的openvz vps都没有masqurade,只能搭建openvpn并且要自签证书什么的,根本不能用pptpd。我为了给iphone搭个vpn曾经把这个研究透彻了

看来过几天我得再写一份搭openvpn的教程。

这里有个如何在openvz下搭建OpenVpn的教程:OpenVZ VPS安装配置OpenVPN

49 Responses to “如何快速搭建一个VPN(pptp)”

  • milala says:

    按你这么说,谁家的机器只要能上网都可以自己搞vpn?

    那不就是说,以后人人都可以自己搞vpn,都可以随意翻墙了?还不用四处找free vpn?

    我们家mac也可以??

  • kDolphin says:

    我有些废话你没仔细看,确实谁家的机器都可以做vpn,但是物理位置很重要,在国内的机器白搭。

  • 是啊,哈哈,在国内搭了也白搭··

  • iStef says:

    pptp 配置确实方便,但很容易被各种设备卡住,基于 IPSEC 或是 OpenVPN 的解决方案好一点儿,希望未来能看到这样的教程 :)

  • Anonymous says:

    就是, 谁家都可以建VPN,
    但是你用来翻墙就得找好位置了,
    不然你连来连去,还是在一个院子里来回折腾.

  • rhythm says:

    我重启了一下VPS,重启了一下PPTP,又设置了一下转发规则才生效。真是不容易。我现在又有另一个问题就是能不能设置每个IP的下行速度呢。

  • kDolphin says:

    好像可以用tc来限制,你可以在Google上查一下,我记得看到过类似的文章。

  • rhythm says:

    请问,可不可以设置分配到的每个IP的下行速度。

  • verybt says:

    收到,我研究下在centos下怎么搭建VPN

  • rhythm says:

    71257:/sbin# service iptables start
    service: no such service iptables

    这个是什么原因?

    能连上无法访问,我觉得/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE这句话根本没有起作用

  • shark says:

    允许转发这一步改完之后,要用下面命令才能生效的。在这一步我卡了好久。

    sysctl -p

  • kDolphin says:

    既然iPhone能连上,最起码说明pptpd是工作了,Gphone可能是设置的问题,你可以注意一下有关加密部分的设置。
    连上不能上网,一般就是ms-dns和iptables设置。
    ms-dns比较容易确认,顶多你换两个dns看看。
    iptables部分你先确认下/etc/pptpd.conf里你的remoteip是什么网段的?那条命令里的ip地址是跟着这里的设置走的,别设错了。

  • Liu says:

    博主你好,我按照你的教程架设了一个pptp,可以拨入,但是无法用其上网,DNS解析,允许上网,都设置了,最后一条命令也输入了,求助~

  • diego says:

    朋友。我按照你这篇文章的做法做了一个VPN,在windows系统下可以用。但是在mac os下用http://www.hebine.net/blog/archives/1167.html里面介绍的方法,总是在连上VPN后立即弹出“Internet链接: 连接被通讯设备终止。请验证您的设置,然后再试一次”,请问怎么回事?

  • kDolphin says:

    加密那里放在“自动(128位或40位)”看看。

  • Liu says:

    搞了一夜,电脑终于好通过VPN上网了,但是,iPhone可以连上VPN却无法上网,Gphone则连都连不上,好神奇啊~继续求助,谢谢

  • Tony says:

    不知道pptp有限制单账户流量功能么?

  • kDolphin says:

    pptp本身肯定是没有限制流量的功能的,因为vpn本身的设计并不是用来翻墙。
    不过我看到过一些文章提到如何配合其它程序来检测控制流量,你可以搜索一下。

  • fish says:

    pptp终于连接成功。不过就是打不开网站(无论是否被封),不知问题出在哪里?我查看vpn连接窗口的常规,看到:
    “IPV4 连接: 受限的”

  • kDolphin says:

    ip获取正常吗?iptables是否运行过?dns是否设置?

  • fish says:

    ip获取正常。iptables命令也运行过。dns也设置了

  • kDolphin says:

    net.ipv4.ip_forward=1 这个设置了吗?
    如果还不行,你查看一下你的VPS是什么模式的?XEN还是openvz,我文章末尾有相关的补充内容。

  • Tianyu Chen says:

    谢谢你的文章,我现在已经配置好VPN可以上网了。
    不过有个问题,最后那条设置iptables的语句每次重启服务器后都要再打一次,否则就不能上网,不知道有什么方法解决这个问题?
    另外,我的ubuntu本来没有iptables的,那个时候连接VPN后不能上网,安装iptables并配置后才能上网。但是iptables不是防火墙吗?为什么没有的时候反而还不能上网呢?

  • kDolphin says:

    你可以把那条语句写入crontab或者写到cron.d,随便哪里的开机启动项就行。
    因为vpn本质上是为了远程加入某个局域网而存在的,所以需要iptables来建立转发规则。

  • jiehanzheng says:

    哈哈,中国的白搭。。。

    谢谢您的文章啦,正在研究

  • kDolphin says:

    lookupd -flushcache

  • hi says:

    Hi,非常感谢你的文章,设置成功。
    不过我有一个问题,我在办公室的mac电脑可以正常使用vpn,家里的mac就不行(是两台mac)。
    家里的mac表现为可以连接上vpn,可以正常解析域名(比如 g.cn 可以自动解析到 google.cn,bit.ly/aaa 可以成功变成 aaa.com)但是无法打开网页。 不过很奇怪的是,没有域名只有ip的网站可以打开,比如 1.2.3.4 可以打开,但是 1.2.3.4/bt/ 这样的就打不开了。 然后 skype 可以上。总之就是很郁闷啊。请问你见过此类情况吗?

  • kDolphin says:

    我觉得可能和dns有关,你清空本地dns缓存看看,另外手动设置下mac上的dns到8.8.8.8。

  • hi says:

    请问怎么清空本地dns?dns我已经设置到google的,同时在路由器和mac上都设置过,无用。

  • S90 says:

    本地ping得到的twitter的ip是37.61.54.158,facebook是46.82.174.68,这两个ip在vps上也是ping不通的,这是不是所谓的dns污染?

    我是上海闵行电信,用buffalo的无线路由上网。

  • S90 says:

    解决了,上述两个ip确实是在黑名单的……修改本地网络里的首选dns服务器为google的就可以了。

    谢谢海豚的教程,很受用。

  • kDolphin says:

    解决了就好,我公司用联通线路换dns都不行。

  • S90 says:

    谢谢海豚的教程,购买Linode并搭建pptp VPN成功。不过仍然有问题需要请教。

    Linode 360,Fremont,pptpd

    XP用自带网络连接工具连接VPN成功,能够连接internet,在ip38上查询ip地址显示为VPS的ip。可以访问大部分被封网站,technorati/plurk/tumblr/blogspot/picasa,但就是访问不了facebook和twitter,youtube间歇性不能访问。

    >tracert http://www.twitter.com
    1. 192.168.0.1
    2. gateway-he-li3.linode.com [64.62.190.1]
    3. gige-g4-17.core1.fmt1.he.net [72.52.92.245]
    4. 10gigabitethernet1-1.core1.pao1.he.net [66.160.158.242]

    ping全部time out,tracert命令twitter和facebook都得到相同的结果,但ssh到vps后,可以ping通www.twitter.com,得到的ip和本地终端ping到的ip不同。本地是37.61.54.158,vps上得到的ip是168.143.162.100,貌似有好几个ip,但都ping的通。

    在vps上执行
    >traceroute http://www.twitter.com
    1 gateway-he-li3.linode.com (64.62.190.1)
    2 gige-g4-17.core1.fmt1.he.net (72.52.92.245)
    3 10gigabitethernet1-1.core1.pao1.he.net (66.160.158.242)
    4 sjo-bb1-link.telia.net (213.248.86.53)
    5 verio-119529-sjo-bb1.telia.net (213.248.86.50)
    6 ae-6.r20.snjsca04.us.bb.gin.ntt.net (129.250.5.12)
    7 ae-2.r20.mlpsca01.us.bb.gin.ntt.net (129.250.5.6)
    8 mg-1.c20.mlpsca01.us.da.verio.net (129.250.28.81)

    vps上应该是能访问twitter的,但为什么我这端就断在了he.net呢?跟pptp的设置有关?尝试过opendns,现在用的是google的dns,很奇怪。不知道海豚有没有遇到这样的问题?

    • Allen says:

      这个问题应该是你VPS主机上的iptables里面默认为DROP,而且又没有设定ICMP数据包(ping和tracert用的数据包)为允许导致的。

  • kDolphin says:

    强制用128行吗?默认是128连接的。

  • logon says:

    也不行。
    window7没问题,android 2.1也没问题,iPhone也没问题,就mac os x 10.6.2不行。:(

  • logon says:

    我也遇到和这一样的情况,改变加密方式也无法解决。请问这个问题要怎样解决?谢谢。

  • […] 如何快速搭建一个VPN(pptp) […]

  • 安天下 says:

    在Vps上建VPN,debian和ubuntu有什么区别吗?

  • will says:

    没有ip怎么用???

  • 木鱼猫 says:

    在Xen上搭建成功,电脑可以正常使用,但是iPod Touch无法连接,老是显示:连接被通讯设备终止

    请问该如何解决

  • susan says:

    您好,首先谢谢您的服务.我想问我可以在公共网络里自己搭建私有的VPN吗?

    (我是租房子的,我们一栋楼用一个网络,我的本抢不过别人的网,在高峰期连QQ都不稳定,我可以不通过房东以及他人,自己建立我的VPN吗?谢谢!我对这方面很不懂,望指教,谢谢!)

  • yoyicue says:

    @kDolphin 谢谢海豚 这则教程帮助了我 改善生活 哈哈

  • yoyicue says:

    囧 没打完字 就发表了 想更正一个问题 openvz 现在也可以pptp了

  • 一零八八 says:

    /sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
    No chain/target/match by that name

Leave a Reply to hi

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).