小白教小白,一步一步从头搭建爬梯子服务(4.23更新)
写本教程的初衷还是为了给自己一个备忘,因为本身我是个一个Linux的大白,也是得益于GFW的强大被迫走上翻墙的道路,但是各个VPN提供商价格高昂,限制颇多,在购买过各种服务后终于选择了自己的搭配服务的道路,从此开始研究Linux😄,自己搭服务的好处就是可以随时升级,出现问题可以随时排查,而且现在各种开源服务都在积极的发展中,各路高手又提供了各种脚本方便大家,我也是查阅了无数资料后,终于简单快捷的搭配好了自己的服务,但是安心时候多日后再要重新配置服务时,因为本人的知识积累过于羸弱,所以动了心思写一篇完整版的教程,主要还是为了方便以后自己再搭建的时候有个参考哈哈,这里将介绍在一台服务器上搭建三种服务的方法:Shadowsocks;Cisco AnyConnect;IPsec Ondemand。目标人群就是比我还小白的小白哈哈。
搭建各种服务需要我们购买一台有root权限的vps,在一开始我盲目的买了一台GoDaddy的vps,折腾半天后发现这台是共享的vps,没有root权限😓,还好及时联系服务商退货了,后来还是购买的搬瓦工来练手.通过以下链接可以买到便宜的vps,搬瓦工把这些都给藏起来了,而且还能帮我挣奖励😄,64M内存的机器在yum install过多组件的时候可能会卡住,所以还是建议买大内存,或者自行把yum install 拆分,一个一个组件安装.
64M内存1.5GSSD,100G流量/月 3.99刀每年
96M内存2GSSD,200G流量/月 4.99刀每年
128M内存3GSSD,300G流量/月 5.99刀每年
512M内存5GSSD,500G流量/月 9.99刀每年
搬瓦工现在把低价位套餐都停售了,最低的是20刀一年的了,如果支持我就从我的推广链接购买吧😄,谢谢哈, http://bandwagonhost.com/aff.php?aff=1116
有的朋友说DigitalOcean的速度非常快,看YouTube直接1440p,但是我还没测试过,目前搬瓦工的速度能满足我的需求哈哈,而且DO的价格比较昂贵,有想试试DO的朋友也可以帮忙点下我的推广,把?后面的删了可以直接访问官网:
https://www.digitalocean.com/?refcode=cf0040f70574
下图:搭了SS、AnyConnect和IPsec VPN三个服务的使用情况,仅供参考
服务器购买后,安装CentOS7,因为以下教程都是基于CentOS7的,安装新的OS后,搬瓦工会告诉你SSH的端口和root的密码,这些是自己无法自定义的,要记住了.如果实在忘了也可以重置root密码,或者直接使用搬瓦工提供的在线SSH登录来操作也可,就是反应比较慢,所以我们以后还是常用ssh登录来配置vps,Mac下直接使用终端就好,win下自行寻找一个ssh工具就好
ssh -p vps端口号 root@vpsIP地址
登录上以后就相当于在本地操作一样了,你可以使用各种Linux命令来玩了✌️.
然后我们开始配置vps的防火墙和安装一些相应的组件为以后的服务做准备:
配置防火墙
如果SSH无法登录,那说明防火墙关闭里SSH端口,需要通过在线SSH登录进去关闭防火墙重新配置,我使用firewalld来配置:
清除防火墙配置
清除iptabels所有表项,同时nat设置也没了,但是我们后续的脚本里会配置的,不用担心.如果ssh登录正常就不用管防火墙.
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm sudo yum install epel-release-7-5.noarch.rpm
yum install firewalld firewall-config systemctl start firewalld
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"退出编辑模式,然后输入":wq"保存退出vi.
firewall-cmd --permanent --add-service=ssh firewall-cmd --reload
OK,现在准备工作都已就绪,安装了源,安装配置了防火墙,下一步开始搭建服务了.
2.搭建Shadowsocks服务(以下内容转自Shadowsocks搭建、优化及客户端设置教程)
yum install m2crypto python-setuptools easy_install pip pip install shadowsocks
安装时部分组件需要输入Y确认。小内存vps可以分别安装组件.
{ "server":"0.0.0.0", "server_port":8388, "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也是可以修改的,例如3024,传说端口越小,效果越好,这个我没有去验证,但建议不要小于1024,以免引起不必要的麻烦。
如果需要修改端口,需要在防火墙里打开响应的端口,用firewalld操作就比较简单了
在/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="自定义ss端口号"/> </service>
firewall-cmd --permanent --add-service=ss firewall-cmd --reload
ssserver -c /etc/shadowsocks.json
至此shadowsocks搭建完成,shadowsocks已经可以使用,如果你没有过高的要求,下面的步骤可以省略,下面是后台运行和优化步骤。
yum install python-setuptools easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf
[program:ssserver]command = ssserver -c /etc/shadowsocks.json autostart=true autorestart=true startsecs=3
5、设置supervisord开机启动
编辑文件:
保存退出(和上文类似)。
另centos7还需要为rc.local添加执行权限
至此运用supervisord控制shadowsocks开机自启和后台运行设置完成
6、shadowsocks服务器TCP优化
(此部分因为在搬瓦工下貌似不起作用,就不列出了,有兴趣的可以去原文查阅)
至此,Shadowsocks服务你就可以使用了✌️
全球最好的网盘Dropbox被墙后只能通过代理来使用,这几种翻墙的方法SS是最快最简单的,所以一般我都是在Mac上开SS,iOS上才用AnyConnect,Dropbox通过SS也能实现同步,只要按照以下设置就行
搬瓦工的SS速度还是相当不错的,但是有的朋友说不行,估计跟国内运营商和机房的位置有关吧,我用的北方电信,搬瓦工选择AZ的,下图是我Dropbox通过SS同步的速度,还不错哦
3.Cisco AnyConnect(以下内容转自ocserv(Cisco AnyConnect 兼容服务端) 一键安装脚本 for CentOS 7)
支持自动判断防火墙,请确保 Firewalld 或者 iptables 其中一个是 active 状态;
默认采用用户名密码验证,本安装脚本编译的 ocserv 也支持 pam 验证,只需要修改配置文件即可;
默认配置文件在 /usr/local/etc/ocserv/ 目录,可自行更改脚本里的参数;
安装时会提示你输入端口、用户名、密码等信息,也可直接回车采用默认值,密码是随机生成的;
安装脚本会关闭 SELINUX,不知 SELINUX 是否会影响 ocserv;
自带路由表,只有路由表里的 IP 才会走 VPN,如果你有需要添加的路由表可自行添加;
如果你有证书机构颁发的证书,可以把证书放到脚本的同目录下,确保文件名和脚本里的匹配,安装脚本会使用你的证书,客户端连接时不会提示证书错误;
配置文件修改为单 IP 允许 10 个连接,全局 1024 个连接,可修改脚本前面的变量。1024 个连接大约需要 2048 个 IP,所以虚拟接口的 IP 配置了 8 个 C 段。
脚本分安装脚本和升级脚本,初次使用安装脚本,以后可以使用update脚本来更新ocserv(均以更新至0.10.2).
登录后当前位置就是root用户目录,用下面的命令直接将脚本下载到vps上并运行
wget https://raw.githubusercontent.com/travislee8964/Ocserv-install-script-for-CentOS-RHEL-7/master/ocserv-install-script-for-centos7.sh sh ocserv-install-script-for-centos7.sh
或者将脚本下载到本地,然后用scp传输到vps上运行
Mac:在本地打开终端输入:
scp -P vps端口 脚本路径 root@vpsIP:~
会提示输入vps的密码,然后可以看到进度了,如果出错请查看是否有多余的空格出现.这个命令传输脚本到当前用户目录下,也就是root用户目录下.脚本路径可以直接将下载的脚本拖拉到光标位置,终端会自动添上路径的,很强大✌️.
配置文件在/usr/local/etc/ocserv下
vi /usr/local/etc/ocserv/ocserv.conf
修改相关配置,用户数,连接数,路由表什么的,如果想全局走VPN,就把所有路由表删了,或者注释了就行.还可以使用白名单,在配置文件最后加上:
custom-header = "X-CSTP-Split-Exclude:123.58.180.0/255.255.255.0"
新的0.10.2版本的ocserv可以使用no-route来设置白名单了
no-route = 123.58.180.0/255.255.255.0 no-route = 101.226.62.0/255.255.255.0 no-route = 101.226.103.0/255.255.255.0 no-route = 140.207.54.0/255.255.255.0 no-route = 61.144.238.145/255.255.255.0 no-route = 202.104.129.251/255.255.255.0 no-route = 61.141.194.203/255.255.255.0 no-route = 202.96.170.166/255.255.255.0 no-route = 218.18.95.221/255.255.255.0 no-route = 219.133.45.15/255.255.255.0 no-route = 218.17.209.23/255.255.255.0
可以输入多行以使更多IP进入白名单
修改完成后运行:
systemctl restart ocserv.service
在/usr/local/etc/ocserv/目录下有个ocpasswd文件,这个是安装脚本生成的密码文件,里面有你的用户和密码.
ocpasswd -c /usr/local/etc/ocserv/ocpasswd 用户名
到这里Cisco AnyConnect也配置完成,手机端下载一个客户端就可以使用了,将阻止不信任的服务器关闭即可登录.
先前部署了AnyConnect,但是每次开启服务都要输入密码很烦,开始我就设置了一位密码,现在我们可以用证书来简化登录过程.
wget https://raw.githubusercontent.com/jannerchang/Ocserv-install-script-for-CentOS-RHEL-7/master/build-ca.sh
将/usr/local/etc/ocserv/ca/user.p12这个证书通过邮件发送给iPhone,导入的时候输入生成证书环节中输入的密码即可.
然后去AnyConnect客户端服务器高级设置里选择证书即可.
但是经过几天测试感觉证书认证虽然登录简单了,但是稳定性稍差,经常锁屏后断线不重连,所以我现在还是使用密码认证方式登录,有兴趣的可以试试,这里提供一个切换密码和证书认证方式的脚本.
wget https://raw.githubusercontent.com/jannerchang/Ocserv-install-script-for-CentOS-RHEL-7/master/change-to-pwd.sh
wget https://raw.githubusercontent.com/jannerchang/Ocserv-install-script-for-CentOS-RHEL-7/master/change-to-ca.sh
1.如果出现安全网关被拒绝可以换个机房,最近发现部分机房会有这个问题,也可以联系vps服务商.
2.ocserv的端口最好在10000以上,太小有可能会出现服务无法启动的问题.
为什么要使用IPsec VPN?因为我在我们的Lifehacker群(178170151)里看到一人转发的文章,大概意思是,在iOS8里,Anyconnect变的很慢了,而且Strongswan支持IKEv1和2了,这就可以用Apple Configurator来配置iOS,达成按需访问的需求了。看到这个我又蠢蠢欲动了,我就赶紧去鼓动Allenforrest去研究,结果这货每次见我叫他都选择性逃避,装作没看到!干!又得自力更生!
经过无数个日日夜夜,查到的全是在Debian和Ubuntu下的教程,各种命令语法跟CentOS还有出入,Allen还是各种躲避。。。经历重新安装Debian后又重新装回CentOS的折腾后,终于搞定了。主要还是参考了iOS8 不越狱翻墙方案
和iOS Ondemand IPSec VPN Setup,这两篇都是Debian和Ubuntu,只要稍作改动即可安装到CentOS上,简易教程来🐦。
首先我们来编译Strongswan,因为直接用yum install 的不能用,不解中😖
下载源码和依赖包
wget http://download.strongswan.org/strongswan-5.2.2.tar.bz2 && tar xjvf strongswan-5.2.2.tar.bz2; cd strongswan-5.2.2 yum install openssl-devel yum install make gcc gmp-devel
./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
开始生成证书想要ssl证书的可以看文章里的链接,有列出哦
建立个临时目录来生成证书,然后复制到/etc/ipsec.d/里
mkdir ~/ipsec_cert && cd ~/ipsec_cert
生成服务器证书
用的是iOS8 不越狱翻墙方案他创建的脚本。SERVER换成你自己vps的域名或IP都行
wget https://gist.githubusercontent.com/songchenwen/14c1c663ea65d5d4a28b/raw/cef8d8bafe6168388b105f780c442412e6f8ede7/server_key.sh sh server_key.sh SERVER
生成客户端证书
同样是他的脚本,这个脚本还会生成一个p12证书,这个证书需要导入到iOS里,USER换成你自己的用户名 EMAIL换成你自己的email。
wget https://gist.githubusercontent.com/songchenwen/14c1c663ea65d5d4a28b/raw/54843ae2e5e6d1159134cd9a90a08c31ff5a253d/client_key.sh sh client_key.sh USER EMAIL
执行完后把.p12证书和cacerts/strongswanCert.pem 下载到本地来备用
scp -P ssh端口 root@服务器ip:~/ipsec_cert/janner.p12 ~/ scp -P ssh端口 root@服务器ip:/ipsec_cert/cacerts/strongswanCert.pem /
配置Strongswan
编辑 /etc/ipsec.conf
sudo vi /etc/ipsec.conf config setup # strictcrlpolicy=yes # uniqueids = replace # 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=emptyzone.github.io #这里换成你登录 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/8 conn CiscoIPSec rightauth=pubkey rightauth2=xauth auto=add
sudo vi /etc/ipsec.secrets
#验证用户所需的信息 #用户名 : EAP "密码" : RSA vpnHostKey.pem 你的用户名 : EAP "你的密码"
编辑/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
其他的就是配置分流路由器和开机启动啥的,我都没怎么配置,到此服务器端配置结束😄
你可以把下载的两个证书用email发送到你的iOS上,安装后建立个VPN连接,选IPsec,使用证书,选择你的用户名的证书即可,登录下试试吧。成功后就可以按照我上文所引用的两篇文章来使用 Configurator来配置你的描述文件,通用用email发送到iOS上安装即可,断线切换网络都会自动连接,给力吧,可以暂时抛弃Anyconnect了吧,哇咔咔,高级配置如只有特定域名才会连VPN的也能设置,自己可以琢磨了😄
但是现在貌似Strongswan不太稳定,经常处于疯狂重拨阶段,所以我还是使用AnyConnect多一些了✌️,有什么问题可以在twitter上与我交流@JannerChang.