跳至主要内容

在基于Xen的VPS(CentOS 5)下面使用pptpd搭建VPN服务

目前比较常见的虚拟服务器(VPS)大部分都建立于 OpenVZ 或者 Xen 虚拟平台之上,下面记录一下在基于 Xen 的 VPS 里面使用  pptpd 搭建 VPN 的方法。注:操作系统是CentOS 5

1、先安装 ppp 和 iptables,后者一般系统已经安装,不过为了保证下面的步骤能成功,用yum测试一下也无妨。


#yum install ppp
#yum install iptables

2、下载 pptpd
这里采用源码的安装方式,进入当前用户目录
#cd ~
 
从 Poptop 项目(地址:http://sourceforge.net/projects/poptop/files/
下载 pptpd-1.3.4.tar.gz
#wget http://...(具体地址)...
具体的地址应该到上面的地址点击下载链接然后复制之。 

3、编译 pptpd
先解压缩并进入源码目录 
#tar -zxvf pptpd-1.3.4.tar.gz
#cd pptpd-1.3.4
然后是很常规的编译操作
#./configure
#make
#make install
4、必要的配置文件
复制几个必要的配置文件到相应的目录
#cp samples/pptpd.conf /etc/
#cp samples/options.pptpd /etc/ppp/
#cp samples/chap-secrets /etc/ppp/
5、编辑 /etc/pptpd.conf 
去除这行的注释:ppp /usr/sbin/pppd
配置VPN服务端IP和VPN客户端的IP,这里只要让客户端IP跟你现在看这篇文章时的电脑IP不在
同一个网段就可以了,我的配置如下:
localip 192.168.8.1
remoteip 192.168.8.100-200
这两行可以照抄,如果你的电脑IP刚好是8段的,那么就把上面的数字8通通改成9吧 :)
另外由于源码包附带的一个插件版本有问题,还要注释掉插件 logwtmp,在前面加个井号就是了。
6、编辑 /etc/ppp/chap-secrets
这个文件是用来配置客户端连接时所使用的用户名和密码的,用明文书写即可,比如创建一个登录名和密码
都是“boy”的帐号,那么添加如下一行
boy  pptpd boy "*"
最后一个星号表示接受任何IP的客户端连接。 
7、编辑 /etc/ppp/options.pptpd
这个文件不作任何修改也可以,比较常见的是指定DNS解析服务器,用于防止当地的DNS污染。
修改这两行 ms-dns 10.0.0.1 和 ms-dns 10.0.0.2
为 ms-dns 8.8.8.8 和 ms-dns 208.67.222.222
前者是google的DNS服务器,后者是OpenDNS的服务器。
 
到这一步实际上 pptpd 的VPN服务已经安装配置好,只要运行
#/usr/local/sbin/pptpd 
就启动 pptpd 程序了,可以用 
#ps -e |grep pptpd
确认程序是否正在运行,可以用
#netstat -na |grep 1723
确认 pptpd 已经打开网络端口准备接受客户端连接了。
不过现在客户端连接上来一般还不能浏览网页,还需继续以下步骤。
 
8、允许IP转发
编辑 /etc/sysctl.conf,找到 “net.ipv4.ip_forward = 1” 这一行,如果前面有注释则删除注释,
如果最后一个数字不是1,则改为1。
运行下面命令让它生效:
#sysctl -p

9、在 iptables 里添加 nat 转发
#service iptables start
#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.8.0/24 -j MASQUERADE
#service iptables save

好了,现在应该可以使用客户机测试 VPN 连接了。
 
最后,如果你对 logwtmp 这个插件很纠结,那么照下面的步骤启用它:
1、修改源码当中的 ~/pptpd-1.3.4/plugins/patchlevel.h 的版本信息
#cd ~/pptpd-1.3.4/plugins 

将 patchlevel.h 的 #define VERSION "2.4.3" 改为 "2.4.4"
重新编译
#make
 
2、复制 pptpd-logwtmp.so 到相应的目录
#mkdir /usr/lib/pptpd/
#cp pptpd-logwtmp.so /usr/lib/pptpd/pptpd-logwtmp.so
3、修改 /etc/pptpd.conf
把上面步骤5禁用插件 logwtmp 的那行注释去除
4、重新运行 pptpd
#pkill pptpd 
#/usr/local/sbin/pptpd


这4步如果不做的话,会在 /var/log/message 得到如下的错误:
Plugin /usr/lib/pptpd/pptpd-logwtmp.so is for pppd version 2.4.3, this is 2.4.4
或者
Couldn't load plugin /usr/lib/pptpd/pptpd-logwtmp.so

最后,Poptop 的官方说明文档有兴趣或者安装失败则应该看看
http://poptop.sourceforge.net/dox/

评论

此博客中的热门博文

使用 Sendmail 在 CentOS 5.5 架设邮件服务器

假如你要架设一个有会员管理的网站,可能会遇到诸如“我忘记密码了”、“你有一年没来过了,有空过来瞧瞧吧”这类的问题,一般这类问题都是使用邮件解决的,比如发送一个重置密码的链接或者发送一封提醒邮件。
发送邮件的方法有很多,比如使用外面专业SMTP中继服务(一般收费惊人)、使用类似 Google Apps (Free) 的免费邮件发送服务(限制比较多,比如一天不能超过500封等),而比较廉价且彻底的解决方法应该是在自己的服务器上搭建邮件服务器(SMTP服务器)。假如你使用的是 Linux 系统,那么一般邮件服务器早已安装好了,比如 CentOS(RedHat、Fedora等)内置的 Sendmail 服务程序,你只需设置几下即可使用。

1、域名的设置

首先你要设置域名DNS的MX记录和SPF记录,一般我们只要有如下几条DNS记录就可以了:

记录类型    主机名   目标
------------------------------------
A                  @           123.123.123.123 (这里应该是你的服务器IP)
CNAME      www       your-domain.com
CNAME      SMTP      your-domain.com
MX              @            smtp.your-domain.com
TXT              @            v=spf1 a mx ~all

MX记录是邮件服务器必须依赖的,而TXT(SPF)是用来防止自己的邮件服务器发送的邮件不被当成垃圾邮件(spam email),假如不增加这条记录的话对方邮箱服务要么把你的邮件直接丢弃、要么塞到垃圾邮件文件夹里,所以这条记录也是必不可少的,更多的SPF设置方法参阅这里:http://www.openspf.org/

2、设置 Sendmail

我现在使用的 Sendmail 版本是 8.14,设置方法已经变得非常简单了,首先确保你系统已经有 sendmail 及其相关服务了:

#yum install sendmail  (这个必须的)
#yum install sendmail-cf
#yum install sendmail-devel
#yum install sendmail-mi…

一个人用的 Git

Git 是目前比较时髦的版本控制系统,虽然 linux 内核源码是使用它来管理的,但系统非常小巧而且使用简单,比起 svn (subversion) 系统,git 有一个明显的优势就是在不联网的情况下也可以查阅或者回滚历史版本,有时带着笔记本出外工作这个功能是非常有用的。下面介绍一下用 Git 管理个人电脑上的个人文档文件。(@ivarptr)

这篇文章有几个假设前提:
a、你从事的工作有很多文档需要书写或者整理,而且文档篇幅比较大需要经常修修改改,有时还可能需要回档(即恢复到历史的某个版本)。
b、你的文档具有关联性的,比如一个项目策划书,有多份文本文档、电子表格、图片,希望平时能整体记录一个版本(快照)。
c、你有多台工作用的电脑,为了简单起见,下文假设只有两台电脑。
d、你有一台能够在互联网上访问的服务器,最好是跑 linux 系统而且有 ssh 登录权限。
e、为了简明,省略了安全权限设置和Git最为突出的特性“分支”。

1、几个必须厘清的概念
a、svn只有一个远程仓库集中管理所有的版本,而Git分有“本地仓库”和“远程仓库”之分,在提交你的最新文档过程中,需要两层提交,一次是提交到本地仓库,然后才可以提交到远程仓库。
b、svn的远程仓库保存的总是全局最新的版本,各个支点(小组成员)必须对此仓库负责。而Git则没有集中远程仓库之说,理论上每个人的地位是平等的,同时每个人的本地仓库也可以配置为给他人访问的“远程仓库”。不过对于个人或者一个小团队来说,为了简便起见我们通常会协商好让某个远程服务器上的仓库保持最新并且集中管理,这点跟Svn类似。
c、svn的每次提交会产生一个递增的数字作为版本号码,而git每次提交会产生一个“快照”,快照不是用一个递增的数字作为名称的,而是一个hash值,当然用一个hash值来呼叫某一次提交也太累赘了,所以在实际应用过程中我们往往只用hash指的头4~6位就可以了(类似一个人的昵称)。

2、在服务器上创建 Git 仓库
关于在 linux 系统里如何安装 Git 程序可以参考这篇《在CentOS 5.5里安装Git以及搭建Git服务器最简单教程》,要记住 Git 程序是不区分服务端或客户端的。

首先我们要创建一个Git仓库,使用 ssh 登录到你的服务器,在用户home文件夹里创建一个文件夹,为了容易识别,最好在文件夹名字后面加一…