Categories

Linux 上安装 PPTP VPN

之前也在 VPS 上安装过 VPN,可是重启后总会无法使用。今天静下心来在一台 YardVPS 的 TREE1 上重新尝试了下(Linode 主机还是拿来做 Web Server 吧),仔细研究了每一步所做的操作。总算明白到底哪里出了问题。

系统上我选用了 Ubuntu 10.10 32bit,其实任何 Linux 系统都是一样的。

  • VPS 必须是 XEN 的。此外支持 MPPE,linux 2.6.15-rc1 以上内核均已安装,执行命令看 MPPE 是否安装了:
# modprobe ppp-compress-18 && echo success
  • 安装 PPTP

在 Ubuntu 上一条命令就能安装上 PPTP:

# apt-get install pptp

安装后可以通过下面的命令来启动,停止,重启和查看 PPTP 服务

# /etc/init.d/pptpd start
# /etc/init.d/pptpd stop
# /etc/init.d/pptpd restart
# /etc/init.d/pptpd status
  • PPTP 安装完成后,编辑 /etc/pptpd.conf 文件,去掉下面两行的注释或者直接添加这两行(在文件的最后)。这一步是配置 IP 地址的范围。

后者 remoteip 是设置客户端连接到这个 VPN 获得的 IP 地址,如果想增加连接,可扩大地址范围同时注意 MAX_CONNECTIONS 的值,保证它足够大。完成后重启 pptp。

注:如果完成后连接时出现 619 错误,请尝试将 pptp.conf 中的 logwtmp 一行注释掉,即前面加上 #。

  • 用户名和密码放在 /etc/ppp/chap-secrets 中,可直接编辑,如添加用户username,密码password,在 /etc/ppp/chap-secrets添加:
username pptpd password *

添加删除用户后不需要重启pptp,用户登录时pptp会验证生效。

  • 为了让你的用户连上 VPN 后能够正常地解析域名,我们需要手动设置 DNS。编辑 /etc/ppp/options,找到 ms-dns 这一项,设置你的 DNS。这里我推荐的是 Google 最近发布的 Public DNS,原因是因为好记,速度也不错。
ms-dns 8.8.8.8
ms-dns 8.8.4.4
  • 编辑 /etc/sysctl.conf 文件,找到 "net.ipv4.ip_forward=1" 这一行,去掉前面的注释。
net.ipv4.ip_forward=1
  • 运行下面的命令让配置生效,重启 PPTP 服务
sysctl -p
/etc/init.d/pptpd restart
  • 最后开启iptables转发
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

其中eth0是网卡名,然后重启pptp,再连接就可以上外网了。之前我的问题就出现在这里。可以将这个设置放到 rc.local 或者 iptables 的设置中。

  • 到这里就可以了。但是如果碰到奇怪的问题,查看和调试的方法是这样的。

配置 PPTP 会遇到挺多问题的,像中国移动的 cmnet 就用不了 PPTP,出现 619 错误。可以打开 /etc/ppp/pptpd-options 中的 debug 和 dump 选项,然后在 /var/log/debug 和 /var/log/messages 中查看出错信息。