/

Ubuntu搭建PPTP VPN

作为Google的忠实用户,从07年开始注册Gmail账户一直使用至今,大部分搜索也是必用Google。但由于众所周知的原因,Google的服务在国内访问并不是很方便,各种翻墙工具、Google Hosts方法等等都会不定期的被封锁,最后只好自己动手,在自己的VPS服务器上搭建专用PPTP VPN,没事的时候就挂上VPN,终于不用再担心Google被封了。

先介绍背景:

服务器运行环境: Ubuntu 14.04 LTS,LAMP,使用Wordpress搭建个人网站。
需求:架设PPTP VPN科学上网浏览Google、Facebook、Twitter、Wikipedia等网站。

网上搭建VPN的教程很多,但大多都会提示无法访问。尝试了很多次,Rebuild了很多次,最后终于找到解决方法如下,无法访问的原因以及其解决方案在下方具体解释:

安装和配置PPTP

安装PPTP

sudo apt-get -y install pptpd

配置IP信息

编辑/etc/pptpd.conf,添加如下设置,其中localip为服务器地址,remoteip为将要分配给客户端的地址

localip 192.168.9.1
remoteip 192.168.9.11-200

配置DNS

编辑/etc/ppp/options.pptpd,配置DNS如下。这里是用了Google的DNS服务8.8.8.8,你也可以使用其他的DNS服务

ms-dns 8.8.8.8
ms-dns 8.8.4.4

增加路由转发

编辑/etc/sysctl.conf,搜索IP转发规则并设置如下。这里设置后可以在公网IP和刚设置的私有IP之间转发数据包以完成代理功能。

net.ipv4.ip_forward = 1

之后输入如下命令让路由转发生效:

sysctl -p

配置iptables防火墙规则

配置iptables防火墙规则这里需要分具体情况来处理,这也就是为什么很多时候我们按照其他网上教程之后仍然会碰到无法连接VPN服务器或者连接了VPN服务器之后无法浏览网页的原因。

对于仅作VPN代理的服务器设置

仅作为VPN服务器使用的情况比较简单,不需要考虑开发哪些端口屏蔽哪些端口,因为本身服务器上没有任何其他应用需要使用特定的端口。所以只需要设置NAT转发就可以了。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables-save

为了确保每次重启服务器之后NAT转发规则都能生效,可以编辑/etc/rc.local,设置如下

#!/bin/sh -e
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
exit 0

注意:其中的eth0需要根据服务器网卡具体设置,输入ifconfig可以查看服务器网卡信息。

对于既要运行网站又要使用VPN代理的情况

由于VPS主要的目的是架设自己的网站,所以之前设置了iptables防火墙规则禁止了大部分的端口,恰恰是这些端口的禁用会导致VPN连接、转发规则无法正常实现。

首先新建防火墙规则并保存为/etc/iptables.firewall.rules,具体设置规则如下:

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
# 允许所有本地连接
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
# 允许入站连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
# 允许所有类型出站数据
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
# 允许HTTP或HTTPS连接
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
# 允许SSH连接
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
# 允许ping
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#  Log iptables denied calls
# 记录iptables拒绝的请求
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Ebable PPTP ports
# 允许PPTP端口
-A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
-A INPUT -i eth0 -p gre -j ACCEPT
-A FORWARD -i ppp+ -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o ppp+ -j ACCEPT

#  Drop all other inbound - default deny unless explicitly allowed policy
# 拒绝其他连接请求
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

*nat
# 设置NAT转发规则
-A POSTROUTING -o eth0 -j MASQUERADE

COMMIT

对比一些教程上所推荐的为网站服务器设置防火墙规则,这里多出来的部分主要是新增了允许PPTP端口和设置NAT转发规则,只是因为架设网站的服务器我们通常会禁用不常用端口,包括了PPTP VPN需要用到的端口。

之后保存iptables规则

iptables-restore < /etc/iptables.firewall.rules

配置开机运行PPTP

cat >/etc/network/if-pre-up.d/firewall<<eof
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules
eof

新建VPN用户账户

以上的步骤结束后,基本上创建PPTP VPN已经结束,现在需要的就是为用户创建账号和密码。用户和密码保存在/etc/ppp/chap-secrets文件中,编辑文件并添加用户名和密码如下所示:

username pptpd password *

所有设置结束之后,重启PPTP

service pptpd restart

也别忘了重启服务器试试是否仍然有效:

service apache2 restart

到此,服务器端的PPTP VPN服务已经架设完成。现在可以打开你的VPN客户端,输入账户就可以科学上网了,这时候再打开Google、Facebook、Twitter、Wikipedia,是否有出狱的感觉?

如果需要安装L2TP VPN估计方法也差不多,最重要的是确保iptables规则不要冲突。

以上教程的一键安装脚本Github地址如下:https://github.com/zp1214/VPS/blob/master/pptp.sh

2 thoughts
  1. 干货

    1. 怕以后哪天自己也给忘了所以写详细一点纪录下来

Leave a Reply

Your email address will not be published. Required fields are marked *