架设自己的VPN和WEB服务器

现在中国共产党对互联网的管制越发的严厉. 近一年来google更是被完全屏蔽, gmail的邮箱也是常常无法登陆. 个人在国内的网站必须去工信部备案, 否则域名不给解析. 如我这样偶尔需要翻墙查查资料, 又喜欢折腾个人网站的, 买个国外的VPS主机架设翻墙的VPN服务器和和个人网站WEB服务器是最好的解决方案。

Windows, Mac OSX和Linux都支持pptp和l2tp这两种VPN协议. 但是国内很多运营商都屏蔽了pptp, 所以VPN服务器还是使用l2tp适用. 我的VPS主机系统安装的是Ubuntu 12.04, 这个系统下面安装和配置l2tp不是很困难. 首先是安装openswan:

sudo apt-get install openswan

编辑/etc/ipsec.conf, 在该文件后面追加如下内容:

conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT
 
conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        dpddelay=10
        dpdtimeout=90
        dpdaction=clear
        ikelifetime=8h
        keylife=1h
        type=transport
        left=yourSeverIP
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any

编辑/etc/ipsec.secrets, 在该文件后面追加如下内容:

yourServerIP %any:   PSK "yourSharedKey"

接下来安装xl2tpd:

sudo apt-get install xl2tpd

编辑/etc/xl2tpd/xl2tpd.conf, 在该文件后面追加如下内容:

[global]
ipsec saref = yes
 
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

ip range设置成A, B和C三类私有IP地址都行, ip local同样. 然后创建文件/etc/ppp/options.xl2tpd, 添加如下内容:

require-mschap-v2
ms-dns 8.8.8.8
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

编辑文件/etc/ppp/chap-secrets, 在该文件后面追加如下内容:

"username" l2tpd "password" *

开启Linux内核ip包转发功能:

sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sysctl -p

最后编辑/etc/rc.local, 添加如下内容:

for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356

重启主机, 输入如下命令:

sudo ipsec verify

如果没有error信息, l2tpd VPN服务就架设成功.

VPS的CPU和内存资源有限, WEB服务器用nginx性能会好一些. 个人网站用的CMS, 比如说WordPressJoomla!, 都还会用到php和mySQL(也就是Linux + Nginx + MySQL + PHP/Perl/Python, LNMP), 还需要安装相应的模块:

sudo apt-get install nginx
sudo apt-get install php5-fpm #fastcgi
sudo apt-get install mysql-server
sudo apt-get install php5-mysql
sudo apt-get install php5-gd #GD模块, CMS的某些gallery插件会用到

编辑/etc/nginx/sites-enabled/default, 在server段里找到location ~ \.php$, 做如下修改:

location ~ \.php$ {
#       fastcgi_split_path_info ^(.+\.php)(/.+)$;
#       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
#       # With php5-cgi alone:
#       fastcgi_pass 127.0.0.1:9000;
#       # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

编辑/etc/php5/fpm/pool.d/www.conf, 找到listen, listen.owner, listen.group和listen.mode等字段, 做如下修改:

;listen = 127.0.0.1:9000 #注释
listen = /var/run/php5-fpm.sock #监听unix socket
 
...
 
listen.owner = www-data #去掉注释
listen.group = www-data #去掉注释
listen.mode = 0660      #去掉注释

重启服nginx和php5-fpm. 创建文件/usr/share/nginx/www/index.php, 内容为:

<?php
    phpinfo();
?>

如果能够看到phpinfo的输出页面, 就表明LNMP安装配置成功.

有些时候希望一台VPS上创建多个不同域名的网站, 可以以/etc/nginx/sites-available/default为模板, 在server段的server_name后面添加域名, root后面添加站点的根目录, 在/etc/nginx/sites-enabled做符号链接即可.

以上架设配置虽然是在Ubuntu 12.04下实现, 应该也能通用于其他的Linux发行版, 可能出现的问题最多是配置文件的目录有所不同. 但是, Ubuntu 14.04下的L2TP VPN似乎按照上面描述的方式架设不成功, 在ipsec verify时会出现错误.

此条目发表在计算机与网络技术分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.