Linode安装VPN

环境说明

面对天朝强大的GFW,我们能做的只有翻墙,下面列举安装翻墙软件的环境.

  • Linode VPS
  • CentOS 5.6
  • pptpd 1.3.4

因为pptpd需要MPPE的支持,所以首先检测系统是否符已经编译了MPPE,执行如下shell,如果返回CONFIG_PPP_MPPE=y表示可以安装pptpd,如果没有请更换版本.

安装ppp

由于pptpd需要iptables支持,所以需要安装iptables.如果您的服务器上已经安装了iptables,那么只安装pptpd.

如果安装结果为Complete则说明安装成功.

安装pptpd

由于pptp没有存放在CentOS的源中,所以用yum命令安装返回的是找不到安装包.
安装pptp需要使用rpm命令直接从网站上下载并安装,这里要注意的是,pptp分为32bit版和64bit版,大家可以根据需要下载.
32 bit rpm -ivh http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm
64 bit rpm -ivh http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm

配置pptp

找到

修改为

注意,此处的remoteip指定的IP范围是用来给远程连接使用的,如果您远程访问vpn,vpn就会在remoteip范围内分配一个ip地址给你.localip的值直接影响到后面要说的iptables转发规则的编写,所以建议不要随意改动.

找到

修改为

设置使用pptpd账户

根据您的需要添加账号,每行一个.
规则:用户名 pptpd 密码 ip,每一项之间用空格分开,如

修改内核设置

找到

修改为

找到

修改为

执行以下命令使修改后的内核生效

添加iptables转发规则
适合于OpenVZ架构的VPS,12.34.56.78为您VPS的公网IP地址

适合于XEN架构的VPS

Linode采用的是XEN架构,我们采用iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE.
添加好转发规则后保存一下并重启iptables.

此时会出现以下shell

这两个问题主要是iptables版本和内核对不上导致的,据我所知,linode使用的是自己修改过的内核.
第一个问题的修复需要在/etc/init.d/iptables,找到set_policy函数,添加一个security选项,如下123-128行.

第二个问题的修复需要修改/etc/sysconfig/iptables-config配置,关闭ip_conntrack_netbios_ns模块,如下

重新启动服务

最后重启pptpd服务

设置pptp和iptables随系统启动

提示,如果你想节约流量,最好手动开启与关闭你的vpn服务,而不是让它一直开着.
接下来,即可在使用vpn服务了,但在使用时还会遇到一些网站打不开的问题.
此处我们只是设置一下iptables.

至此,vpn服务安装全部完成,让GFW见鬼去吧.

发表评论(已有 9 条评论)

设置头像

*

:wink: :twisted: :smile: :sleep: :shock: :sad: :roll: :razz: :oops: :neutral: :mad: :grin: :evil: :eek: :cry: :cool:

  1. codeo4 说:

    建好之后如何测试呢?

  2. 阿土笨笨 说:

    @codeo4 直接在shell中输入service pptpd start,然后用你的vpn工具连接即可~

  3. diligentpig 说:

    感谢!非常详细,已经配置成功啦!

  4. lostnomore 说:

    额,看着教程一步步做完,619错误,端口关闭
    请问如何解决啊~

    • 阿土笨笨 说:

      @lostnomore 619错误应该是连接问题,你可以通过netstat -npl查看pptpd是否已经启动,然后再排查~

  5. nicky 说:

    添加多个账号有问题,只有第一个账号可以用,其他账号可以连接,但无法翻墙访问,奇怪了

    • 阿土笨笨 说:

      @nicky 应该没有问题的,我已经给几个朋友都增加了账号,但加完以后需要重启服务~

  6. 奥莱电影 说:

    && $IPTABLES -t security -P OUTPUT $policy \
    && $IPTABLES -t security -P FORWARD $policy \
    此处有错,应该是下面这样:
    && $IPTABLES -t security -P OUTPUT $policy \
    && $IPTABLES -t security -P FORWARD $policy \

    • 阿土笨笨 说:

      谢谢,加代码时把&也转义了~已经更新~