跳至主要内容

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

评论

此博客中的热门博文

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 一般情况下采用默认的配置即可,除非你有特殊的数据储存要求,所以现在有两种方案:一是按照默认配置创建相关的目录,二是修改配置文件采用自己指定的目录。 下面为了简...

日志工具 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 又会根据绑定器把日志交给具体的...

如何在应用程序里使用 Hadoop HDFS ——分布式计算Hadoop配置及实践(二)

上一篇 讲到 Hadoop 的配置,我们在搭建分布式计算系统的同时也已经搭建好分布式储存系统了。下面简述如何在应用程序(可以是 Console Application,也可以是 Web Application)调用 Hadoop HDFS。 我们除了可以使用 Hadoop 命令行 管理里面的文件和目录之外,也可以通过 Hadoop API 管理。 1、先创建一个Java Application (Console) 程序,然后引用 hadoop-core-0.20.2.jar ,因为这个包同时引用非常多其他包,所以最好使用 Maven 引用这个包。 2、在项目根目录创建 core-site.xml : <?xml version="1.0"?> <configuration> <property>   <name>fs.default.name</name>   <value>hdfs://192.168.0.10:9000</value> </property> </configuration> 程序会自动寻找 CLASS_PATH 里面的 core-site.xml 文件,假如缺少这个文件的话,程序会使用本地文件系统。 3、创建 Helloworld.java: import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HelloWorld { public static void main(String[] args) { try { HelloWorld helloWorld = new He...