如何快速搭建一个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

Comments

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

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

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

我们家mac也可以??

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

哈哈,中国的白搭。。。

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

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

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

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

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

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

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

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

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

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

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

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来建立转发规则。

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

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

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上都设置过,无用。

lookupd -flushcache

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote>
  • Lines and paragraphs break automatically.

More information about formatting options

Syndicate content