跳至主要内容

在基于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/

评论

此博客中的热门博文

在家用PC里体验 FreeBSD 8.1(上)

F reeBSD ( http://www.freebsd.org/ ) 是一个开源免费的操作系统,最早接触FreeBSD是约7年前在 @hplcsz 挂bbs的服务器,后来很少关注了,最近接触到 Apple 的 MacOS 和 iOS (基于FreeBSD衍生出来的操作系统)联想起FreeBSD项目,才发现它已经更新到8.1版了。 恰好家里多出一台电脑暂时没有用,于是尝试用FreeBSD 8.1配置一台适合家用的电脑(用来看看新闻灌灌水的那种),于是有了如下一篇文章。 (注:这里假设读者已经有一定的Linux/BSD基础) 首先访问 FreeBSD 项目的官方网站,下载 FreeBSD 8.1的安装镜像文件( ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.1/ ),这里提供CD版、DVD版和U盘版,考虑到我有DVD刻录机,所以下载了DVD版。 下载过程是一个漫长的等待,期间强烈推荐阅读一下官方的《FreeBSD使用手册》(中文版,以下简称《使用手册》)( http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/index.html ),如果对Linux/BSD不是很熟悉,前3章是很有必要阅读的,否则会被折腾到2012年。等待DVD镜像下载完,大概已经看到第10章了。 1、安装 FreeBSD 8.1 刻录下载回来的DVD镜像文件,从光驱启动然后选择“Quick模式”即开始安装过程。结合《使用手册》一般没有多大问题,因为这篇文章重点是如何搭建家用PC的环境,所以具体的安装过程这里就省略了。小技巧: A、 FreeBSD 必须安装在主分区,在安装之前你必须腾出一个至少10来GB的主分区。 B、 当安装问你是否安装“Ports(相当于软件商店、软件中心)”时,要选择“YES”。 C、 当安装接近完成时,程序会问你 “Would you like to browse the collection now?“,这一步是问你是否安装DVD上附带的软件,选择Yes,然后把下面这两个大块头选中,这样能避免从网络下载桌面环境的安装文件,节省时间和网络流量,减低碳排放: + X11/xorg-7.5 + gnome/gnom...

日志工具 SLF4J 的来龙去脉

J ava 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j ,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志工具,假如一个应用程序用到了两个组件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。 为了解决这个问题, Apache Commons Logging  (之前叫 Jakarta Commons Logging,JCL)粉墨登场,JCL 只提供 log 接口,具体的实现则在运行时动态寻找。这样一来组件开发者只需要针对 JCL 接口开发,而调用组件的应用程序则可以在运行时搭配自己喜好的日志实践工具。 所以即使到现在你仍会看到很多程序应用 JCL + log4j 这种搭配,不过当程序规模越来越庞大时,JCL的动态绑定并不是总能成功,具体原因大家可以 Google 一下,这里就不再赘述了。解决方法之一就是在程序部署时静态绑定指定的日志工具,这就是  SLF4J  产生的原因。 跟 JCL 一样,SLF4J 也是只提供 log 接口,具体的实现是在打包应用程序时所放入的 绑定器 (名字为 slf4j-XXX-version.jar)来决定,XXX 可以是 log4j12, jdk14, jcl, nop 等,他们实现了跟具体日志工具(比如 log4j)的绑定及代理工作。举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。 现在还有一个问题,假如你正在开发应用程序所调用的组件当中已经使用了 JCL 的,还有一些组建可能直接调用了 java.util.logging,这时你需要一个 桥接器 (名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J,所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的...

Apache Cassandra 0.7 的集群配置

跟 Hadoop/HBase 一样, Apache Cassandra 也是 NoSQL 产品中最为重要的成员之一,跟 HBase 相比,因为 Cassandra 使用了一种去中心化的模式(类似memcached集群), 使用 Cassandra 搭建 NoSQL 集群更为简单容易,特别是在 0.7 版本之后,下面简述使用 Cassandra 0.7 搭建一个集群。 @ivarptr 前提条件 a、准备3台或以上的计算机。下面假设有3台运行Linux操作系统的计算机,局域网的IP地址分别为 192.168.0.100, 192.168.0.101 和 192.168.0.102。 b、Java 1.6。 c、到 这里下载 0.7.x 版本的Cassandra 二进制发行包。 1、基本配置 挑选其中的一台机开始配置,先展开 cassandra 发行包: $ tar -zxvf apache-cassandra-$VERSION.tar.gz $ cd apache-cassandra-$VERSION 其中的 conf/cassandra.yaml 文件为主要配置文件,由于 0.7 版不再采用XML格式配置文件,如果对 YAML 格式不熟悉的话最好先到 这里 了解一下。 Cassandra 在配置文件里默认设定了几个目录: data_file_directories: /var/lib/cassandra/data commitlog_directory: /var/lib/cassandra/commitlog saved_caches_directory: /var/lib/cassandra/saved_caches data_file_directories 可以一次同时设置几个不同目录,cassandra 会自动同步所有目录。另外在日志配置文件 log4j-server.properties 也有一个默认设定日志文件的目录: log4j.appender.R.File=/var/log/cassandra/system.log 一般情况下采用默认的配置即可,除非你有特殊的数据储存要求,所以现在有两种方案:一是按照默认配置创建相关的目录,二是修改配置文件采用自己指定的目录。 下面为了简...