如何快速搭建一个VPN(pptp)
这是一个简短的教程,目的是为了快速搭建一个可用的VPN,本文并不涉及有关VPN的正常使用内容。本简短教程基于以下硬件条件:
- 一台安装了Debian GNU/Linux 5.0的VPS。
- 当然理论上所有可以安装pptpd包的*nix系统都可以作为主机,教程中安装方式是基于Debian的apt-get命令,其他发行版请自行对照使用。
 
- 这台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)”
- 
				我有些废话你没仔细看,确实谁家的机器都可以做vpn,但是物理位置很重要,在国内的机器白搭。 
- 
				是啊,哈哈,在国内搭了也白搭·· 
- 
				pptp 配置确实方便,但很容易被各种设备卡住,基于 IPSEC 或是 OpenVPN 的解决方案好一点儿,希望未来能看到这样的教程 :) 
- 
				就是, 谁家都可以建VPN, 
 但是你用来翻墙就得找好位置了,
 不然你连来连去,还是在一个院子里来回折腾.
- 
				我重启了一下VPS,重启了一下PPTP,又设置了一下转发规则才生效。真是不容易。我现在又有另一个问题就是能不能设置每个IP的下行速度呢。 
- 
				好像可以用tc来限制,你可以在Google上查一下,我记得看到过类似的文章。 
- 
				请问,可不可以设置分配到的每个IP的下行速度。 
- 
				收到,我研究下在centos下怎么搭建VPN 
- 
				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这句话根本没有起作用 
- 
				允许转发这一步改完之后,要用下面命令才能生效的。在这一步我卡了好久。 sysctl -p 
- 
				既然iPhone能连上,最起码说明pptpd是工作了,Gphone可能是设置的问题,你可以注意一下有关加密部分的设置。 
 连上不能上网,一般就是ms-dns和iptables设置。
 ms-dns比较容易确认,顶多你换两个dns看看。
 iptables部分你先确认下/etc/pptpd.conf里你的remoteip是什么网段的?那条命令里的ip地址是跟着这里的设置走的,别设错了。
- 
				博主你好,我按照你的教程架设了一个pptp,可以拨入,但是无法用其上网,DNS解析,允许上网,都设置了,最后一条命令也输入了,求助~ 
- 
				朋友。我按照你这篇文章的做法做了一个VPN,在windows系统下可以用。但是在mac os下用http://www.hebine.net/blog/archives/1167.html里面介绍的方法,总是在连上VPN后立即弹出“Internet链接: 连接被通讯设备终止。请验证您的设置,然后再试一次”,请问怎么回事? 
- 
				加密那里放在“自动(128位或40位)”看看。 
- 
				搞了一夜,电脑终于好通过VPN上网了,但是,iPhone可以连上VPN却无法上网,Gphone则连都连不上,好神奇啊~继续求助,谢谢 
- 
				不知道pptp有限制单账户流量功能么? 
- 
				pptp本身肯定是没有限制流量的功能的,因为vpn本身的设计并不是用来翻墙。 
 不过我看到过一些文章提到如何配合其它程序来检测控制流量,你可以搜索一下。
- 
				pptp终于连接成功。不过就是打不开网站(无论是否被封),不知问题出在哪里?我查看vpn连接窗口的常规,看到: 
 “IPV4 连接: 受限的”
- 
				ip获取正常吗?iptables是否运行过?dns是否设置? 
- 
				ip获取正常。iptables命令也运行过。dns也设置了 
- 
				net.ipv4.ip_forward=1 这个设置了吗? 
 如果还不行,你查看一下你的VPS是什么模式的?XEN还是openvz,我文章末尾有相关的补充内容。
- 
				谢谢你的文章,我现在已经配置好VPN可以上网了。 
 不过有个问题,最后那条设置iptables的语句每次重启服务器后都要再打一次,否则就不能上网,不知道有什么方法解决这个问题?
 另外,我的ubuntu本来没有iptables的,那个时候连接VPN后不能上网,安装iptables并配置后才能上网。但是iptables不是防火墙吗?为什么没有的时候反而还不能上网呢?
- 
				你可以把那条语句写入crontab或者写到cron.d,随便哪里的开机启动项就行。 
 因为vpn本质上是为了远程加入某个局域网而存在的,所以需要iptables来建立转发规则。
- 
				哈哈,中国的白搭。。。 谢谢您的文章啦,正在研究 
- 
				lookupd -flushcache 
- 
				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 可以上。总之就是很郁闷啊。请问你见过此类情况吗?
- 
				我觉得可能和dns有关,你清空本地dns缓存看看,另外手动设置下mac上的dns到8.8.8.8。 
- 
				请问怎么清空本地dns?dns我已经设置到google的,同时在路由器和mac上都设置过,无用。 
- 
				本地ping得到的twitter的ip是37.61.54.158,facebook是46.82.174.68,这两个ip在vps上也是ping不通的,这是不是所谓的dns污染? 我是上海闵行电信,用buffalo的无线路由上网。 
- 
				解决了,上述两个ip确实是在黑名单的……修改本地网络里的首选dns服务器为google的就可以了。 谢谢海豚的教程,很受用。 
- 
				解决了就好,我公司用联通线路换dns都不行。 
- 
				谢谢海豚的教程,购买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,很奇怪。不知道海豚有没有遇到这样的问题? - 
				这个问题应该是你VPS主机上的iptables里面默认为DROP,而且又没有设定ICMP数据包(ping和tracert用的数据包)为允许导致的。 
 
- 
				
- 
				强制用128行吗?默认是128连接的。 
- 
				也不行。 
 window7没问题,android 2.1也没问题,iPhone也没问题,就mac os x 10.6.2不行。:(
- 
				我也遇到和这一样的情况,改变加密方式也无法解决。请问这个问题要怎样解决?谢谢。 
- 
				[…] 如何快速搭建一个VPN(pptp) […] 
- 
				在Vps上建VPN,debian和ubuntu有什么区别吗? 
- 
				没有ip怎么用??? 
- 
				在Xen上搭建成功,电脑可以正常使用,但是iPod Touch无法连接,老是显示:连接被通讯设备终止 请问该如何解决 
- 
				您好,首先谢谢您的服务.我想问我可以在公共网络里自己搭建私有的VPN吗? (我是租房子的,我们一栋楼用一个网络,我的本抢不过别人的网,在高峰期连QQ都不稳定,我可以不通过房东以及他人,自己建立我的VPN吗?谢谢!我对这方面很不懂,望指教,谢谢!) 
- 
				@kDolphin 谢谢海豚 这则教程帮助了我 改善生活 哈哈 
- 
				囧 没打完字 就发表了 想更正一个问题 openvz 现在也可以pptp了 
- 
				/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE 
 No chain/target/match by that name
按你这么说,谁家的机器只要能上网都可以自己搞vpn?
那不就是说,以后人人都可以自己搞vpn,都可以随意翻墙了?还不用四处找free vpn?
我们家mac也可以??