如何在 VPS 上搭建 VPN

参考: http://www.jianshu.com/p/2f51144c35c9

使用情况
服务器购买后,安装 CentOS7,因为以下教程都是基于 CentOS7 的,我建议安装 Centos 7 x86_64 的版本,安装新的 OS 后,搬瓦工会告诉你 SSH 的端口和 root 的密码,这些是无法自定义的,要记住了。如果忘记了 root 密码,可以使用搬瓦工提供的在线SSH登录来重置 root 密码。我是直接使用 ssh 登录来配置 VPS ,Mac 下直接使用终端就好,win 下自行寻找一个 ssh 工具就好。

登录 ssh 的命令:

$ ssh -p vps端口号 [email protected] 地址
登录上以后就相当于在本地操作一样了,你可以使用各种Linux命令来操作了

配置防火墙
如果 SSH 无法登录,那说明防火墙关闭了 SSH 端口,需要通过在线 SSH 登录进去关闭防火墙重新配置

清除防火墙配置
$ iptables -F
清除 iptabels 所有表项,同时nat设置也没了,但是我们后续的脚本里会配置的,不用担心。如果 SSH 登录正常就不用管防火墙。
P.S. 这一步很重要,所以务必执行此命令。

安装 firewalld
$ yum install firewalld firewall-config
$ systemctl start firewalld
P.S. 我在安装完 firewalld 之后然后启动服务的时候一直显示失败,然后重启了一遍服务器就可以正常的启动 firewalld 服务了,
有类似情况的朋友可以重启一下服务器

修改 SSH 端口
$ vi /usr/lib/firewalld/services/ssh.xml
会出现一下的内容

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>
将 port="22",修改成搬瓦工提供给你的端口号,然后 reload firewalld 就 OK

vi 的命令: 按 "i" 是编辑模式,编辑后按 "esc" 退出编辑模式,然后按 Shift 输入 ":wq" 保存退出vi.

$ firewall-cmd --permanent --add-service=ssh
$ firewall-cmd --reload
OK,现在准备工作都已就绪,安装了源,安装配置了防火墙,下一步开始搭建服务器了。
P.S. 如果使用 firewall-cmd 命令显示 FirewallD is not running ,请重启服务器可以解决此问题。

搭建 Shadowsocks 服务
Shadowsocks 感觉是目前最稳定,简单,方便的搭建 VPN 的服务

安装组件
$ yum install m2crypto python-setuptools
$ easy_install pip
$ pip install shadowsocks
安装时部分组件需要输入 Y 确认。小内存 VPS 可以分别安装组件。

安装完成后配置服务器参数
$ vi /etc/shadowsocks.json
写入如下配置:

{
"server":"0.0.0.0",服务器ip地址
"server_port":443,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"mypassword",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false,
"workers": 1
}
将上面的 mypassword 替换成你的密码, server_port 也是可以修改的,例如 443 是 Shadowsocks 客户端默认的端口号

如果需要修改端口,需要在防火墙里打开响应的端口,用 firewalld 操作就比较简单了

$ vi /usr/lib/firewalld/services/ss.xml
下面代码粘贴到里面

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SS</short>
<description>Shadowsocks port
</description>
<port protocol="tcp" port="443"/>
</service>
port 可自定义,但是需要跟上面的 server_port 对应起来,保存退出,然后重启 firewalld 服务

$ firewall-cmd --permanent --add-service=ss
$ firewall-cmd --reload
运行命令,启动 Shadowsocks 服务
运行下面的命令

$ ssserver -c /etc/shadowsocks.json
至此shadowsocks搭建完成,shadowsocks已经可以使用,如果你没有过高的要求,下面的步骤可以省略,下面是后台运行 Shadowsocks 的步骤。

安装 supervisor 实现后台运行
运行一下命令下载 supervisor

$ easy_install supervisor
然后创建配置文件

$ echo_supervisord_conf > /etc/supervisord.conf
修改配置文件

$ vi /etc/supervisord.conf
在文件末尾添加

[program:ssserver]
command = ssserver -c /etc/shadowsocks.json
autostart=true
autorestart=true
startsecs=3
设置 supervisord 开机启动,编辑启动文件

$ vi /etc/rc.local
在末尾另起一行添加

$ supervisord
保存退出(和上文类似)。另 CentOS7 还需要为 rc.local 添加执行权限

$ chmod +x /etc/rc.local
至此运用 supervisord 控制 Shadowsocks 开机自启和后台运行设置完成。重启服务器即可

P.S. 如果当你在运行 supervisord 命令时出现以下的错误提示

$ [[email protected] ~]# supervisord
/usr/lib/python2.7/site-packages/supervisor-3.2.0-py2.7.egg/supervisor/options.py:296: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
‘Supervisord is running as root and it is searching ‘
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
那是因为 supervisord 已经启动了,重复启动就会出现上面的错误提示.

搭建 Strongswan 实现在 iOS 上连接 VPN
如果你只是需要在 Android, PC 上使用 VPN,那可以直接忽略此章内容, Shadowsocks 已经可以非常完美的帮助以上设备实现FQ。 但是由于 iOS 上无法使用 Shadowsocks 所以需要使用 Strongswon 建立 IPsecVPN。

下载并编译 Strongswan
首先我们来编译 Strongswan, 因为直接用 yum install 的不能用,原因不明,所以直接下载源码和依赖包进行编译

下载 Strongswan 的源码

$ wget http://download.strongswan.org/strongswan.tar.gz && tar zxvf strongswan*
$ cd strongswan*
下载编译源码所需要的依赖包(小内存请分批下载)

$ yum install -y make gcc gmp-devel openssl openssl-devel
因搬瓦工是 OpenVZ 的所以用下面的命令来进行配置

$ ./configure --sysconfdir=/etc --disable-sql --disable-mysql --disable-ldap --enable-dhcp --enable-eap-identity --enable-eap-mschapv2 --enable-md4 --enable-xauth-eap --enable-eap-peap --enable-eap-md5 --enable-openssl --enable-shared --enable-unity --enable-eap-tls --enable-eap-ttls --enable-eap-tnc --enable-eap-dynamic --enable-addrblock --enable-radattr --enable-nat-transport --enable-kernel-netlink --enable-kernel-libipsec
开始编译源代码

$ make && sudo make install
没有错误出现后,可进行下一步

使用 PSK + XAUTH 形式连接 Strongswan
使用该方式 iOS 设备无需证书,只需要使用账户名,密码及密钥的情况下即可连接.

配置 Strongswan
编辑 /etc/ipsec.conf

$ vi /etc/ipsec.conf
将下面的代码覆盖原有内容

config setup
# strictcrlpolicy=yes
uniqueids=never #允许多设备同时在线
# charondebug="cfg 2, dmn 2, ike 2, net 0" #要看Log时,取消注释本行

conn IPsec_xauth_psk
keyexchange=ikev1
left=SERVER #这里换成你登录 VPN 用的域名或 IP
leftauth=psk
leftsubnet=0.0.0.0/0
right=%any
rightauth=psk
rightauth2=xauth
rightsourceip=10.0.0.0/24
auto=add

conn %default
keyexchange=ikev1
dpdaction=hold
dpddelay=600s
dpdtimeout=5s
lifetime=24h
ikelifetime=240h
rekey=no
left=SERVER #这里换成你登录 VPN 用的域名或 IP,与生成证书时相同
leftsubnet=0.0.0.0/0
leftcert=vpnHostCert.pem
leftsendcert=always
right=%any
rightdns=8.8.8.8
rightsourceip=10.0.0.0/24
编辑 /etc/ipsec.secrets, 创建用户名及密码

vi /etc/ipsec.secrets
将一下内容添加进去

#验证用户所需的信息
: PSK "SECRET" # 这里 SECRET 可随意替换成你想要的密钥
你的用户名 : XAUTH "你的密码"
启动 Strongswan 服务
以上设置完成后, 运行下面的命令,就可以去 iOS 中设置了

$ ipsec start
在 iOS 中选择添加 IPSec VPN 设置,然后输入服务器的域名或者 IP 地址,用户名,密码及上面的密钥就可以连接成功了

使用 RSA + .pem 证书形式来连接 Strongswan
该方法需要生成证书并通过 Email 传到 iOS 设备上方可,然后再通过账户名及密码来连接.闲麻烦的朋友可直接忽略此方式.

生成证书
建立个临时目录来生成证书

$ mkdir ~/ipsec_cert && cd ~/ipsec_cert
生成服务器证书
用的是 iOS8 不越狱FQ方案中创建的脚本。SERVER 换成自己的域名或IP 都行

$ wget https://gist.githubusercontent.com/songchenwen/14c1c663ea65d5d4a28b/raw/cef8d8bafe6168388b105f780c442412e6f8ede7/server_key.sh
$ sh server_key.sh SERVER
生成客户端证书
同样是他的脚本,这个脚本还会生成一个 .p12 证书,这个证书需要导入到 iOS 里,USER 换成你自己的用户名 EMAIL 换成你自己的 email。运行命令的时候会提示输入一个密码,记住所输入的密码,在将此证书安装到 iPhone 设备的时候会提示输入该密码.

$ wget https://gist.githubusercontent.com/songchenwen/14c1c663ea65d5d4a28b/raw/54843ae2e5e6d1159134cd9a90a08c31ff5a253d/client_key.sh
$ sh client_key.sh USER EMAIL
复制证书到 /etc/ipsec.d/
Strongswan 需要的是 cacerts/strongswanCert.pem certs/vpnHostCert.pem private/vpnHostKey.pem 这三个文件

$ sudo cp cacerts/strongswanCert.pem /etc/ipsec.d/cacerts/strongswanCert.pem
$ sudo cp certs/vpnHostCert.pem /etc/ipsec.d/certs/vpnHostCert.pem
$ sudo cp private/vpnHostKey.pem /etc/ipsec.d/private/vpnHostKey.pem
同步客户端证书到本地
客户端需要的是 .p12 证书和 cacerts/strongswanCert.pem 将这两个证书同步到本地,然后通过邮件发送到 iOS 设备中并安装.
P.S. 以下命令需要在本地的命令终端运行,而不是在 VPS 里运行.

$ scp -P ssh端口 [email protected]服务器ip:~/ipsec_cert/****.p12 ~/
$ scp -P ssh端口 [email protected]服务器ip:~/ipsec_cert/cacerts/strongswanCert.pem ~/
配置 Strongswan
编辑 /etc/ipsec.conf

$ vi /etc/ipsec.conf
将下面的代码覆盖原有内容

config setup
# strictcrlpolicy=yes
uniqueids=never #允许多设备同时在线
# charondebug="cfg 2, dmn 2, ike 2, net 0" #要看Log时,取消注释本行

conn %default
keyexchange=ikev1
dpdaction=hold
dpddelay=600s
dpdtimeout=5s
lifetime=24h
ikelifetime=240h
rekey=no
left=SERVER #这里换成你登录 VPN 用的域名或 IP,与生成证书时相同
leftsubnet=0.0.0.0/0
leftcert=vpnHostCert.pem
leftsendcert=always
right=%any
rightdns=8.8.8.8
rightsourceip=10.0.0.0/24

conn CiscoIPSec
rightauth=pubkey
rightauth2=xauth
auto=add
编辑 /etc/ipsec.secrets, 创建用户名及密码

vi /etc/ipsec.secrets
将一下内容添加进去

#验证用户所需的信息
#用户名 : EAP "密码"
: RSA vpnHostKey.pem
你的用户名 : EAP "你的密码"
使用 firewalld 配置防火墙
不管选择哪种方式连接,都需要用 firewalld 开放 4500、500 端口和 esp 协议

$ vi /usr/lib/firewalld/services/ipsec.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>IPsec</short>
<description>Internet Protocol Security (IPsec) incorporates security for network transmissions directly into the Internet Protocol (IP). IPsec provides methods for both encrypting data and authentication for the host or network it sends to. If you plan to use a vpnc server or FreeS/WAN, do not disable this option.</description>
<port protocol="ah" port=""/>
<port protocol="esp" port=""/>
<port protocol="udp" port="500"/>
<port protocol="udp" port="4500"/>
</service>
然后输入一下命令后,至此整个搭建过程就结束了。

$ firewall-cmd --permanent --add-service=ipsec
$ firewall-cmd --permanent --add-masquerade
$ firewall-cmd --reload
开机自启 Strongswan
$ vi /etc/rc.local
文件末尾添加

ipsec start
把下载的两个证书用 email 发送到你的 iOS 上,安装后建立个 VPN 连接,选 IPsec,使用证书,选择你的用户名的证书即可,登录下试试吧。如有任何疑问请将您的疑问留在评论区。

使用 FinalSpeed 来加速FQ
使用 FinalSpeed 来加速 Shadowsocks,可以达到飞一般的FQ体验。看 Youtube 的 1080P 视频毫无压力。以下是使用 FinalSpeed 的注意事项:

FinalSpeed必须服务端和客户端同时配合使用,否则没有任何加速效果.
服务器建议至少256M内存
openvz架构只支持udp协议 (故搬瓦工的 VPS 只支持 udp 协议)
服务端可以和锐速共存,互不影响
在搬瓦工的 VPS 安装 FinalSpeed
FinalSpeed 支持 Linux,Centos,Ubuntu,Debian. 输入以下命令,完成一键安装

$ wget http://fs.d1sm.net/finalspeed/install_fs.sh
$ chmod +x
$ install_fs.sh./install_fs.sh 2>&1 | tee install.log
安装完后运行以下命令来查看日志

$ tail -f /fs/server.log
出现以下内容说明安装成功

FinalSpeed server start success.
如出现错误,请到这里查看解决方法。

修改端口
FinalSpeed 默认使用 150 的端口,故需要使用 firewalld 开放 150 端口

$ vi /usr/lib/firewalld/services/fs.xml
将以下内容复制进去

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>FinalSpeed</short>
<description>FinalSpeed</description>
<port protocol="tcp" port="150"/>
<port protocol="udp" port="150"/>
</service>
$ firewall-cmd --permanent --add-service=fs
$ firewall-cmd --reload
设置开机启动
$ vi /etc/rc.local
在末尾加入

sh /fs/start.sh
有需要的朋友也可以加入每天晚上 3 点自动重启功能

$ crontab -e
加入

0 3 * * * sh /fs/restart.sh
FinalSpeed 客户端的配置

时间: 2024-10-07 15:07:03

如何在 VPS 上搭建 VPN的相关文章

如何在LINUX VPS上安装VPN详细步骤

在vps上安装vpn是个难点,很多朋友都不会,这儿结合一位朋友的安装经验做下介绍.注意你的vps要安装做vpn使用,一定要注意你的流量限制,使用Vpn上游戏上youtube看视频等都比较耗费资源,否则你的帐号可能不保,被空间商给咔嚓掉了可别怪我.所有的xenvps安装都差不多,对别的系统可以借鉴一下. 1.首先安装ppp服务 yuminstall-yppp 2.下载pptpd最新版本的rpm包(比自己编译方便多了,删除也方便) wgethttp://poptop.sourceforge.net/

在Linode VPS上搭建离线下载神器Aria2+WEBUI管理及对国内云盘看法

在Linode VPS上搭建离线下载神器Aria2+WEBUI管理及对国内云盘看法 2015-09-21 by Hansen 原文链接:http://www.hansendong.me/archives/127.html 这年头vps商家都玩得比较HIGH,不少大硬盘的vps,之前的一般使用方法是当梯子看看外面的世界和Dropbox同步…… 然而现在流量用不完,所以找点其它用途吧,做个人下载服务器,这个方法不错,基于目前国内各大网盘环境,所以vps可能是另外一个选择. 为什么要花这么多时间去做这

在Linode VPS上搭建最新版Transmission

在Linode VPS上搭建最新版Transmission 2015-09-16 by Hansen 原文链接:http://www.hansendong.me/archives/124.html 以前装在VPS上安装Transmission当Seedbox使大多使用一些一键包,或者使用rpm包的方式安装,一键包的方式我一直不喜欢,经常出问题,而且一般版本都很旧.geekery现在提供更加方便yum repo的方式安装,自动解决依赖问题,版本很新(目前是2.84),并可通过yum更新. 安装方法

Windows 2003 server 服务器上搭建VPN

Windows 2003 server 服务器上搭建VPN   东莞翔达网络跟大家分享下如何搭建VPN 先来了解大声道一下VPN,VPN(Virtual private Network,虚拟专用网)是穿越专用网络或公用网络的.安全的.点对点连接的网络.VPN客户端使用特定的隧道协议,与VPN服务器建立虚拟连接.' D/ c9 v6 o/ q* W8 W- QVPN最佳范例就是:VPN客户端使用VPN连接到与Intenet相连的VPN服务器上.它的工作是VPN服务器应答验证VPN客户端的身份,如果

如何在github上搭建一个免费的 无限流量的静态网页博客Github pages

前言: 看到很多相关的教程,但是在实际操作的时候还是遇见了不少问题,这里记录分享一下我的操作流程.免费空间用过很多,博客也用过一些,听说了github后就想试着玩一下这个静态库,感觉挺不错的,操作也比较简单,可以放些demo觉得挺不错的,看自己的喜好来搭建吧~本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com) 1.注册github.com账户,具体操作不描述了,英文如果不是很好可以使用翻译软件 2.新开一个一个仓库(N

如何在RHEL7上搭建Samba服务实现Windows与Linux之间的文件共享

如何在RHEL7上搭建Samba服务实现Windows与Linux之间的文件共享 实现环境:VMware workstations.RHEL7.0 第一步:配置网卡IP及yum软件仓库 命令:vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 命令:vim /etc/yum.repos.d/aria.repo(这里的yum.repo是需要自己创建的,文件名自定即可) 第二步:设置挂载点并挂载本地ISO文件 将ISO文件连接上线 创建挂载点并挂

如何在WindowsAzure上搭建Mean stack环境之如何在中国版Azure上搭MangoDB

前几天有海外客户问到在Azure上搭建Mean Stack可行吗.当然可行了,只是个环境而已. 首先,什么是Mean Stack. MEAN stack是LAMP (Linux.Apache.MySQL,PHP / Python) stack的一个现代替代者,在九十年代末,LAMP曾是Web应用程序的主流构建方式. 在这个应用程序中并不会使用Angular.js,因为这里并不是要构建一个HTML用户界面.相反,这里创建的是一个没有用户界面的REST API,但它却可以作为任何界面的基础,如一个网

mac 教你如何在Mac上搭建自己的服务器——Nginx

WHAT 本篇主要是基于Nginx在Mac上搭建自己的服务器. 我相信很多朋友肯定是第一次听到Nginx,关于它具有怎样的传奇,这儿肯定说不完也说不透. 有兴趣的朋友可以自行google或者baidu. WHY 为什么要搭建自己的服务器呢. 好处肯定多多,这儿说一条--模拟数据. 很多时候,我们在前端开发的过程中,API接口没有做好. 当我们要铺界面时,如果等待API的开发完成,无疑是件很耽误工作的事情. 还有一点,即使API完成了,我们开发完项目时,需要自测各种极限的数据.例如 约定好返回的是

教你如何在Mac上搭建自己的服务器——Nginx

原帖地址:https://blog.csdn.net/qq_22383951/article/details/53019034 WHAT 本篇主要是基于Nginx在Mac上搭建自己的服务器.   我相信很多朋友肯定是第一次听到Nginx,关于它具有怎样的传奇,这儿肯定说不完也说不透.   有兴趣的朋友可以自行google或者baidu. WHY 为什么要搭建自己的服务器呢.   好处肯定多多,这儿说一条--模拟数据.     很多时候,我们在前端开发的过程中,API接口没有做好.   当我们要铺