环境说明
面对天朝强大的GFW,我们能做的只有翻墙,下面列举安装翻墙软件的环境.
- Linode VPS
- CentOS 5.6
- pptpd 1.3.4
因为pptpd需要MPPE的支持,所以首先检测系统是否符已经编译了MPPE,执行如下shell,如果返回CONFIG_PPP_MPPE=y表示可以安装pptpd,如果没有请更换版本.
1 |
zgrep MPPE /proc/config.gz |
安装ppp
由于pptpd需要iptables支持,所以需要安装iptables.如果您的服务器上已经安装了iptables,那么只安装pptpd.
1 |
yum install -y ppp iptables |
如果安装结果为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
1 |
vim /etc/pptpd.conf |
找到
1 2 3 4 |
#localip 192.168.0.1 #remoteip 192.168.0.234-238,192.168.0.245 |
修改为
1 2 3 4 |
localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245 |
注意,此处的remoteip指定的IP范围是用来给远程连接使用的,如果您远程访问vpn,vpn就会在remoteip范围内分配一个ip地址给你.localip的值直接影响到后面要说的iptables转发规则的编写,所以建议不要随意改动.
1 |
vim /etc/ppp/options.pptpd |
找到
1 2 3 4 |
#ms-dns 10.0.0.1 #ms-dns 10.0.0.2 |
修改为
1 2 3 4 |
ms-dns 8.8.8.8 ms-dns 8.8.4.4 |
设置使用pptpd账户
1 |
vim /etc/ppp/chap-secrets |
根据您的需要添加账号,每行一个.
规则:用户名 pptpd 密码 ip,每一项之间用空格分开,如
1 2 3 4 5 |
# Secrets for authentication using CHAP # client server secret IP addresses username pptpd passwd * |
修改内核设置
1 2 3 |
vim /etc/sysctl.conf |
找到
1 2 3 |
net.ipv4.ip_forward = 0 |
修改为
1 2 3 |
net.ipv4.ip_forward = 1 |
找到
1 2 3 |
net.ipv4.tcp_syncookies = 1 |
修改为
1 2 3 |
#net.ipv4.tcp_syncookies = 1 |
执行以下命令使修改后的内核生效
1 |
sysctl -p |
添加iptables转发规则
适合于OpenVZ架构的VPS,12.34.56.78为您VPS的公网IP地址
1 |
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 12.34.56.78 |
适合于XEN架构的VPS
1 |
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE |
Linode采用的是XEN架构,我们采用iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE.
添加好转发规则后保存一下并重启iptables.
1 2 3 4 |
/etc/init.d/iptables save /etc/init.d/iptables restart |
此时会出现以下shell
1 2 3 4 5 6 7 8 |
[root@benben ~]# service iptables start Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: security raw nat mangle fi[FAILED] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] Loading additional iptables modules: ip_conntrack_netbios_n[FAILED] |
这两个问题主要是iptables版本和内核对不上导致的,据我所知,linode使用的是自己修改过的内核.
第一个问题的修复需要在/etc/init.d/iptables,找到set_policy函数,添加一个security选项,如下123-128行.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
120 for i in $tables; do 121 echo -n "$i " 122 case "$i" in 123 security) 124 $IPTABLES -t security -P INPUT $policy \ 125 && $IPTABLES -t security -P OUTPUT $policy \ 126 && $IPTABLES -t security -P FORWARD $policy \ 127 || let ret+=1 128 ;; 129 raw) 130 $IPTABLES -t raw -P PREROUTING $policy \ 131 && $IPTABLES -t raw -P OUTPUT $policy \ 132 || let ret+=1 133 ;; |
第二个问题的修复需要修改/etc/sysconfig/iptables-config配置,关闭ip_conntrack_netbios_ns模块,如下
1 2 3 4 |
IPTABLES_MODULES="" IPTABLES_MODULES_UNLOAD="no" |
重新启动服务
1 2 3 4 5 6 7 8 9 |
[root@benben ~]# service pptpd start Starting pptpd: [ OK ] [root@benben ~]# service iptables start Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: security raw nat mangle fi[ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] |
最后重启pptpd服务
1 2 3 4 |
service pptpd stop service pptpd start |
设置pptp和iptables随系统启动
1 2 3 4 |
chkconfig pptpd on chkconfig iptables on |
提示,如果你想节约流量,最好手动开启与关闭你的vpn服务,而不是让它一直开着.
接下来,即可在使用vpn服务了,但在使用时还会遇到一些网站打不开的问题.
此处我们只是设置一下iptables.
1 2 3 4 5 |
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356 /etc/init.d/iptables save /etc/init.d/iptables restart |
至此,vpn服务安装全部完成,让GFW见鬼去吧.
建好之后如何测试呢?
@codeo4 直接在shell中输入service pptpd start,然后用你的vpn工具连接即可~
感谢!非常详细,已经配置成功啦!
额,看着教程一步步做完,619错误,端口关闭
请问如何解决啊~
@lostnomore 619错误应该是连接问题,你可以通过netstat -npl查看pptpd是否已经启动,然后再排查~
添加多个账号有问题,只有第一个账号可以用,其他账号可以连接,但无法翻墙访问,奇怪了
@nicky 应该没有问题的,我已经给几个朋友都增加了账号,但加完以后需要重启服务~
&& $IPTABLES -t security -P OUTPUT $policy \
&& $IPTABLES -t security -P FORWARD $policy \
此处有错,应该是下面这样:
&& $IPTABLES -t security -P OUTPUT $policy \
&& $IPTABLES -t security -P FORWARD $policy \
谢谢,加代码时把&也转义了~已经更新~