├── GoogleBBR.md ├── Google原版BBR一键安装.md ├── LICENSE ├── README.md ├── SSH_Port.md ├── V2Ray搭建.md ├── clash.yaml ├── scripts └── trojan.sh ├── shadowrocket-trojan.md ├── shadowrocket_online ├── Shadowrocket_2.1.23.ipa ├── assets │ ├── css │ │ ├── bootstrap.min.css │ │ ├── my.css │ │ └── style.css │ ├── images │ │ ├── favicon.ico │ │ ├── icon.jpg │ │ └── ua-tip.png │ └── js │ │ ├── clipboard.min.js │ │ ├── jquery-1.7.2.min.js │ │ └── my.js ├── index.html └── ipa.plist ├── ssl证书.md ├── ssr443.md ├── ssrpanel20190618.sql ├── ssrpanel20190625.sql ├── telegram ├── assets │ ├── css │ │ ├── bootstrap.min.css │ │ ├── my.css │ │ └── style.css │ ├── images │ │ ├── favicon.ico │ │ ├── icon.jpg │ │ ├── icon.png │ │ └── ua-tip.png │ └── js │ │ ├── clipboard.min.js │ │ ├── jquery-1.7.2.min.js │ │ └── my.js ├── index.html └── ipa.plist ├── trojan-go.sh ├── trojan.sh ├── v2ray(WS+TLS+web).md ├── v2ray.md ├── v2ray面板.md ├── vps被封-cloudfare-v2ray-.md ├── 魔改BBR.md └── 魔改BBR一键安装.md /GoogleBBR.md: -------------------------------------------------------------------------------- 1 | # VPS服务器Google BBR一键安装脚本 2 | 3 | ### BBR介绍 4 | 5 | BBR是Google的一套拥塞控制算法,用在VPS服务器上,可以有效减少拥堵丢包,大幅提高网络连接速度。 6 | 7 | 目前Linux类系统的最新内核,都已内置BBR。而我们购买VPS服务器时安装的系统,一般都不是最新的内核。怎么解决呢,在CentOS、Debian、Ubuntu等Linux系统上,可以通过升级最新内核的方式,获取BBR。􏰰􏰱􏰲􏰳􏰇􏰴􏰵􏰶􏰋􏰷􏰸 􏰺􏰻􏰦􏰣􏰧􏰨􏱼􏱽􏱾 8 | 9 | BBR的安装也很简单,下面我们以Teddysun的一键安装包为例,介绍下BBR安装流程。 10 | 11 | ### BBR安装要求 12 | 13 | 系统要求:CentOS+、Debian7+、Ubuntu12+。 14 | 15 | 另外不支持OpenVZ虚拟的VPS服务器,这也是我们不建议购买OpenVZ服务器的原因之一。 16 | 17 | 18 | 19 | 20 | ### BBR一键安装 21 | 􏲓􏱔􏱉􏲔􏲕1.用Putty连接VPS服务器,输入以下命令运行: 22 | 23 | ``` 24 | wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh 25 | ``` 26 | 小提示:如果运行命令时英文提示找不到wget的错误,那么先运行以下命令安装wget: 27 | 28 | ``` 29 | yum -y install wget 30 | ``` 31 | 32 | 2.接下来BBR会自动开始安装,安装完成后会英文提示是否重启,输入y回车重启。 33 | 34 | 3.等待大概一分钟,系统重启成功后,重新用Putty连接VPS服务器,输入以下命令验证BBR是否安装成功: 35 | 36 | ``` 37 | sysctl net.ipv4.tcp_congestion_control 38 | ``` 39 | 40 | 如果得到如下结果则代表BBR安装成功: 41 | 42 | ``` 43 | net.ipv4.tcp_congestion_control = bbr 44 | ``` 45 | VPS推荐: 46 | 47 | [Vultr](https://www.vultr.com/?ref=7887711-4F) (vultr在2019年1月的最新活动,针对新用户,直接送50美元!vultr全球15个服务器位置可选,KVM框架,最低2.5美元/月。支持支付宝和paypal付款。) 48 | 49 | 50 | 51 | 52 | #### 参考文献: 53 | 54 | [VPS服务器Google BBR一键安装脚本](https://ssr.tools/199) 55 | 56 | -------------------------------------------------------------------------------- /Google原版BBR一键安装.md: -------------------------------------------------------------------------------- 1 | # VPS服务器Google BBR一键安装脚本 2 | 3 | ### BBR介绍 4 | 5 | BBR是Google的一套拥塞控制算法,用在VPS服务器上,可以有效减少拥堵丢包,大幅提高网络连接速度。 6 | 7 | 目前Linux类系统的最新内核,都已内置BBR。而我们购买VPS服务器时安装的系统,一般都不是最新的内核。怎么解决呢,在CentOS、Debian、Ubuntu等Linux系统上,可以通过升级最新内核的方式,获取BBR。􏰰􏰱􏰲􏰳􏰇􏰴􏰵􏰶􏰋􏰷􏰸 􏰺􏰻􏰦􏰣􏰧􏰨􏱼􏱽􏱾 8 | 9 | BBR的安装也很简单,下面我们以Teddysun的一键安装包为例,介绍下BBR安装流程。 10 | 11 | ### BBR安装要求 12 | 13 | 系统要求:CentOS+、Debian7+、Ubuntu12+。 14 | 15 | 另外不支持OpenVZ虚拟的VPS服务器,这也是我们不建议购买OpenVZ服务器的原因之一。 16 | 17 | 18 | 19 | 20 | ### BBR一键安装 21 | 􏲓􏱔􏱉􏲔􏲕1.用Putty连接VPS服务器,输入以下命令运行: 22 | 23 | ``` 24 | wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh 25 | ``` 26 | 小提示:如果运行命令时英文提示找不到wget的错误,那么先运行以下命令安装wget: 27 | 28 | ``` 29 | yum -y install wget 30 | ``` 31 | 32 | 2.接下来BBR会自动开始安装,安装完成后会英文提示是否重启,输入y回车重启。 33 | 34 | 3.等待大概一分钟,系统重启成功后,重新用Putty连接VPS服务器,输入以下命令验证BBR是否安装成功: 35 | 36 | ``` 37 | sysctl net.ipv4.tcp_congestion_control 38 | ``` 39 | 40 | 如果得到如下结果则代表BBR安装成功: 41 | 42 | ``` 43 | net.ipv4.tcp_congestion_control = bbr 44 | ``` 45 | VPS推荐: 46 | 47 | [Vultr](https://www.vultr.com/?ref=7887711-4F) (vultr在2019年1月的最新活动,针对新用户,直接送50美元!vultr全球15个服务器位置可选,KVM框架,最低2.5美元/月。支持支付宝和paypal付款。) 48 | 49 | 50 | 51 | 52 | #### 参考文献: 53 | 54 | [VPS服务器Google BBR一键安装脚本](https://ssr.tools/199) 55 | 56 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ssr 2 | 3 | ### SS/SSR 付费节点 2024-7-1 更新 4 | 5 | https://cocoduck.live/auth/register?code=11d5195115 6 | 7 | https://justmysocks3.net/members/aff.php?aff=2765 8 | 9 | [https://dddd.xxxxpppp.cyou/auth/register?code=u6hW](https://dddd.xxxxpppp.cyou/auth/register?code=u6hW) 10 | 11 | ### SSR免费节点 12 | 13 | [https://ebvtech.gitbook.io/wiki/](https://ebvtech.gitbook.io/wiki/) 14 | 15 | https://www.vultr.com/?ref=7236384 16 | 17 | 美国节点: 18 | 19 | ssr://YndnLnhpYW9rZWxpLnh5ejo0NDM6YXV0aF9hZXMxMjhfbWQ1OmFlcy0xMjgtY3RyOnRsczEuMl90aWNrZXRfYXV0aDplR2xoYjJ0bGJHa3VhVzVtYncvP29iZnNwYXJhbT0mcHJvdG9wYXJhbT1NVEEzTVRjNlVHNWtPR0Y1JnJlbWFya3M9NXBhdzVhS2VZbmRuNTc2TzVadTkmZ3JvdXA9NXBtdTZZQ2E2SXFDNTRLNSZ1ZHBwb3J0PTAmdW90PTA 20 | 21 | ### SS/SSR免费账号注册(长期更新) 22 | 23 | https://xiaokeli.me 24 | 25 | ### SS/SSR推荐 26 | 27 | 28 | 29 | https://justmysocks3.net/members/aff.php?aff=2765 30 | 31 | 32 | 禁止使用账号进行BT下载!BT下载会导致服务器被投诉而被封!为保证每个用户都能获得一定的带宽资源,**单个用户限速300kb/s**。 33 | 34 | ### 翻墙后推荐网站: 35 | 36 | google.com(谷歌;搜索类) youtube.com(油管;视频类) 37 | 38 | 39 | ### ===自己搭建SS/SSR或v2ray服务器教程=== 40 | [ssr一键安装](https://github.com/wandou911/ssr/wiki/SSR一键安装) 41 | 42 | [trojan-一键安装](https://github.com/wandou911/ssr/wiki/trojan-一键安装教程) `bash <(curl -sL https://raw.githubusercontent.com/wandou911/ssr/master/trojan-go.sh)` 43 | 44 | 45 | [v2ray一键安装](https://github.com/wandou911/ssr/blob/master/v2ray.md) 46 | 47 | 48 | [自建ss/ssr服务器教程](https://github.com/wandou911/ssr/wiki/自建ss服务器教程) (很详细,适合新手) 49 | 50 | [自建v2ray服务器教程](https://github.com/wandou911/ssr/wiki/自建v2ray服务器教程) (很详细,适合新手) 51 | 52 | [自建brook服务器教程](https://github.com/wandou911/ssr/wiki/自建brook服务器教程) (新的翻墙方式,速度更快) 53 | 54 | 55 | ### ===工具配置教程=== 56 | 57 | [shadowrocket 配置 trojan教程](https://github.com/wandou911/ssr/blob/master/shadowrocket-trojan.md) 58 | 59 | 60 | ### VPS推荐: 61 | 62 | * [搬瓦工官方网站](https://bwh81.net/aff.php?aff=19935) 63 | 64 | [https://bwh81.net/aff.php?aff=19935](https://bwh81.net/aff.php?aff=19935) 65 | 66 | [![搬瓦工](https://ssr.tools/wp-content/uploads/Banwagonhost.png)](https://bwh81.net/aff.php?aff=19935) 67 | 68 | * [Vultr官方网站](https://www.vultr.com/?ref=7236384) 69 | 70 | [https://www.vultr.com/?ref=7236384](https://www.vultr.com/?ref=7236384) 71 | 72 | [Vultr](https://www.vultr.com/?ref=7236384) (vultr在2019年1月的最新活动,针对新用户,直接送50美元!vultr全球15个服务器位置可选,KVM框架,最低2.5美元/月。支持支付宝和paypal付款。) 73 | 74 | 75 | 76 | * [OneVPS官方网站](https://www.onevps.cloud/?aff=3257) 77 | 78 | [https://www.onevps.cloud/?aff=3257](https://www.onevps.cloud/?aff=3257) 79 | 80 | ### ===免费SS/SSR节点列表===(不定期更新账号ip或端口或密码) 81 | 82 | http://www.xiaokeli.me/register?aff=88 83 | 84 | 备用地址: 85 | 86 | https://xiaokeli.me 87 | 88 | 免费账号用的人多,所以有速度限制,如果想高速翻墙上网、学习翻墙技能,可以自己搭建服务器。[自建ss/ssr服务器教程](https://github.com/wandou911/ssr/wiki/自建ss服务器教程) 89 | 90 | 免费资源有速度限制,建议每个有条件的人都学习一下自己搭建服务器,学一门技能有备无患。 91 | 92 | 93 | **SSR客户端下载:** 94 | 95 | 第一次电脑系统使用SSR/SS客户端时,如果提示你需要安装NET Framework 4.0,网上搜一下这个东西,安装一下即可。NET Framework 4.0是SSR/SS的运行库,没有这个SSR/SS客户端无法正常运行。有的电脑系统可能会自带NET Framework 4.0。 96 | 97 | Windows SSR客户端 [下载地址](https://github.com/shadowsocksr-backup/shadowsocksr-csharp/releases) [备用下载地址](https://nofile.io/f/6Jm7WJCyOVv/ShadowsocksR-4.7.0-win.7z) 98 | 99 | MAC SSR客户端 [下载地址](https://github.com/shadowsocksr-backup/ShadowsocksX-NG/releases) [备用下载地址](https://nofile.io/f/jgMWFwCBonU#ab0d3c3b6ac54482) 100 | 101 | [Linux客户端一键安装配置使用脚本(使用方法见注释)](https://github.com/the0demiurge/CharlesScripts/blob/master/charles/bin/ssr) 或者采用图形界面的[linux ssr客户端](https://github.com/erguotou520/electron-ssr/releases) 102 | 103 | 安卓SSR客户端 [下载地址](https://github.com/shadowsocksr-backup/shadowsocksr-android/releases/download/3.4.0.8/shadowsocksr-release.apk) [备用下载地址](https://nofile.io/f/rvTJoj0h5GC/shadowsocksr-release.apk) 104 | 105 | 苹果手机SSR客户端:Potatso Lite、Potatso、shadowrocket都可以作为SSR客户端,但这些软件目前已经在国内的app商店下架,可以用美区的apple id账号来下载。但是,如果你配置的SSR账号兼容SS客户端,或者协议选择origin且混淆选择plain,那么你可以选择苹果SS客户端软件(即协议和混淆可以不填)。在大陆app商店里面可以尝试搜索:Wingy、shadowsock,如果软件都被下架了,建议自己注册美区appid来下载(或者淘宝购买“美区苹果id”),美区商店有很多客户端软件![苹果手机申请美区apple id方法](https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E5%A6%82%E4%BD%95%E7%94%B3%E8%AF%B7%E7%BE%8E%E5%8C%BAapple%20id&oq=%25E8%258B%25B9%25E6%259E%259C%25E6%2589%258B%25E6%259C%25BA%25E5%25A6%2582%25E4%25BD%2595%25E6%25B3%25A8%25E5%2586%258C%25E7%25BE%258E%25E5%258C%25BAapple%2520id&rsv_pq=9b0ef06900045aac&rsv_t=a6daySwnrXFrSrC%2BIlgLIeU321j1oRm%2F%2FJgdL3RAdT6GSkIIcOaBGKnfvjE&rqlang=cn&rsv_enter=0&inputT=2113&rsv_sug3=54&rsv_sug2=0&rsv_sug4=2440&rsv_sug=1) 106 | 107 | 108 | 109 | **其它翻墙方法** 110 | 111 | [谷歌镜像](https://gitlab.com/Alvin9999/free/wikis/%E8%B0%B7%E6%AD%8C%E9%95%9C%E5%83%8F) 112 | 113 | [windows系统翻墙方法](https://gitlab.com/Alvin9999/free/wikis/home) 114 | 115 | [Linux系统翻墙方法](https://gitlab.com/Alvin9999/free/wikis/linux%E7%B3%BB%E7%BB%9F%E7%BF%BB%E5%A2%99%E6%96%B9%E6%B3%95) 116 | 117 | [MAC翻墙方法](https://gitlab.com/Alvin9999/free/wikis/%E8%8B%B9%E6%9E%9C%E7%94%B5%E8%84%91mac%E7%BF%BB%E5%A2%99%E8%BD%AF%E4%BB%B6) 118 | 119 | [ios翻墙方法](https://gitlab.com/Alvin9999/free/wikis/%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E7%BF%BB%E5%A2%99%E8%BD%AF%E4%BB%B6) 120 | 121 | [安卓手机翻墙方法](https://gitlab.com/Alvin9999/free/wikis/%E5%AE%89%E5%8D%93%E6%89%8B%E6%9C%BA%E7%89%88) 122 | 123 | [免费节点](https://github.com/selierlin/Share-SSR-V2ray) 124 | *** 125 | 126 | 有问题可以发邮件至海外邮箱wandou911@gmail.com 127 | -------------------------------------------------------------------------------- /SSH_Port.md: -------------------------------------------------------------------------------- 1 | ## 修改ssh端口的详细步骤(centos7): 2 | 3 | 4 | ### 检查SElinux是否关闭 5 | 6 | 检查命令,输入看到是disable状态才行,要不需要先关闭掉,防止出现问题 7 | 8 | ![](https://www.daniao.org/wp-content/uploads/2017/11/cos-ssh-1.jpg) 9 | 10 | 1 查看当前selinux的状态。 11 | 12 | `/usr/sbin/sestatus` 13 | 14 | 2 将SELINUX=enforcing 修改为 SELINUX=disabled 状态。 15 | 16 | ``` 17 | vi /etc/selinux/config 18 | 19 | #SELINUX=enforcing 20 | SELINUX=disabled 21 | 22 | ``` 23 | 24 | 3重启生效。reboot。 25 | 26 | `reboot` 27 | 28 | 29 | ### 修改端口 30 | 31 | 1,控制SSH访问端口的文件为 /etc/ssh/sshd_config 。 32 | 33 | 因此,编辑SSH配置文件sshd_config: 34 | 35 | #vi /etc/ssh/sshd_config 36 | 37 | 38 | 39 | 2,查找到 Port=22字段,将其前面的注释去掉: 40 | 41 | 42 | 13 #Port 22 //将注释符#去掉 防止配置不好以后不能远程登录,等修改以后的端口能使用以后在注释掉 43 | 44 | 14 #AddressFamily any 45 | 46 | 15 #ListenAddress 0.0.0.0 47 | 48 | 16 #ListenAddress :: 49 | 50 | 51 | 52 | 3,在这行下面再加同样的一行,端口号改为自己准备修改后的端口: 53 | 54 | 55 | 13 Port 22 56 | 57 | 14 Port 2022 //新增一行,增加修改后的端口号 58 | 59 | 15 #AddressFamily any 60 | 61 | 16 #ListenAddress 0.0.0.0 62 | 63 | 17 #ListenAddress :: 64 | 65 | 66 | 4,修改保存后,重启SSH服务: 67 | 68 | #/etc/init.d/sshd restart //或者 69 | 70 | #service sshd restart 71 | 72 | 5,这样,就可以通过2022远程访问linux主机了。 73 | 74 | 测试修改端口以后的ssh连接,如果成功则将port 22 重新注释掉 75 | 76 | ## 防火墙相关指令 77 | 78 | 1、开启关闭防火墙 79 | 80 | ``` 81 | systemctl start firewalld 82 | systemctl stop firewalld 83 | ``` 84 | 85 | 2、放行端口 86 | 87 | ``` 88 | firewall-cmd --permanent --zone=public --add-port=21212/tcp 89 | firewall-cmd --reload 90 | ``` 91 | 92 | 93 | 这里红字部分是我们设置的端口,需要放行。如果有出现"FirewallD is not running"问题可以参考"CentOS7出现的”Failed to start firewalld.service”问题以及端口添加记录"解决,没有启动导致的。 94 | 95 | 3、检查端口是否开启 96 | 97 | ``` 98 | firewall-cmd --permanent --query-port=21212/tcp 99 | 100 | ``` 101 | 参考链接: [Linux centos 远程SSH默认22端口修改为其他端口](https://blog.51cto.com/chidongting/1761061) 102 | 103 | 104 | 参考链接:[CentOS7修改Linux服务器SSH默认端口的方法](https://www.daniao.org/2127.html) 105 | 106 | -------------------------------------------------------------------------------- /V2Ray搭建.md: -------------------------------------------------------------------------------- 1 | ## 科学上网工具 V2Ray 简介及具体搭建流程 2 | 3 | ### 关于V2Ray 4 | 5 | 6 | V2Ray是一个功能类似于Shadowsocks的代理工具,可以帮我们实现科学上网,支持 Socks、HTTP、Shadowsocks、VMess 等协议。 7 | 8 | 9 | ### V2Ray与Shadowsocks有什么区别 10 | 11 | * 1.开发时间晚于Shadowsocks,功能更为强大,目前仍在维护更新。 12 | * 2.使用自主VMess协议,不易被墙屏蔽。 13 | * 3.网络传输效率更高,并且具有Mux多路复用功能,并发性能强 14 | * 4.自带mKCP协议,可免去KCPTUN的安装。 15 | * 5.可设置流量伪装,类似ShadowSocksR的混淆功能。 16 | * 6.目前比较小众,被封锁的可能性较小。 17 | 18 | ### V2Ray的缺点: 19 | 20 | 1.目前SSR科学上网仍是主流,V2Ray的教程不多,上手稍慢。 21 | 2.因为功能强大,所有需要设置的参数稍多,不过已经有图形化界面了,设置并不复杂。 22 | 23 | ### 搭建V2Ray所需条件 24 | 25 | 26 | 其实搭建V2Ray的条件与SSR所需条件基本一致,并没有太特殊的。 27 | 28 | V2Ray也是需要在国外VPS服务器上安装服务端,然后在本地设备上安装V2Ray客户端,设置好后客户端成功连接服务端就可以。 29 | 30 | 所以V2Ray的搭建流程: 31 | 32 | * 购买一台国外VPS服务器。 33 | * 一键安装V2Ray服务端。 34 | * 在本地设备安装V2Ray客户端 35 | * 连接成功。 36 | 37 | 下面我们分别介绍。 38 | 39 | 1.V2Ray服务器购买 40 | 41 | 之前在SSR的相关教程里,我们介绍过,国外VPS服务器并不贵,512M内存的VPS就够用了,平均每月大概十几块钱,相当于一碗面钱,可以用支付宝付美元,与日常网购区别不大。 42 | 43 | 用哪家的服务器,怎么购买 44 | 45 | [搬瓦工](https://bandwagonhost.com/aff.php?aff=19935) 或 [Vultr](https://www.vultr.com/?ref=7887711-4F) 46 | 47 | 2.在VPS服务器上安装V2Ray 48 | 49 | 2.1 Putty连接VPS服务器,复制以下命令输入开始安装: 50 | 51 | ``` 52 | wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/V2ray.Fun/master/install.sh && bash install.sh 53 | ``` 54 | 55 | 如果运行以上命令时,出现找不到wget的英文提示,则表示系统没有安装wget,根据系统不同,选择以下命令安装: 56 | 57 | `yum -y install wget` 58 | 59 | 2.2 V2Ray安装接近完成时,会提示输入用户名、密码、控制面板端口,可随意设置,如下图: 60 | 61 | 访问控制面板需要用这个端口,用户名和密码用于登录控制面板。 62 | 63 | ![](https://ssr.tools/wp-content/uploads/2018-07-26_183309.jpg) 64 | 65 | 2.3 正常来说,V2Ray已经安装成功了,可以尝试在浏览器打开控制面板地址。不过博主在这一步后无法打开V2Ray控制面板,可能是个例,保险起见,再复制以下命令运行: 66 | 67 | `pip install Flask-BasicAuth` 68 | 69 | 2.4 以上命令运行完成后,我们再启动面板。Putty输入以下命令,然后选择1回车。如下图,提示V2ray.fun started,即表示启动成功。 70 | 71 | ![](https://ssr.tools/wp-content/uploads/2018-07-26_183519.jpg) 72 | 73 | 5.浏览器输入服务器IP+刚才设置的端口,访问V2Ray控制面板,输入用户名和密码登录,登录成功后的界面如下图所示: 74 | 75 | ![](https://ssr.tools/wp-content/uploads/2018-07-26_194039.jpg) 76 | 77 | 各项连接参数都显示在运行状态菜单。最下面的Vmess链接和二维码图片,都可以用于客户端连接。 78 | 79 | ### V2Ray控制面板设置 80 | V2Ray.fun控制面板的修改连接菜单中,我们可以修改各项连接参数,如下图所示 81 | 82 | 83 | * 运行控制:用于控制V2Ray的状态。 84 | * UUID:用于客户端连接使用,默认是自动生成的,可以点击右侧按钮生成一个新的。 85 | * 主端口:用于客户端连接的端口,可设置一个新的端口,然后点击右侧的修改端口进行修改。 86 | * 加密方式:用于客户端连接的参数,不懂的话,默认即可。 87 | * 传输方式:也是客户端连接参数之一,默认即可。 88 | * TLS:不建议开启,默认是关闭的,右侧两个按钮是操作按钮,并非表示当前状态。 89 | * Mux cool:多路复用功能,可提高并发连接性能,默认开启 90 | 91 | 92 | 以上各项参数设置完成后,就可以通过V2Ray客户端连接了。点击上图左侧的运行状态菜单,用V2Ray客户端扫描二维码即可连接,或者输入Vmess链接也可以 93 | 94 | V2Ray各客户端下载、安装及使用教程可参考: 95 | 96 | [V2Ray各平台客户端下载汇总 带图形化界面](https://ssr.tools/314) 97 | 98 | 参考链接: 99 | 100 | [V2Ray一键安装脚本 自带图形化界面控制面板](https://ssr.tools/269) -------------------------------------------------------------------------------- /scripts/trojan.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # trojan一键安装脚本 3 | # Author: hijk 4 | 5 | RED="\033[31m" # Error message 6 | GREEN="\033[32m" # Success message 7 | YELLOW="\033[33m" # Warning message 8 | BLUE="\033[36m" # Info message 9 | PLAIN='\033[0m' 10 | 11 | OS=`hostnamectl | grep -i system | cut -d: -f2` 12 | 13 | V6_PROXY="" 14 | IP=`curl -sL -4 ip.sb` 15 | if [[ "$?" != "0" ]]; then 16 | IP=`curl -sL -6 ip.sb` 17 | V6_PROXY="https://gh.hijk.art/" 18 | fi 19 | 20 | BT="false" 21 | NGINX_CONF_PATH="/etc/nginx/conf.d/" 22 | res=`which bt 2>/dev/null` 23 | if [[ "$res" != "" ]]; then 24 | BT="true" 25 | NGINX_CONF_PATH="/www/server/panel/vhost/nginx/" 26 | fi 27 | 28 | # 以下网站是随机从Google上找到的无广告小说网站,不喜欢请改成其他网址,以http或https开头 29 | # 搭建好后无法打开伪装域名,可能是反代小说网站挂了,请在网站留言,或者Github发issue,以便替换新的网站 30 | SITES=( 31 | http://www.zhuizishu.com/ 32 | http://xs.56dyc.com/ 33 | #http://www.xiaoshuosk.com/ 34 | #https://www.quledu.net/ 35 | http://www.ddxsku.com/ 36 | http://www.biqu6.com/ 37 | https://www.wenshulou.cc/ 38 | #http://www.auutea.com/ 39 | http://www.55shuba.com/ 40 | http://www.39shubao.com/ 41 | https://www.23xsw.cc/ 42 | #https://www.huanbige.com/ 43 | https://www.jueshitangmen.info/ 44 | https://www.zhetian.org/ 45 | http://www.bequgexs.com/ 46 | http://www.tjwl.com/ 47 | ) 48 | 49 | CONFIG_FILE=/usr/local/etc/trojan/config.json 50 | 51 | colorEcho() { 52 | echo -e "${1}${@:2}${PLAIN}" 53 | } 54 | 55 | function checkSystem() 56 | { 57 | result=$(id | awk '{print $1}') 58 | if [ $result != "uid=0(root)" ]; then 59 | colorEcho $RED " 请以root身份执行该脚本" 60 | exit 1 61 | fi 62 | 63 | res=`which yum 2>/dev/null` 64 | if [ "$?" != "0" ]; then 65 | res=`which apt 2>/dev/null` 66 | if [ "$?" != "0" ]; then 67 | colorEcho $RED " 不受支持的Linux系统" 68 | exit 1 69 | fi 70 | PMT=apt 71 | CMD_INSTALL="apt install -y " 72 | CMD_REMOVE="apt remove -y " 73 | CMD_UPGRADE="apt update; apt upgrade -y; apt autoremove -y" 74 | else 75 | PMT=yum 76 | CMD_INSTALL="yum install -y " 77 | CMD_REMOVE="yum remove -y " 78 | CMD_UPGRADE="yum update -y" 79 | fi 80 | res=`which systemctl 2>/dev/null` 81 | if [ "$?" != "0" ]; then 82 | colorEcho $RED " 系统版本过低,请升级到最新版本" 83 | exit 1 84 | fi 85 | } 86 | 87 | status() { 88 | if [[ ! -f /usr/local/bin/trojan ]]; then 89 | echo 0 90 | return 91 | fi 92 | 93 | if [[ ! -f $CONFIG_FILE ]]; then 94 | echo 1 95 | return 96 | fi 97 | port=`grep local_port $CONFIG_FILE|cut -d: -f2| tr -d \",' '` 98 | res=`ss -ntlp| grep ${port} | grep trojan` 99 | if [[ -z "$res" ]]; then 100 | echo 2 101 | else 102 | echo 3 103 | fi 104 | } 105 | 106 | statusText() { 107 | res=`status` 108 | case $res in 109 | 2) 110 | echo -e ${GREEN}已安装${PLAIN} ${RED}未运行${PLAIN} 111 | ;; 112 | 3) 113 | echo -e ${GREEN}已安装${PLAIN} ${GREEN}正在运行${PLAIN} 114 | ;; 115 | *) 116 | echo -e ${RED}未安装${PLAIN} 117 | ;; 118 | esac 119 | } 120 | 121 | function getData() 122 | { 123 | echo " " 124 | echo " 本脚本为trojan一键脚本,运行之前请确认如下条件已经具备:" 125 | echo -e " ${RED}1. 一个伪装域名${PLAIN}" 126 | echo -e " ${RED}2. 伪装域名DNS解析指向当前服务器ip(${IP})${PLAIN}" 127 | echo -e " 3. 如果/root目录下有 ${GREEN}trojan.pem${PLAIN} 和 ${GREEN}trojan.key${PLAIN} 证书密钥文件,无需理会条件2" 128 | echo " " 129 | read -p " 确认满足按y,按其他退出脚本:" answer 130 | if [ "${answer}" != "y" ] && [ "${answer}" != "Y" ]; then 131 | exit 0 132 | fi 133 | 134 | echo "" 135 | while true 136 | do 137 | read -p " 请输入伪装域名:" DOMAIN 138 | if [ -z "${DOMAIN}" ]; then 139 | echo " 域名输入错误,请重新输入!" 140 | else 141 | break 142 | fi 143 | done 144 | DOMAIN=${DOMAIN,,} 145 | colorEcho $BLUE " 伪装域名(host): $DOMAIN" 146 | 147 | echo "" 148 | if [[ -f ~/trojan.pem && -f ~/trojan.key ]]; then 149 | echo -e "${GREEN} 检测到自有证书,将使用其部署${PLAIN}" 150 | echo 151 | CERT_FILE="/usr/local/etc/trojan/${DOMAIN}.pem" 152 | KEY_FILE="/usr/local/etc/trojan/${DOMAIN}.key" 153 | else 154 | resolve=`curl -sL https://lefu.men/hostip.php?d=${DOMAIN}` 155 | res=`echo -n ${resolve} | grep ${IP}` 156 | if [[ -z "${res}" ]]; then 157 | echo " ${DOMAIN} 解析结果:${resolve}" 158 | echo -e " ${RED}域名未解析到当前服务器IP(${IP})!${PLAIN}" 159 | exit 1 160 | fi 161 | fi 162 | 163 | echo "" 164 | read -p " 请设置trojan密码(不输入则随机生成):" PASSWORD 165 | [ -z "$PASSWORD" ] && PASSWORD=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1` 166 | colorEcho $BLUE " 密码: " $PASSWORD 167 | 168 | echo "" 169 | read -p " 请输入trojan端口[100-65535的一个数字,默认443]:" PORT 170 | [ -z "${PORT}" ] && PORT=443 171 | if [ "${PORT:0:1}" = "0" ]; then 172 | echo -e " ${RED}端口不能以0开头${PLAIN}" 173 | exit 1 174 | fi 175 | colorEcho $BLUE " trojan端口: " $PORT 176 | 177 | echo "" 178 | colorEcho $BLUE " 请选择伪装站类型:" 179 | echo " 1) 静态网站(位于/usr/share/nginx/html)" 180 | echo " 2) 小说站(随机选择)" 181 | echo " 3) 美女站(https://imeizi.me)" 182 | echo " 4) VPS优惠博客(https://www.lowendtalk.com)" 183 | echo " 5) 自定义反代站点(需以http或者https开头)" 184 | read -p " 请选择伪装网站类型[默认:美女站]" answer 185 | if [[ -z "$answer" ]]; then 186 | PROXY_URL="https://imeizi.me" 187 | else 188 | case $answer in 189 | 1) 190 | PROXY_URL="" 191 | ;; 192 | 2) 193 | len=${#SITES[@]} 194 | ((len--)) 195 | index=`shuf -i0-${len} -n1` 196 | PROXY_URL=${SITES[$index]} 197 | ;; 198 | 3) 199 | PROXY_URL="https://imeizi.me" 200 | ;; 201 | 4) 202 | PROXY_URL="https://www.lowendtalk.com" 203 | ;; 204 | 5) 205 | read -p " 请输入反代站点(以http或者https开头):" PROXY_URL 206 | if [[ -z "$PROXY_URL" ]]; then 207 | colorEcho $RED " 请输入反代网站!" 208 | exit 1 209 | elif [[ "${PROXY_URL:0:4}" != "http" ]]; then 210 | colorEcho $RED " 反代网站必须以http或https开头!" 211 | exit 1 212 | fi 213 | ;; 214 | *) 215 | colorEcho $RED " 请输入正确的选项!" 216 | exit 1 217 | esac 218 | fi 219 | REMOTE_HOST=`echo ${PROXY_URL} | cut -d/ -f3` 220 | echo "" 221 | colorEcho $BLUE " 伪装域名:$PROXY_URL" 222 | 223 | echo "" 224 | colorEcho $BLUE " 是否允许搜索引擎爬取网站?[默认:不允许]" 225 | echo " y)允许,会有更多ip请求网站,但会消耗一些流量,vps流量充足情况下推荐使用" 226 | echo " n)不允许,爬虫不会访问网站,访问ip比较单一,但能节省vps流量" 227 | read -p " 请选择:[y/n]" answer 228 | if [[ -z "$answer" ]]; then 229 | ALLOW_SPIDER="n" 230 | elif [[ "${answer,,}" = "y" ]]; then 231 | ALLOW_SPIDER="y" 232 | else 233 | ALLOW_SPIDER="n" 234 | fi 235 | echo "" 236 | colorEcho $BLUE " 允许搜索引擎:$ALLOW_SPIDER" 237 | 238 | echo "" 239 | read -p " 是否安装BBR(默认安装)?[y/n]:" NEED_BBR 240 | [ -z "$NEED_BBR" ] && NEED_BBR=y 241 | [ "$NEED_BBR" = "Y" ] && NEED_BBR=y 242 | colorEcho $BLUE " 安装BBR:$NEED_BBR" 243 | } 244 | 245 | function preinstall() 246 | { 247 | $PMT clean all 248 | [[ "$PMT" = "apt" ]] && $PMT update 249 | #colorEcho $BLUE " 更新系统..." 250 | #echo $CMD_UPGRADE | bash 251 | 252 | colorEcho $BLUE " 安装必要软件" 253 | if [[ "$PMT" = "yum" ]]; then 254 | $CMD_INSTALL epel-release 255 | fi 256 | $CMD_INSTALL wget vim unzip tar gcc openssl 257 | $CMD_INSTALL net-tools 258 | if [[ "$PMT" = "apt" ]]; then 259 | $CMD_INSTALL libssl-dev g++ 260 | fi 261 | 262 | if [[ -s /etc/selinux/config ]] && grep 'SELINUX=enforcing' /etc/selinux/config; then 263 | sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config 264 | setenforce 0 265 | fi 266 | } 267 | 268 | function installTrojan() 269 | { 270 | colorEcho $BLUE " 安装最新版trojan..." 271 | rm -rf $CONFIG_FILE 272 | rm -rf /etc/systemd/system/trojan.service 273 | 274 | NAME=trojan 275 | VERSION=`curl -fsSL ${V6_PROXY}https://api.github.com/repos/trojan-gfw/trojan/releases/latest | grep tag_name | sed -E 's/.*"v(.*)".*/\1/'` 276 | TARBALL="$NAME-$VERSION-linux-amd64.tar.xz" 277 | DOWNLOADURL="${V6_PROXY}https://github.com/trojan-gfw/$NAME/releases/download/v$VERSION/$TARBALL" 278 | TMPDIR="$(mktemp -d)" 279 | INSTALLPREFIX=/usr/local 280 | SYSTEMDPREFIX=/etc/systemd/system 281 | 282 | BINARYPATH="$INSTALLPREFIX/bin/$NAME" 283 | CONFIGPATH="$INSTALLPREFIX/etc/$NAME/config.json" 284 | SYSTEMDPATH="$SYSTEMDPREFIX/$NAME.service" 285 | 286 | echo Entering temp directory $TMPDIR... 287 | cd "$TMPDIR" 288 | 289 | echo Downloading $NAME $VERSION... 290 | curl -LO --progress-bar "$DOWNLOADURL" || wget -q --show-progress "$DOWNLOADURL" 291 | 292 | echo Unpacking $NAME $VERSION... 293 | tar xf "$TARBALL" 294 | cd "$NAME" 295 | 296 | echo Installing $NAME $VERSION to $BINARYPATH... 297 | cp "$NAME" "$BINARYPATH" 298 | chmod 755 "$BINARYPATH" 299 | 300 | mkdir -p $INSTALLPREFIX/etc/$NAME 301 | 302 | echo Installing $NAME systemd service to $SYSTEMDPATH... 303 | cat > "$SYSTEMDPATH" << EOF 304 | [Unit] 305 | Description=$NAME 306 | Documentation=https://trojan-gfw.github.io/$NAME/config https://trojan-gfw.github.io/$NAME/ 307 | After=network.target network-online.target nss-lookup.target mysql.service mariadb.service mysqld.service 308 | 309 | [Service] 310 | Type=simple 311 | StandardError=journal 312 | ExecStart="$BINARYPATH" "$CONFIGPATH" 313 | ExecReload=/bin/kill -HUP \$MAINPID 314 | LimitNOFILE=51200 315 | Restart=on-failure 316 | RestartSec=1s 317 | 318 | [Install] 319 | WantedBy=multi-user.target 320 | EOF 321 | 322 | echo Reloading systemd daemon... 323 | systemctl daemon-reload 324 | 325 | echo Deleting temp directory $TMPDIR... 326 | rm -rf "$TMPDIR" 327 | 328 | echo Done! 329 | 330 | if [[ ! -f "$BINARYPATH" ]]; then 331 | colorEcho $RED " $OS 安装trojan失败,请到 https://hijk.art 反馈" 332 | exit 1 333 | fi 334 | 335 | systemctl enable trojan 336 | colorEcho $GREEN " trojan安装成功!" 337 | } 338 | 339 | configTrojan() { 340 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 341 | 342 | cat >$CONFIG_FILE<<-EOF 343 | { 344 | "run_type": "server", 345 | "local_addr": "::", 346 | "local_port": ${PORT}, 347 | "remote_addr": "127.0.0.1", 348 | "remote_port": 80, 349 | "password": [ 350 | "$PASSWORD" 351 | ], 352 | "log_level": 1, 353 | "ssl": { 354 | "cert": "$CERT_FILE", 355 | "key": "$KEY_FILE", 356 | "key_password": "", 357 | "sni": "$DOMAIN", 358 | "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384", 359 | "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384", 360 | "prefer_server_cipher": true, 361 | "alpn": [ 362 | "http/1.1", "h2" 363 | ], 364 | "alpn_port_override": { 365 | "h2": 81 366 | }, 367 | "reuse_session": true, 368 | "session_ticket": false, 369 | "session_timeout": 600, 370 | "plain_http_response": "", 371 | "curves": "", 372 | "dhparam": "" 373 | }, 374 | "tcp": { 375 | "prefer_ipv4": false, 376 | "no_delay": true, 377 | "keep_alive": true, 378 | "reuse_port": false, 379 | "fast_open": false, 380 | "fast_open_qlen": 20 381 | }, 382 | "mysql": { 383 | "enabled": false, 384 | "server_addr": "127.0.0.1", 385 | "server_port": 3306, 386 | "database": "trojan", 387 | "username": "trojan", 388 | "password": "", 389 | "key": "", 390 | "cert": "", 391 | "ca": "" 392 | } 393 | } 394 | EOF 395 | } 396 | 397 | getCert() { 398 | mkdir -p /usr/local/etc/trojan 399 | if [[ -z ${CERT_FILE+x} ]]; then 400 | stopNginx 401 | res=`netstat -ntlp| grep -E ':80 |:443 '` 402 | if [[ "${res}" != "" ]]; then 403 | colorEcho $RED " 其他进程占用了80或443端口,请先关闭再运行一键脚本" 404 | echo " 端口占用信息如下:" 405 | echo ${res} 406 | exit 1 407 | fi 408 | 409 | $CMD_INSTALL socat openssl 410 | if [[ "$PMT" = "yum" ]]; then 411 | $CMD_INSTALL cronie 412 | systemctl start crond 413 | systemctl enable crond 414 | else 415 | $CMD_INSTALL cron 416 | systemctl start cron 417 | systemctl enable cron 418 | fi 419 | curl -sL https://get.acme.sh | sh 420 | source ~/.bashrc 421 | ~/.acme.sh/acme.sh --upgrade --auto-upgrade 422 | if [[ "$BT" = "false" ]]; then 423 | ~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 --pre-hook "systemctl stop nginx" --post-hook "systemctl restart nginx" --standalone 424 | else 425 | ~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 --pre-hook "nginx -s stop || { echo -n ''; }" --post-hook "nginx -c /www/server/nginx/conf/nginx.conf || { echo -n ''; }" --standalone 426 | fi 427 | [[ -f ~/.acme.sh/${DOMAIN}_ecc/ca.cer ]] || { 428 | colorEcho $RED " 获取证书失败,请复制上面的红色文字到 https://hijk.art 反馈" 429 | exit 1 430 | } 431 | CERT_FILE="/usr/local/etc/trojan/${DOMAIN}.pem" 432 | KEY_FILE="/usr/local/etc/trojan/${DOMAIN}.key" 433 | ~/.acme.sh/acme.sh --install-cert -d $DOMAIN --ecc \ 434 | --key-file $KEY_FILE \ 435 | --fullchain-file $CERT_FILE \ 436 | --reloadcmd "service nginx force-reload" 437 | [[ -f $CERT_FILE && -f $KEY_FILE ]] || { 438 | colorEcho $RED " 获取证书失败,请到 https://hijk.art 反馈" 439 | exit 1 440 | } 441 | else 442 | cp ~/trojan.pem /usr/local/etc/trojan/${DOMAIN}.pem 443 | cp ~/trojan.key /usr/local/etc/trojan/${DOMAIN}.key 444 | fi 445 | } 446 | 447 | function installNginx() 448 | { 449 | colorEcho $BLUE " 安装nginx..." 450 | if [[ "$BT" = "false" ]]; then 451 | if [[ "$PMT" = "yum" ]]; then 452 | $CMD_INSTALL epel-release 453 | if [[ "$?" != "0" ]]; then 454 | echo '[nginx-stable] 455 | name=nginx stable repo 456 | baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ 457 | gpgcheck=1 458 | enabled=1 459 | gpgkey=https://nginx.org/keys/nginx_signing.key 460 | module_hotfixes=true' > /etc/yum.repos.d/nginx.repo 461 | fi 462 | fi 463 | $CMD_INSTALL nginx 464 | if [[ "$?" != "0" ]]; then 465 | colorEcho $RED " Nginx安装失败,请到 https://hijk.art 反馈" 466 | exit 1 467 | fi 468 | systemctl enable nginx 469 | else 470 | res=`which nginx 2>/dev/null` 471 | if [[ "$?" != "0" ]]; then 472 | colorEcho $RED " 您安装了宝塔,请在宝塔后台安装nginx后再运行本脚本" 473 | exit 1 474 | fi 475 | fi 476 | } 477 | 478 | configNginx() { 479 | mkdir -p /usr/share/nginx/html 480 | if [[ "$ALLOW_SPIDER" = "n" ]]; then 481 | echo 'User-Agent: *' > /usr/share/nginx/html/robots.txt 482 | echo 'Disallow: /' >> /usr/share/nginx/html/robots.txt 483 | ROBOT_CONFIG=" location = /robots.txt {}" 484 | else 485 | ROBOT_CONFIG="" 486 | fi 487 | 488 | if [[ "$BT" = "false" ]]; then 489 | if [ ! -f /etc/nginx/nginx.conf.bak ]; then 490 | mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak 491 | fi 492 | res=`id nginx 2>/dev/null` 493 | if [[ "$?" != "0" ]]; then 494 | user="www-data" 495 | else 496 | user="nginx" 497 | fi 498 | cat > /etc/nginx/nginx.conf<<-EOF 499 | user $user; 500 | worker_processes auto; 501 | error_log /var/log/nginx/error.log; 502 | pid /run/nginx.pid; 503 | 504 | # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 505 | include /usr/share/nginx/modules/*.conf; 506 | 507 | events { 508 | worker_connections 1024; 509 | } 510 | 511 | http { 512 | log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" ' 513 | '\$status \$body_bytes_sent "\$http_referer" ' 514 | '"\$http_user_agent" "\$http_x_forwarded_for"'; 515 | 516 | access_log /var/log/nginx/access.log main; 517 | 518 | sendfile on; 519 | tcp_nopush on; 520 | tcp_nodelay on; 521 | keepalive_timeout 65; 522 | types_hash_max_size 2048; 523 | gzip on; 524 | 525 | include /etc/nginx/mime.types; 526 | default_type application/octet-stream; 527 | 528 | # Load modular configuration files from the /etc/nginx/conf.d directory. 529 | # See http://nginx.org/en/docs/ngx_core_module.html#include 530 | # for more information. 531 | include /etc/nginx/conf.d/*.conf; 532 | } 533 | EOF 534 | fi 535 | 536 | mkdir -p $NGINX_CONF_PATH 537 | if [[ "$PROXY_URL" = "" ]]; then 538 | cat > $NGINX_CONF_PATH${DOMAIN}.conf<<-EOF 539 | server { 540 | listen 80; 541 | listen [::]:80; 542 | listen 81 http2; 543 | server_name ${DOMAIN}; 544 | root /usr/share/nginx/html; 545 | 546 | $ROBOT_CONFIG 547 | } 548 | EOF 549 | else 550 | cat > $NGINX_CONF_PATH${DOMAIN}.conf<<-EOF 551 | server { 552 | listen 80; 553 | listen [::]:80; 554 | listen 81 http2; 555 | server_name ${DOMAIN}; 556 | root /usr/share/nginx/html; 557 | location / { 558 | proxy_ssl_server_name on; 559 | proxy_pass $PROXY_URL; 560 | proxy_set_header Accept-Encoding ''; 561 | sub_filter "$REMOTE_HOST" "$DOMAIN"; 562 | sub_filter_once off; 563 | } 564 | 565 | $ROBOT_CONFIG 566 | } 567 | EOF 568 | fi 569 | } 570 | 571 | startNginx() { 572 | if [[ "$BT" = "false" ]]; then 573 | systemctl start nginx 574 | else 575 | nginx -c /www/server/nginx/conf/nginx.conf 576 | fi 577 | } 578 | 579 | stopNginx() { 580 | if [[ "$BT" = "false" ]]; then 581 | systemctl stop nginx 582 | else 583 | res=`ps aux | grep -i nginx` 584 | if [[ "$res" != "" ]]; then 585 | nginx -s stop 586 | fi 587 | fi 588 | } 589 | 590 | function setFirewall() 591 | { 592 | res=`which firewall-cmd 2>/dev/null` 593 | if [[ $? -eq 0 ]]; then 594 | systemctl status firewalld > /dev/null 2>&1 595 | if [[ $? -eq 0 ]];then 596 | firewall-cmd --permanent --add-service=http 597 | firewall-cmd --permanent --add-service=https 598 | if [[ "$PORT" != "443" ]]; then 599 | firewall-cmd --permanent --add-port=${PORT}/tcp 600 | fi 601 | firewall-cmd --reload 602 | else 603 | nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'` 604 | if [[ "$nl" != "3" ]]; then 605 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT 606 | iptables -I INPUT -p tcp --dport 443 -j ACCEPT 607 | if [[ "$PORT" != "443" ]]; then 608 | iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT 609 | fi 610 | fi 611 | fi 612 | else 613 | res=`which iptables 2>/dev/null` 614 | if [[ $? -eq 0 ]]; then 615 | nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'` 616 | if [[ "$nl" != "3" ]]; then 617 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT 618 | iptables -I INPUT -p tcp --dport 443 -j ACCEPT 619 | if [[ "$PORT" != "443" ]]; then 620 | iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT 621 | fi 622 | fi 623 | else 624 | res=`which ufw 2>/dev/null` 625 | if [[ $? -eq 0 ]]; then 626 | res=`ufw status | grep -i inactive` 627 | if [[ "$res" = "" ]]; then 628 | ufw allow http/tcp 629 | ufw allow https/tcp 630 | if [[ "$PORT" != "443" ]]; then 631 | ufw allow ${PORT}/tcp 632 | fi 633 | fi 634 | fi 635 | fi 636 | fi 637 | } 638 | 639 | function installBBR() 640 | { 641 | if [ "$NEED_BBR" != "y" ]; then 642 | INSTALL_BBR=false 643 | return 644 | fi 645 | 646 | result=$(lsmod | grep bbr) 647 | if [ "$result" != "" ]; then 648 | colorEcho $YELLOW " BBR模块已安装" 649 | INSTALL_BBR=false 650 | return; 651 | fi 652 | res=`hostnamectl | grep -i openvz` 653 | if [ "$res" != "" ]; then 654 | colorEcho $YELLOW " openvz机器,跳过安装" 655 | INSTALL_BBR=false 656 | return 657 | fi 658 | 659 | echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf 660 | echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf 661 | sysctl -p 662 | result=$(lsmod | grep bbr) 663 | if [[ "$result" != "" ]]; then 664 | colorEcho $GREEN " BBR模块已启用" 665 | INSTALL_BBR=false 666 | return 667 | fi 668 | 669 | colorEcho $BLUE " 安装BBR模块..." 670 | if [[ "$PMT" = "yum" ]]; then 671 | if [[ "$V6_PROXY" = "" ]]; then 672 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 673 | rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 674 | $CMD_INSTALL --enablerepo=elrepo-kernel kernel-ml 675 | $CMD_REMOVE kernel-3.* 676 | grub2-set-default 0 677 | echo "tcp_bbr" >> /etc/modules-load.d/modules.conf 678 | INSTALL_BBR=true 679 | fi 680 | else 681 | $CMD_INSTALL --install-recommends linux-generic-hwe-16.04 682 | grub-set-default 0 683 | echo "tcp_bbr" >> /etc/modules-load.d/modules.conf 684 | INSTALL_BBR=true 685 | fi 686 | } 687 | 688 | function showInfo() 689 | { 690 | res=`netstat -nltp | grep trojan` 691 | [[ -z "$res" ]] && status="${RED}已停止${PLAIN}" || status="${GREEN}正在运行${PLAIN}" 692 | 693 | domain=`grep sni $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 694 | if [[ "$domain" = "" ]]; then 695 | domain=`grep -m1 cert $CONFIG_FILE | cut -d/ -f5` 696 | fi 697 | port=`grep local_port $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 698 | line1=`grep -n 'password' $CONFIG_FILE | head -n1 | cut -d: -f1` 699 | line11=`expr $line1 + 1` 700 | password=`sed -n "${line11}p" $CONFIG_FILE | tr -d \",' '` 701 | 702 | res=`netstat -nltp | grep ${port} | grep nginx` 703 | [[ -z "$res" ]] && ngstatus="${RED}已停止${PLAIN}" || ngstatus="${GREEN}正在运行${PLAIN}" 704 | 705 | echo ============================================ 706 | echo -e " ${BLUE}trojan运行状态:${PLAIN}${status}" 707 | echo "" 708 | echo -e " ${BLUE}trojan配置文件:${PLAIN}${RED}$CONFIG_FILE${PLAIN}" 709 | echo -e " ${BLUE}trojan配置信息:${PLAIN} " 710 | echo -e " ${BLUE}IP/域名(address):${PLAIN} ${RED}${domain}${PLAIN}" 711 | echo -e " ${BLUE}端口(port):${PLAIN}${RED}${port}${PLAIN}" 712 | echo -e " ${BLUE}密码(password):${PLAIN}${RED}$password${PLAIN}" 713 | echo 714 | echo ============================================ 715 | } 716 | 717 | function bbrReboot() { 718 | if [ "${INSTALL_BBR}" == "true" ]; then 719 | echo "" 720 | colorEcho $BLUE " 为使BBR模块生效,系统将在30秒后重启" 721 | echo 722 | echo -e " 您可以按 ctrl + c 取消重启,稍后输入 ${RED}reboot${PLAIN} 重启系统" 723 | sleep 30 724 | reboot 725 | fi 726 | } 727 | 728 | 729 | function install() { 730 | getData 731 | preinstall 732 | installBBR 733 | setFirewall 734 | installNginx 735 | getCert 736 | configNginx 737 | installTrojan 738 | configTrojan 739 | 740 | start 741 | showInfo 742 | bbrReboot 743 | } 744 | 745 | reconfig() { 746 | res=`status` 747 | if [[ $res -lt 2 ]]; then 748 | echo -e " ${RED}trojan未安装,请先安装!${PLAIN}" 749 | return 750 | fi 751 | 752 | getData 753 | setFirewall 754 | getCert 755 | configNginx 756 | configTrojan 757 | restart 758 | showInfo 759 | } 760 | 761 | update() { 762 | res=`status` 763 | if [[ $res -lt 2 ]]; then 764 | echo -e " ${RED}trojan未安装,请先安装!${PLAIN}" 765 | return 766 | fi 767 | 768 | installTrojan 769 | 770 | stop 771 | start 772 | colorEcho $BLUE " 成功更新到最新版trojan" 773 | } 774 | 775 | start() { 776 | res=`status` 777 | if [[ $res -lt 2 ]]; then 778 | echo -e "${RED}trojan未安装,请先安装!${PLAIN}" 779 | return 780 | fi 781 | stopNginx 782 | startNginx 783 | systemctl restart trojan 784 | sleep 2 785 | port=`grep local_port $CONFIG_FILE|cut -d: -f2| tr -d \",' '` 786 | res=`ss -ntlp| grep ${port} | grep trojan` 787 | if [[ "$res" = "" ]]; then 788 | colorEcho $RED " trojan启动失败,请检查端口是否被占用!" 789 | else 790 | colorEcho $BLUE " trojan启动成功" 791 | fi 792 | } 793 | 794 | stop() { 795 | stopNginx 796 | systemctl stop trojan 797 | colorEcho $BLUE " trojan停止成功" 798 | } 799 | 800 | 801 | restart() { 802 | res=`status` 803 | if [[ $res -lt 2 ]]; then 804 | echo -e " ${RED}trojan未安装,请先安装!${PLAIN}" 805 | return 806 | fi 807 | 808 | stop 809 | start 810 | } 811 | 812 | showLog() { 813 | res=`status` 814 | if [[ $res -lt 2 ]]; then 815 | echo -e "${RED}trojan未安装,请先安装!${PLAIN}" 816 | return 817 | fi 818 | 819 | journalctl -xen -u trojan --no-pager 820 | } 821 | 822 | function uninstall() { 823 | res=`status` 824 | if [[ $res -lt 2 ]]; then 825 | echo -e "${RED}trojan未安装,请先安装!${PLAIN}" 826 | return 827 | fi 828 | 829 | echo "" 830 | read -p " 确定卸载trojan?(y/n)" answer 831 | [[ -z ${answer} ]] && answer="n" 832 | 833 | if [[ "${answer}" == "y" ]] || [[ "${answer}" == "Y" ]]; then 834 | domain=`grep sni $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 835 | if [[ "$domain" = "" ]]; then 836 | domain=`grep -m1 cert $CONFIG_FILE | cut -d/ -f5` 837 | fi 838 | 839 | systemctl stop trojan 840 | systemctl disable trojan 841 | rm -rf /usr/local/bin/trojan 842 | rm -rf /usr/local/etc/trojan 843 | rm -rf /etc/systemd/system/trojan.service 844 | 845 | if [[ "$BT" = "false" ]]; then 846 | $CMD_REMOVE nginx 847 | if [[ "$PMT" = "apt" ]]; then 848 | $CMD_REMOVE nginx-common 849 | fi 850 | if [[ -d /usr/share/nginx/html.bak ]]; then 851 | rm -rf /usr/share/nginx/html 852 | mv /usr/share/nginx/html.bak /usr/share/nginx/html 853 | fi 854 | fi 855 | rm -rf $NGINX_CONF_PATH${domain}.conf 856 | ~/.acme.sh/acme.sh --uninstall 857 | colorEcho $GREEN " trojan卸载成功" 858 | fi 859 | } 860 | 861 | menu() { 862 | clear 863 | echo "#############################################################" 864 | echo -e "# ${RED}trojan一键安装脚本${PLAIN} #" 865 | echo -e "# ${GREEN}作者${PLAIN}: 网络跳越(hijk) #" 866 | echo -e "# ${GREEN}网址${PLAIN}: https://hijk.art #" 867 | echo -e "# ${GREEN}论坛${PLAIN}: https://hijk.club #" 868 | echo -e "# ${GREEN}TG群${PLAIN}: https://t.me/hijkclub #" 869 | echo -e "# ${GREEN}Youtube频道${PLAIN}: https://youtube.com/channel/UCYTB--VsObzepVJtc9yvUxQ #" 870 | echo "#############################################################" 871 | echo "" 872 | 873 | echo -e " ${GREEN}1.${PLAIN} 安装trojan" 874 | echo -e " ${GREEN}2.${PLAIN} 更新trojan" 875 | echo -e " ${GREEN}3. ${RED}卸载trojan${PLAIN}" 876 | echo " -------------" 877 | echo -e " ${GREEN}4.${PLAIN} 启动trojan" 878 | echo -e " ${GREEN}5.${PLAIN} 重启trojan" 879 | echo -e " ${GREEN}6.${PLAIN} 停止trojan" 880 | echo " -------------" 881 | echo -e " ${GREEN}7.${PLAIN} 查看trojan配置" 882 | echo -e " ${GREEN}8. ${RED}修改trojan配置${PLAIN}" 883 | echo -e " ${GREEN}9.${PLAIN} 查看trojan日志" 884 | echo " -------------" 885 | echo -e " ${GREEN}0.${PLAIN} 退出" 886 | echo 887 | echo -n " 当前状态:" 888 | statusText 889 | echo 890 | 891 | read -p " 请选择操作[0-10]:" answer 892 | case $answer in 893 | 0) 894 | exit 0 895 | ;; 896 | 1) 897 | install 898 | ;; 899 | 2) 900 | update 901 | ;; 902 | 3) 903 | uninstall 904 | ;; 905 | 4) 906 | start 907 | ;; 908 | 5) 909 | restart 910 | ;; 911 | 6) 912 | stop 913 | ;; 914 | 7) 915 | showInfo 916 | ;; 917 | 8) 918 | reconfig 919 | ;; 920 | 9) 921 | showLog 922 | ;; 923 | *) 924 | echo -e "$RED 请选择正确的操作!${PLAIN}" 925 | exit 1 926 | ;; 927 | esac 928 | } 929 | 930 | checkSystem 931 | 932 | action=$1 933 | [[ -z $1 ]] && action=menu 934 | case "$action" in 935 | menu|install|update|uninstall|start|restart|stop|showInfo|showLog) 936 | ${action} 937 | ;; 938 | *) 939 | echo " 参数错误" 940 | echo " 用法: `basename $0` [menu|install|update|uninstall|start|restart|stop|showInfo|showLog]" 941 | ;; 942 | esac 943 | -------------------------------------------------------------------------------- /shadowrocket-trojan.md: -------------------------------------------------------------------------------- 1 | Shadowrocket介绍 2 | 3 | Shadowrocket logo是一个发射的火箭,因此别名小火箭,是ios系统上一款非常知名的vpn/代理应用。小火箭支持ss/ssr/vmess/trojan等多种网络协议,功能强大,是目前极少数支持trojan协议的软件之一。软件提供中文、英文、繁体界面,简单易用。本文详细介绍Shadowrocket配置trojan教程。 4 | 5 | ![shadowrocket](https://www.hijk.pw/wp-content/uploads/2019/12/shadowrocket.jpeg) 6 | 7 | 因众所周知的原因,国内的app store无法搜索和下载小火箭。请使用一个境外apple id登录app store,没有境外apple id请从这里找:境外apple id信息汇总,境外apple id登录app store请参考:切换apple id下载其它国家和地区的应用,然后再购买和下载。 8 | 9 | 再次提醒:不要用网上找到的apple id登录icloud! 10 | 11 | 下载好小火箭后,请确保已有服务端信息,获取服务端信息请参考:获取科学上网服务端信息。 12 | 13 | 配置教程 14 | 15 | 1. 用境外apple id登录app store,然后下载小火箭(未购买过可能需要付费); 16 | 17 | 2. 桌面上点击shadowrocket图标,进入主界面: 18 | 19 | ![shadowrocket主界面](https://www.hijk.pw/wp-content/uploads/2020/03/shadowrocket%E4%B8%BB%E7%95%8C%E9%9D%A2.jpeg) 20 | 21 | 3. 点击右上角的“➕” 添加节点。进入节点配置界面: 22 | 23 | ![shadowrocket节点配置界面](https://www.hijk.pw/wp-content/uploads/2020/03/shadowrocket%E8%8A%82%E7%82%B9%E9%85%8D%E7%BD%AE%E7%95%8C%E9%9D%A2.jpeg) 24 | 25 | 26 | 4. 点击“类型”进入协议选择界面,选择最下面的trojan: 27 | 28 | ![shadowrocket选择trojan协议](https://www.hijk.pw/wp-content/uploads/2020/03/shadowrocket%E9%80%89%E6%8B%A9trojan%E5%8D%8F%E8%AE%AE.jpeg) 29 | 30 | 31 | 5. 程序跳回配置界面,服务器一栏填入域名、端口(一般是443)、密码,勾选“允许不安全”,Peer名称填写域名。除非服务端支持,不要勾选“快速打开”,不用理会转发选项(除非你知道怎么回事),备注填一个好记的名字,比如“trojan”: 32 | 33 | ![shadowrocket填写trojan信息](https://www.hijk.pw/wp-content/uploads/2020/03/shadowrocket%E5%A1%AB%E5%86%99trojan%E4%BF%A1%E6%81%AF.jpeg) 34 | 35 | 36 | 37 | 38 | 6. 填好后点击右上角的“完成”,程序提示“保存成功”,然后回到主界面,“服务器节点”下方出现刚才配置的服务器。点击“延迟测试”,可以查看服务器的延迟: 39 | 40 | ![shadowrocket节点列表](https://www.hijk.pw/wp-content/uploads/2020/03/shadowrocket%E8%8A%82%E7%82%B9%E5%88%97%E8%A1%A8.jpeg) 41 | 42 | 43 | 7. 接下来点“未连接”那一栏右边的开关,打开VPN。首次使用会弹出添加vpn确认框: 44 | 45 | ![shadowrocket vpn确认框](https://www.hijk.pw/wp-content/uploads/2019/12/shadowrocket-vpn%E7%A1%AE%E8%AE%A4%E6%A1%86.jpg) 46 | 47 | 48 | 9. 点击“允许”,弹出密码界面,输入iphone/ipad的解锁密码,软件界面的按钮变蓝表示成功开启,同时状态栏出现vpn图标: 49 | 50 | ![shadowrocket启动成功](https://www.hijk.pw/wp-content/uploads/2019/12/shadowrocket%E5%90%AF%E5%8A%A8%E6%88%90%E5%8A%9F.jpg) 51 | 52 | 如果配置没有问题且到服务端的网络正常的话,应该就可以用浏览器打开youtube: 53 | 54 | ![浏览器打开youtube](https://www.hijk.pw/wp-content/uploads/2020/03/%E6%B5%8F%E8%A7%88%E5%99%A8%E6%89%93%E5%BC%80youtube.jpeg) 55 | 56 | 57 | twitter、youtube、telegram等app应该也可以正常联网使用。 58 | 59 | 高级设置 60 | 61 | 对普通用户而言,上文的教程已经足够,能让你正常使用小火箭科学上网。对于高级玩家,可以进行一些高级配置。 62 | 63 | 主界面的“全局路由”配置,最建议的选择是“配置”,也可以根据需求选择“代理”、“直连”等; 64 | 65 | “配置”标签卡里可以管理配置文件。小火箭制定了一些默认规则,如果不满意,可以添加自己和测试自己的规则; 66 | 67 | “设置”标签里可以管理订阅服务器的行为,隐藏vpn图标等,请根据自己的需要选择。 68 | 69 | 参考链接: 70 | 71 | [Shadowrocket配置trojan教程](https://www.hijk.pw/shadowrocket-config-trojan-tutorial/) 72 | -------------------------------------------------------------------------------- /shadowrocket_online/Shadowrocket_2.1.23.ipa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/shadowrocket_online/Shadowrocket_2.1.23.ipa -------------------------------------------------------------------------------- /shadowrocket_online/assets/css/my.css: -------------------------------------------------------------------------------- 1 | /*************** 2 | ***Author: bimoe 3 | ***Blog: 9499460.com 4 | ***Time: 2018-12-24 04:27:48 5 | ***************/ 6 | html,body { 7 | height: 100%; 8 | } 9 | button { 10 | height: 40px; width: 100%; 11 | font-size: x-large; 12 | margin-top: 13px; 13 | } 14 | .wrap { 15 | min-height: 100%; 16 | } 17 | .main { 18 | padding-bottom:90px; 19 | } 20 | .uatip { 21 | background: rgba(0,0,0,0.8); 22 | text-align: center; position: fixed; 23 | left:0; 24 | top: 0; 25 | width: 100%; 26 | height: 100%; 27 | z-index: 998; 28 | display: none; 29 | } 30 | .uatip-icon { 31 | width: 52px; 32 | height: 67px; 33 | background: url(../images/ua-tip.png) no-repeat; 34 | display: block; 35 | position: absolute; 36 | right: 20px; 37 | top: 20px; 38 | } 39 | .uatip-txt { 40 | margin-top: 41 | 107px; 42 | color: #fff; 43 | font-size: 16px; 44 | line-height: 1.5; 45 | } 46 | .polaroid { 47 | margin: auto; 48 | width: 119px; 49 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 50 | margin-bottom: 20px; 51 | border-radius: 50%; 52 | } 53 | .logo { 54 | -webkit-transition: 0.4s; 55 | -webkit-transition:-webkit-transform 0.4s ease-out; 56 | transition: transform 0.4s ease-out; 57 | -moz-transition: -moz-transform 0.4s ease-out; 58 | } 59 | .logo:hover { 60 | transform: rotateZ(360deg); 61 | -webkit-transform: rotateZ(360deg); 62 | -moz-transform: rotateZ(360deg); 63 | } 64 | .footer { 65 | margin-top: -50px; 66 | height: 50px;z-index: 9999; 67 | padding: 15px 0 15px; 68 | } 69 | .btn-circle { 70 | border-radius: 50px; 71 | box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2); 72 | } 73 | .id { 74 | width: 300px; 75 | margin:0 auto; 76 | } 77 | .info { 78 | padding-left: 0px; 79 | position: relative; 80 | top: 10px; 81 | } -------------------------------------------------------------------------------- /shadowrocket_online/assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/shadowrocket_online/assets/images/favicon.ico -------------------------------------------------------------------------------- /shadowrocket_online/assets/images/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/shadowrocket_online/assets/images/icon.jpg -------------------------------------------------------------------------------- /shadowrocket_online/assets/images/ua-tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/shadowrocket_online/assets/images/ua-tip.png -------------------------------------------------------------------------------- /shadowrocket_online/assets/js/clipboard.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/shadowrocket_online/assets/js/clipboard.min.js -------------------------------------------------------------------------------- /shadowrocket_online/assets/js/my.js: -------------------------------------------------------------------------------- 1 | function weixinTip(ele){ 2 | var ua = navigator.userAgent; 3 | var Browser = /Safari/.test(ua) && !/Chrome/.test(ua); 4 | if(Browser == 0){ 5 | ele.onclick=function(e){ 6 | window.event? window.event.returnValue = false : e.preventDefault(); 7 | document.getElementById('uaTip').style.display='block'; 8 | } 9 | } else { 10 | $("#uaApp").click(function () { 11 | $("#uaApp").attr("style","display:none;"); 12 | $("#ul").attr("style","display:none;"); 13 | $("#id").attr("style","display:block;"); 14 | }); 15 | } 16 | } 17 | var btn1 = document.getElementById('uaApp'); 18 | weixinTip(btn1); 19 | $(function(){ 20 | new Clipboard("#copy-id"); 21 | }); 22 | $("#copy-id").click(function () { 23 | alert("已拷贝账号至剪切板。") ; 24 | }); 25 | $(function(){ 26 | new Clipboard("#copy-pw"); 27 | }); 28 | $("#copy-pw").click(function () { 29 | alert("已拷贝密码至剪切板。") ; 30 | }); 31 | $("#refresh").click(function () { 32 | location.reload(); 33 | }); -------------------------------------------------------------------------------- /shadowrocket_online/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Shadowrocket 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |
18 |
19 |

Shadowrocket

20 |
21 |
22 |
23 |
24 |
25 | 28 |
29 |
30 |

Version: 2.1.23 / Size: 16.6 MB

31 |
32 |
33 | 55 | 56 | 在线安装 57 |
58 | 59 |

点击右上角
选择在Safari中打开

60 |
61 |
62 |
63 |
64 |
65 |
66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
74 |
75 | 80 | 81 | 82 | 83 | 89 | 90 | 99 | 100 | -------------------------------------------------------------------------------- /shadowrocket_online/ipa.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | items 5 | 6 | 7 | assets 8 | 9 | 10 | kind 11 | software-package 12 | url 13 | https://ssrscloud.xyz/ssr/shadowrocket_online/Shadowrocket_2.1.23.ipa 14 | 15 | 16 | metadata 17 | 18 | bundle-identifier 19 | com.liguangming.Shadowrocket 20 | bundle-version 21 | 2.1.23 22 | kind 23 | software 24 | title 25 | Shadowrocket 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ssl证书.md: -------------------------------------------------------------------------------- 1 | 有时候我们为了测试会用一个临时的域名来测试,比如test.toodyao.com,测试完成后也许会置之不理,但是在90天更新证书的时候总会有这个域名的失败提示,很不爽,而且lnmp下只提供add,没有del指令,遂手动删之。 2 | 3 | 1. 找到Let’s Encrypt的目录 4 | 5 | 对于lnmp安装的用户,目录在 /etc/letsencrypt 6 | 7 | 2. 删除 8 | 9 | 需要删除 live , archive , renewal 三个目录下你想删除的域名文件/目录,都是以域名命名 10 | 11 | 另外,如果没有更新证书的话,90天后会自动过期,过期前会有邮件提醒 12 | 13 | 参考:https://zhaodi.me/remove-domains-from-lets-encrypt-ssl-tls-certificate/ 14 | 15 | ———— 16 | 17 | 2018-3-1 更新 18 | 19 | 需要删除nginx下相应域名的vhost,否则在重启的时候,会提示找不到该域名的SSL文件而启动失败,如下: 20 | 21 | ``` 22 | 23 | Starting nginx... nginx: [emerg] BIO_new_file("/etc/letsencrypt/live/test.toodyao.com/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/live/test.toodyao.com/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file) 24 | failed 25 | 26 | ``` 27 | 如果使用的是lnmp,直接键入 lnmp vhost del ,然后键入你想删除的域名即可 28 | 29 | nginx关闭的时候SSR竟然也用不了,奇怪 30 | 31 | 3 使用certbot命令删除证书 32 | 33 | 进入 /etc/letsencrypt/renewal 目录 34 | 35 | ``` 36 | [root@vultr ~]# cd /etc/letsencrypt/renewal 37 | 38 | [root@vultr live]# ls 39 | README www.xiaokeli.me 40 | 41 | [root@vultr renewal]# certbot delete --cert-name www.xiaokeli.me 42 | Saving debug log to /var/log/letsencrypt/letsencrypt.log 43 | 44 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 45 | Deleted all files relating to certificate www.xiaokeli.me 46 | ``` 47 | 48 | 4 certbot更新证书 49 | 50 | ``` 51 | [root@vultr certbot]# service nginx stop 52 | Stoping nginx... done 53 | [root@vultr certbot]# certbot renew 54 | Saving debug log to /var/log/letsencrypt/letsencrypt.log 55 | 56 | [root@vultr certbot]# service nginx start 57 | Starting nginx... done 58 | ``` 59 | -------------------------------------------------------------------------------- /ssr443.md: -------------------------------------------------------------------------------- 1 | 2 | SSR 443和80 端口配置实例 3 | 4 | 示例1: 5 | 6 | ``` 7 | "additional_ports" : { "80": { "passwd": "pubpassword", "method": "aes-128-ctr", "protocol": "auth_aes128_md5", "protocol_param": "#", "obfs": "tls1.2_ticket_auth_compatible", "obfs_param": "" }, "443": { "passwd": "pubpassword", "method": "aes-128-ctr", "protocol": "auth_aes128_md5", "protocol_param": "#", "obfs": "tls1.2_ticket_auth_compatible", "obfs_param": "" } }, 8 | 9 | 10 | ``` 11 | 12 | 13 | 示例2 14 | 15 | ``` 16 | "additional_ports" : {"443": {"passwd": "xiaokeli.info", "method": "aes-128-ctr", "protocol": "auth_aes128_md5", "protocol_param": "#", "obfs": "tls1.2_ticket_auth", "obfs_param": "" } }, 17 | ``` 18 | -------------------------------------------------------------------------------- /telegram/assets/css/my.css: -------------------------------------------------------------------------------- 1 | /*************** 2 | ***Author: bimoe 3 | ***Blog: 9499460.com 4 | ***Time: 2018-12-24 04:27:48 5 | ***************/ 6 | html,body { 7 | height: 100%; 8 | } 9 | button { 10 | height: 40px; width: 100%; 11 | font-size: x-large; 12 | margin-top: 13px; 13 | } 14 | .wrap { 15 | min-height: 100%; 16 | } 17 | .main { 18 | padding-bottom:90px; 19 | } 20 | .uatip { 21 | background: rgba(0,0,0,0.8); 22 | text-align: center; position: fixed; 23 | left:0; 24 | top: 0; 25 | width: 100%; 26 | height: 100%; 27 | z-index: 998; 28 | display: none; 29 | } 30 | .uatip-icon { 31 | width: 52px; 32 | height: 67px; 33 | background: url(../images/ua-tip.png) no-repeat; 34 | display: block; 35 | position: absolute; 36 | right: 20px; 37 | top: 20px; 38 | } 39 | .uatip-txt { 40 | margin-top: 41 | 107px; 42 | color: #fff; 43 | font-size: 16px; 44 | line-height: 1.5; 45 | } 46 | .polaroid { 47 | margin: auto; 48 | width: 119px; 49 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 50 | margin-bottom: 20px; 51 | border-radius: 50%; 52 | } 53 | .logo { 54 | -webkit-transition: 0.4s; 55 | -webkit-transition:-webkit-transform 0.4s ease-out; 56 | transition: transform 0.4s ease-out; 57 | -moz-transition: -moz-transform 0.4s ease-out; 58 | } 59 | .logo:hover { 60 | transform: rotateZ(360deg); 61 | -webkit-transform: rotateZ(360deg); 62 | -moz-transform: rotateZ(360deg); 63 | } 64 | .footer { 65 | margin-top: -50px; 66 | height: 50px;z-index: 9999; 67 | padding: 15px 0 15px; 68 | } 69 | .btn-circle { 70 | border-radius: 50px; 71 | box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2); 72 | } 73 | .id { 74 | width: 300px; 75 | margin:0 auto; 76 | } 77 | .info { 78 | padding-left: 0px; 79 | position: relative; 80 | top: 10px; 81 | } -------------------------------------------------------------------------------- /telegram/assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/telegram/assets/images/favicon.ico -------------------------------------------------------------------------------- /telegram/assets/images/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/telegram/assets/images/icon.jpg -------------------------------------------------------------------------------- /telegram/assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/telegram/assets/images/icon.png -------------------------------------------------------------------------------- /telegram/assets/images/ua-tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/telegram/assets/images/ua-tip.png -------------------------------------------------------------------------------- /telegram/assets/js/clipboard.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wandou911/ssr/e0d8bb2fe7c86e48bee1115380aebd20d2850a9f/telegram/assets/js/clipboard.min.js -------------------------------------------------------------------------------- /telegram/assets/js/my.js: -------------------------------------------------------------------------------- 1 | function weixinTip(ele){ 2 | var ua = navigator.userAgent; 3 | var Browser = /Safari/.test(ua) && !/Chrome/.test(ua); 4 | if(Browser == 0){ 5 | ele.onclick=function(e){ 6 | window.event? window.event.returnValue = false : e.preventDefault(); 7 | document.getElementById('uaTip').style.display='block'; 8 | } 9 | } else { 10 | $("#uaApp").click(function () { 11 | $("#uaApp").attr("style","display:none;"); 12 | $("#ul").attr("style","display:none;"); 13 | $("#id").attr("style","display:block;"); 14 | }); 15 | } 16 | } 17 | var btn1 = document.getElementById('uaApp'); 18 | weixinTip(btn1); 19 | $(function(){ 20 | new Clipboard("#copy-id"); 21 | }); 22 | $("#copy-id").click(function () { 23 | alert("已拷贝账号至剪切板。") ; 24 | }); 25 | $(function(){ 26 | new Clipboard("#copy-pw"); 27 | }); 28 | $("#copy-pw").click(function () { 29 | alert("已拷贝密码至剪切板。") ; 30 | }); 31 | $("#refresh").click(function () { 32 | location.reload(); 33 | }); -------------------------------------------------------------------------------- /telegram/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Telegram 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |
18 |
19 |

Telegram

20 |
21 |
22 |
23 |
24 |
25 | 28 |
29 |
30 |

Version: 5.10 / Size: 116.6 MB

31 |
32 |
33 | 55 | 56 | 在线安装 57 |
58 | 59 |

点击右上角
选择在Safari中打开

60 |
61 |
62 |
63 |
64 |
65 |
66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
74 |
75 | 80 | 81 | 82 | 83 | 89 | 90 | 99 | 100 | -------------------------------------------------------------------------------- /telegram/ipa.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | items 6 | 7 | 8 | assets 9 | 10 | 11 | kind 12 | software-package 13 | url 14 | https://ssrscloud.xyz/ipa/Telegram_5.10.ipa 15 | 16 | 17 | metadata 18 | 19 | bundle-identifier 20 | ph.telegra.Telegraph 21 | bundle-version 22 | 5.10 23 | kind 24 | software 25 | title 26 | Telegram 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /trojan-go.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # trojan-go一键安装脚本 3 | # Author: hijk 4 | 5 | 6 | RED="\033[31m" # Error message 7 | GREEN="\033[32m" # Success message 8 | YELLOW="\033[33m" # Warning message 9 | BLUE="\033[36m" # Info message 10 | PLAIN='\033[0m' 11 | 12 | OS=`hostnamectl | grep -i system | cut -d: -f2` 13 | 14 | V6_PROXY="" 15 | IP=`curl -sL -4 ip.sb` 16 | if [[ "$?" != "0" ]]; then 17 | IP=`curl -sL -6 ip.sb` 18 | V6_PROXY="https://gh.hijk.art/" 19 | fi 20 | 21 | BT="false" 22 | NGINX_CONF_PATH="/etc/nginx/conf.d/" 23 | 24 | res=`which bt 2>/dev/null` 25 | if [[ "$res" != "" ]]; then 26 | BT="true" 27 | NGINX_CONF_PATH="/www/server/panel/vhost/nginx/" 28 | fi 29 | 30 | # 以下网站是随机从Google上找到的无广告小说网站,不喜欢请改成其他网址,以http或https开头 31 | # 搭建好后无法打开伪装域名,可能是反代小说网站挂了,请在网站留言,或者Github发issue,以便替换新的网站 32 | SITES=( 33 | http://www.zhuizishu.com/ 34 | http://xs.56dyc.com/ 35 | #http://www.xiaoshuosk.com/ 36 | #https://www.quledu.net/ 37 | http://www.ddxsku.com/ 38 | http://www.biqu6.com/ 39 | https://www.wenshulou.cc/ 40 | #http://www.auutea.com/ 41 | http://www.55shuba.com/ 42 | http://www.39shubao.com/ 43 | https://www.23xsw.cc/ 44 | #https://www.huanbige.com/ 45 | https://www.jueshitangmen.info/ 46 | https://www.zhetian.org/ 47 | http://www.bequgexs.com/ 48 | http://www.tjwl.com/ 49 | ) 50 | 51 | ZIP_FILE="trojan-go" 52 | CONFIG_FILE="/etc/trojan-go/config.json" 53 | 54 | WS="false" 55 | 56 | colorEcho() { 57 | echo -e "${1}${@:2}${PLAIN}" 58 | } 59 | 60 | checkSystem() { 61 | result=$(id | awk '{print $1}') 62 | if [[ $result != "uid=0(root)" ]]; then 63 | echo -e " ${RED}请以root身份执行该脚本${PLAIN}" 64 | exit 1 65 | fi 66 | 67 | res=`which yum 2>/dev/null` 68 | if [[ "$?" != "0" ]]; then 69 | res=`which apt 2>/dev/null` 70 | if [[ "$?" != "0" ]]; then 71 | echo -e " ${RED}不受支持的Linux系统${PLAIN}" 72 | exit 1 73 | fi 74 | PMT="apt" 75 | CMD_INSTALL="apt install -y " 76 | CMD_REMOVE="apt remove -y " 77 | CMD_UPGRADE="apt update; apt upgrade -y; apt autoremove -y" 78 | else 79 | PMT="yum" 80 | CMD_INSTALL="yum install -y " 81 | CMD_REMOVE="yum remove -y " 82 | CMD_UPGRADE="yum update -y" 83 | fi 84 | res=`which systemctl 2>/dev/null` 85 | if [[ "$?" != "0" ]]; then 86 | echo -e " ${RED}系统版本过低,请升级到最新版本${PLAIN}" 87 | exit 1 88 | fi 89 | } 90 | 91 | status() { 92 | trojan_cmd="$(command -v trojan-go)" 93 | if [[ "$trojan_cmd" = "" ]]; then 94 | echo 0 95 | return 96 | fi 97 | if [[ ! -f $CONFIG_FILE ]]; then 98 | echo 1 99 | return 100 | fi 101 | port=`grep local_port $CONFIG_FILE|cut -d: -f2| tr -d \",' '` 102 | res=`ss -ntlp| grep ${port} | grep trojan-go` 103 | if [[ -z "$res" ]]; then 104 | echo 2 105 | else 106 | echo 3 107 | fi 108 | } 109 | 110 | statusText() { 111 | res=`status` 112 | case $res in 113 | 2) 114 | echo -e ${GREEN}已安装${PLAIN} ${RED}未运行${PLAIN} 115 | ;; 116 | 3) 117 | echo -e ${GREEN}已安装${PLAIN} ${GREEN}正在运行${PLAIN} 118 | ;; 119 | *) 120 | echo -e ${RED}未安装${PLAIN} 121 | ;; 122 | esac 123 | } 124 | 125 | getVersion() { 126 | VERSION=`curl -fsSL ${V6_PROXY}https://api.github.com/repos/p4gefau1t/trojan-go/releases | grep tag_name | sed -E 's/.*"v(.*)".*/\1/'| head -n1` 127 | if [[ ${VERSION:0:1} != "v" ]];then 128 | VERSION="v${VERSION}" 129 | fi 130 | } 131 | 132 | archAffix() { 133 | case "${1:-"$(uname -m)"}" in 134 | i686|i386) 135 | echo '386' 136 | ;; 137 | x86_64|amd64) 138 | echo 'amd64' 139 | ;; 140 | *armv7*|armv6l) 141 | echo 'armv7' 142 | ;; 143 | *armv8*|aarch64) 144 | echo 'armv8' 145 | ;; 146 | *armv6*) 147 | echo 'armv6' 148 | ;; 149 | *arm*) 150 | echo 'arm' 151 | ;; 152 | *mips64le*) 153 | echo 'mips64le' 154 | ;; 155 | *mips64*) 156 | echo 'mips64' 157 | ;; 158 | *mipsle*) 159 | echo 'mipsle-softfloat' 160 | ;; 161 | *mips*) 162 | echo 'mips-softfloat' 163 | ;; 164 | *) 165 | return 1 166 | ;; 167 | esac 168 | 169 | return 0 170 | } 171 | 172 | getData() { 173 | echo "" 174 | can_change=$1 175 | if [[ "$can_change" != "yes" ]]; then 176 | echo " trojan-go一键脚本,运行之前请确认如下条件已经具备:" 177 | echo -e " ${RED}1. 一个伪装域名${PLAIN}" 178 | echo -e " ${RED}2. 伪装域名DNS解析指向当前服务器ip(${IP})${PLAIN}" 179 | echo -e " 3. 如果/root目录下有 ${GREEN}trojan-go.pem${PLAIN} 和 ${GREEN}trojan-go.key${PLAIN} 证书密钥文件,无需理会条件2" 180 | echo " " 181 | read -p " 确认满足按y,按其他退出脚本:" answer 182 | if [[ "${answer,,}" != "y" ]]; then 183 | exit 0 184 | fi 185 | 186 | echo "" 187 | while true 188 | do 189 | read -p " 请输入伪装域名:" DOMAIN 190 | if [[ -z "${DOMAIN}" ]]; then 191 | echo -e " ${RED}伪装域名输入错误,请重新输入!${PLAIN}" 192 | else 193 | break 194 | fi 195 | done 196 | colorEcho $BLUE " 伪装域名(host):$DOMAIN" 197 | 198 | echo "" 199 | DOMAIN=${DOMAIN,,} 200 | if [[ -f ~/trojan-go.pem && -f ~/trojan-go.key ]]; then 201 | echo -e "${GREEN} 检测到自有证书,将使用其部署${PLAIN}" 202 | CERT_FILE="/etc/trojan-go/${DOMAIN}.pem" 203 | KEY_FILE="/etc/trojan-go/${DOMAIN}.key" 204 | else 205 | resolve=`curl -sL https:///hostip.php?d=${DOMAIN}` 206 | res=`echo -n ${resolve} | grep ${IP}` 207 | if [[ -z "${res}" ]]; then 208 | echo " ${DOMAIN} 解析结果:${resolve}" 209 | echo -e " ${RED}伪装域名未解析到当前服务器IP(${IP})!${PLAIN}" 210 | exit 1 211 | fi 212 | fi 213 | else 214 | DOMAIN=`grep sni $CONFIG_FILE | cut -d\" -f4` 215 | CERT_FILE=`grep cert $CONFIG_FILE | cut -d\" -f4` 216 | KEY_FILE=`grep key $CONFIG_FILE | cut -d\" -f4` 217 | read -p " 是否转换成WS版本?[y/n]" answer 218 | if [[ "${answer,,}" = "y" ]]; then 219 | WS="true" 220 | fi 221 | fi 222 | 223 | echo "" 224 | read -p " 请设置trojan-go密码(不输则随机生成):" PASSWORD 225 | [[ -z "$PASSWORD" ]] && PASSWORD=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1` 226 | colorEcho $BLUE " trojan-go密码:$PASSWORD" 227 | echo "" 228 | while true 229 | do 230 | read -p " 是否需要再设置一组密码?[y/n]" answer 231 | if [[ ${answer,,} = "n" ]]; then 232 | break 233 | fi 234 | read -p " 请设置trojan-go密码(不输则随机生成):" pass 235 | [[ -z "$pass" ]] && pass=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1` 236 | echo "" 237 | colorEcho $BLUE " trojan-go密码:$pass" 238 | PASSWORD="${PASSWORD}\",\"$pass" 239 | done 240 | 241 | echo "" 242 | read -p " 请输入trojan-go端口[100-65535的一个数字,默认443]:" PORT 243 | [[ -z "${PORT}" ]] && PORT=443 244 | if [[ "${PORT:0:1}" = "0" ]]; then 245 | echo -e "${RED}端口不能以0开头${PLAIN}" 246 | exit 1 247 | fi 248 | colorEcho $BLUE " trojan-go端口:$PORT" 249 | 250 | if [[ ${WS} = "true" ]]; then 251 | echo "" 252 | while true 253 | do 254 | read -p " 请输入伪装路径,以/开头(不懂请直接回车):" WSPATH 255 | if [[ -z "${WSPATH}" ]]; then 256 | len=`shuf -i5-12 -n1` 257 | ws=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $len | head -n 1` 258 | WSPATH="/$ws" 259 | break 260 | elif [[ "${WSPATH:0:1}" != "/" ]]; then 261 | echo " 伪装路径必须以/开头!" 262 | elif [[ "${WSPATH}" = "/" ]]; then 263 | echo " 不能使用根路径!" 264 | else 265 | break 266 | fi 267 | done 268 | echo "" 269 | colorEcho $BLUE " ws路径:$WSPATH" 270 | fi 271 | 272 | echo "" 273 | colorEcho $BLUE " 请选择伪装站类型:" 274 | echo " 1) 静态网站(位于/usr/share/nginx/html)" 275 | echo " 2) 小说站(随机选择)" 276 | echo " 3) 美女站(https://imeizi.me)" 277 | echo " 4) 高清壁纸站(https://bing.imeizi.me)" 278 | echo " 5) 自定义反代站点(需以http或者https开头)" 279 | read -p " 请选择伪装网站类型[默认:高清壁纸站]" answer 280 | if [[ -z "$answer" ]]; then 281 | PROXY_URL="https://bing.imeizi.me" 282 | else 283 | case $answer in 284 | 1) 285 | PROXY_URL="" 286 | ;; 287 | 2) 288 | len=${#SITES[@]} 289 | ((len--)) 290 | while true 291 | do 292 | index=`shuf -i0-${len} -n1` 293 | PROXY_URL=${SITES[$index]} 294 | host=`echo ${PROXY_URL} | cut -d/ -f3` 295 | ip=`curl -sL https://hijk.art/hostip.php?d=${host}` 296 | res=`echo -n ${ip} | grep ${host}` 297 | if [[ "${res}" = "" ]]; then 298 | echo "$ip $host" >> /etc/hosts 299 | break 300 | fi 301 | done 302 | ;; 303 | 3) 304 | PROXY_URL="https://imeizi.me" 305 | ;; 306 | 4) 307 | PROXY_URL="https://bing.imeizi.me" 308 | ;; 309 | 5) 310 | read -p " 请输入反代站点(以http或者https开头):" PROXY_URL 311 | if [[ -z "$PROXY_URL" ]]; then 312 | colorEcho $RED " 请输入反代网站!" 313 | exit 1 314 | elif [[ "${PROXY_URL:0:4}" != "http" ]]; then 315 | colorEcho $RED " 反代网站必须以http或https开头!" 316 | exit 1 317 | fi 318 | ;; 319 | *) 320 | colorEcho $RED " 请输入正确的选项!" 321 | exit 1 322 | esac 323 | fi 324 | REMOTE_HOST=`echo ${PROXY_URL} | cut -d/ -f3` 325 | echo "" 326 | colorEcho $BLUE " 伪装网站:$PROXY_URL" 327 | 328 | echo "" 329 | colorEcho $BLUE " 是否允许搜索引擎爬取网站?[默认:不允许]" 330 | echo " y)允许,会有更多ip请求网站,但会消耗一些流量,vps流量充足情况下推荐使用" 331 | echo " n)不允许,爬虫不会访问网站,访问ip比较单一,但能节省vps流量" 332 | read -p " 请选择:[y/n]" answer 333 | if [[ -z "$answer" ]]; then 334 | ALLOW_SPIDER="n" 335 | elif [[ "${answer,,}" = "y" ]]; then 336 | ALLOW_SPIDER="y" 337 | else 338 | ALLOW_SPIDER="n" 339 | fi 340 | echo "" 341 | colorEcho $BLUE " 允许搜索引擎:$ALLOW_SPIDER" 342 | 343 | echo "" 344 | read -p " 是否安装BBR(默认安装)?[y/n]:" NEED_BBR 345 | [[ -z "$NEED_BBR" ]] && NEED_BBR=y 346 | [[ "$NEED_BBR" = "Y" ]] && NEED_BBR=y 347 | colorEcho $BLUE " 安装BBR:$NEED_BBR" 348 | } 349 | 350 | installNginx() { 351 | echo "" 352 | colorEcho $BLUE " 安装nginx..." 353 | if [[ "$BT" = "false" ]]; then 354 | if [[ "$PMT" = "yum" ]]; then 355 | $CMD_INSTALL epel-release 356 | if [[ "$?" != "0" ]]; then 357 | echo '[nginx-stable] 358 | name=nginx stable repo 359 | baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ 360 | gpgcheck=1 361 | enabled=1 362 | gpgkey=https://nginx.org/keys/nginx_signing.key 363 | module_hotfixes=true' > /etc/yum.repos.d/nginx.repo 364 | fi 365 | fi 366 | $CMD_INSTALL nginx 367 | if [[ "$?" != "0" ]]; then 368 | colorEcho $RED " Nginx安装失败,请到 https://hijk.art 反馈" 369 | exit 1 370 | fi 371 | systemctl enable nginx 372 | else 373 | res=`which nginx 2>/dev/null` 374 | if [[ "$?" != "0" ]]; then 375 | colorEcho $RED " 您安装了宝塔,请在宝塔后台安装nginx后再运行本脚本" 376 | exit 1 377 | fi 378 | fi 379 | } 380 | 381 | startNginx() { 382 | if [[ "$BT" = "false" ]]; then 383 | systemctl start nginx 384 | else 385 | nginx -c /www/server/nginx/conf/nginx.conf 386 | fi 387 | } 388 | 389 | stopNginx() { 390 | if [[ "$BT" = "false" ]]; then 391 | systemctl stop nginx 392 | else 393 | res=`ps aux | grep -i nginx` 394 | if [[ "$res" != "" ]]; then 395 | nginx -s stop 396 | fi 397 | fi 398 | } 399 | 400 | getCert() { 401 | mkdir -p /etc/trojan-go 402 | if [[ -z ${CERT_FILE+x} ]]; then 403 | stopNginx 404 | systemctl stop trojan-go 405 | sleep 2 406 | res=`ss -ntlp| grep -E ':80 |:443 '` 407 | if [[ "${res}" != "" ]]; then 408 | echo -e "${RED} 其他进程占用了80或443端口,请先关闭再运行一键脚本${PLAIN}" 409 | echo " 端口占用信息如下:" 410 | echo ${res} 411 | exit 1 412 | fi 413 | 414 | $CMD_INSTALL socat openssl 415 | if [[ "$PMT" = "yum" ]]; then 416 | $CMD_INSTALL cronie 417 | systemctl start crond 418 | systemctl enable crond 419 | else 420 | $CMD_INSTALL cron 421 | systemctl start cron 422 | systemctl enable cron 423 | fi 424 | curl -sL https://get.acme.sh | sh -s email=hijk.pw@protonmail.sh 425 | source ~/.bashrc 426 | ~/.acme.sh/acme.sh --upgrade --auto-upgrade --force 427 | ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt --force 428 | if [[ "$BT" = "false" ]]; then 429 | ~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 --pre-hook "systemctl stop nginx" --post-hook "systemctl restart nginx" --standalone 430 | else 431 | ~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 --pre-hook "nginx -s stop || { echo -n ''; }" --post-hook "nginx -c /www/server/nginx/conf/nginx.conf || { echo -n ''; }" --standalone 432 | fi 433 | [[ -f ~/.acme.sh/${DOMAIN}_ecc/ca.cer ]] || { 434 | colorEcho $RED " 获取证书失败,请复制上面的红色文字到 https://hijk.art 反馈" 435 | exit 1 436 | } 437 | CERT_FILE="/etc/trojan-go/${DOMAIN}.pem" 438 | KEY_FILE="/etc/trojan-go/${DOMAIN}.key" 439 | ~/.acme.sh/acme.sh --install-cert -d $DOMAIN --ecc \ 440 | --key-file $KEY_FILE \ 441 | --fullchain-file $CERT_FILE \ 442 | --reloadcmd "service nginx force-reload" 443 | [[ -f $CERT_FILE && -f $KEY_FILE ]] || { 444 | colorEcho $RED " 获取证书失败,请到 https://hijk.art 反馈" 445 | exit 1 446 | } 447 | else 448 | cp ~/trojan-go.pem /etc/trojan-go/${DOMAIN}.pem 449 | cp ~/trojan-go.key /etc/trojan-go/${DOMAIN}.key 450 | fi 451 | } 452 | 453 | configNginx() { 454 | mkdir -p /usr/share/nginx/html 455 | if [[ "$ALLOW_SPIDER" = "n" ]]; then 456 | echo 'User-Agent: *' > /usr/share/nginx/html/robots.txt 457 | echo 'Disallow: /' >> /usr/share/nginx/html/robots.txt 458 | ROBOT_CONFIG=" location = /robots.txt {}" 459 | else 460 | ROBOT_CONFIG="" 461 | fi 462 | if [[ "$BT" = "false" ]]; then 463 | if [[ ! -f /etc/nginx/nginx.conf.bak ]]; then 464 | mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak 465 | fi 466 | res=`id nginx 2>/dev/null` 467 | if [[ "$?" != "0" ]]; then 468 | user="www-data" 469 | else 470 | user="nginx" 471 | fi 472 | cat > /etc/nginx/nginx.conf<<-EOF 473 | user $user; 474 | worker_processes auto; 475 | error_log /var/log/nginx/error.log; 476 | pid /run/nginx.pid; 477 | 478 | # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 479 | include /usr/share/nginx/modules/*.conf; 480 | 481 | events { 482 | worker_connections 1024; 483 | } 484 | 485 | http { 486 | log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" ' 487 | '\$status \$body_bytes_sent "\$http_referer" ' 488 | '"\$http_user_agent" "\$http_x_forwarded_for"'; 489 | 490 | access_log /var/log/nginx/access.log main; 491 | server_tokens off; 492 | 493 | sendfile on; 494 | tcp_nopush on; 495 | tcp_nodelay on; 496 | keepalive_timeout 65; 497 | types_hash_max_size 2048; 498 | gzip on; 499 | 500 | include /etc/nginx/mime.types; 501 | default_type application/octet-stream; 502 | 503 | # Load modular configuration files from the /etc/nginx/conf.d directory. 504 | # See http://nginx.org/en/docs/ngx_core_module.html#include 505 | # for more information. 506 | include /etc/nginx/conf.d/*.conf; 507 | } 508 | EOF 509 | fi 510 | 511 | mkdir -p $NGINX_CONF_PATH 512 | if [[ "$PROXY_URL" = "" ]]; then 513 | cat > $NGINX_CONF_PATH${DOMAIN}.conf<<-EOF 514 | server { 515 | listen 80; 516 | listen [::]:80; 517 | server_name ${DOMAIN}; 518 | root /usr/share/nginx/html; 519 | 520 | $ROBOT_CONFIG 521 | } 522 | EOF 523 | else 524 | cat > $NGINX_CONF_PATH${DOMAIN}.conf<<-EOF 525 | server { 526 | listen 80; 527 | listen [::]:80; 528 | server_name ${DOMAIN}; 529 | root /usr/share/nginx/html; 530 | location / { 531 | proxy_ssl_server_name on; 532 | proxy_pass $PROXY_URL; 533 | proxy_set_header Accept-Encoding ''; 534 | sub_filter "$REMOTE_HOST" "$DOMAIN"; 535 | sub_filter_once off; 536 | } 537 | 538 | $ROBOT_CONFIG 539 | } 540 | EOF 541 | fi 542 | } 543 | 544 | downloadFile() { 545 | SUFFIX=`archAffix` 546 | DOWNLOAD_URL="${V6_PROXY}https://github.com/p4gefau1t/trojan-go/releases/download/${VERSION}/trojan-go-linux-${SUFFIX}.zip" 547 | wget -O /tmp/${ZIP_FILE}.zip $DOWNLOAD_URL 548 | if [[ ! -f /tmp/${ZIP_FILE}.zip ]]; then 549 | echo -e "{$RED} trojan-go安装文件下载失败,请检查网络或重试${PLAIN}" 550 | exit 1 551 | fi 552 | } 553 | 554 | installTrojan() { 555 | rm -rf /tmp/${ZIP_FILE} 556 | unzip /tmp/${ZIP_FILE}.zip -d /tmp/${ZIP_FILE} 557 | cp /tmp/${ZIP_FILE}/trojan-go /usr/bin 558 | cp /tmp/${ZIP_FILE}/example/trojan-go.service /etc/systemd/system/ 559 | sed -i '/User=nobody/d' /etc/systemd/system/trojan-go.service 560 | systemctl daemon-reload 561 | 562 | systemctl enable trojan-go 563 | rm -rf /tmp/${ZIP_FILE} 564 | 565 | colorEcho $BLUE " trojan-go安装成功!" 566 | } 567 | 568 | configTrojan() { 569 | mkdir -p /etc/trojan-go 570 | cat > $CONFIG_FILE <<-EOF 571 | { 572 | "run_type": "server", 573 | "local_addr": "::", 574 | "local_port": ${PORT}, 575 | "remote_addr": "127.0.0.1", 576 | "remote_port": 80, 577 | "password": [ 578 | "$PASSWORD" 579 | ], 580 | "ssl": { 581 | "cert": "${CERT_FILE}", 582 | "key": "${KEY_FILE}", 583 | "sni": "${DOMAIN}", 584 | "alpn": [ 585 | "http/1.1" 586 | ], 587 | "session_ticket": true, 588 | "reuse_session": true, 589 | "fallback_addr": "127.0.0.1", 590 | "fallback_port": 80 591 | }, 592 | "tcp": { 593 | "no_delay": true, 594 | "keep_alive": true, 595 | "prefer_ipv4": false 596 | }, 597 | "mux": { 598 | "enabled": false, 599 | "concurrency": 8, 600 | "idle_timeout": 60 601 | }, 602 | "websocket": { 603 | "enabled": ${WS}, 604 | "path": "${WSPATH}", 605 | "host": "${DOMAIN}" 606 | }, 607 | "mysql": { 608 | "enabled": false, 609 | "server_addr": "localhost", 610 | "server_port": 3306, 611 | "database": "", 612 | "username": "", 613 | "password": "", 614 | "check_rate": 60 615 | } 616 | } 617 | EOF 618 | } 619 | 620 | setSelinux() { 621 | if [[ -s /etc/selinux/config ]] && grep 'SELINUX=enforcing' /etc/selinux/config; then 622 | sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config 623 | setenforce 0 624 | fi 625 | } 626 | 627 | setFirewall() { 628 | res=`which firewall-cmd 2>/dev/null` 629 | if [[ $? -eq 0 ]]; then 630 | systemctl status firewalld > /dev/null 2>&1 631 | if [[ $? -eq 0 ]];then 632 | firewall-cmd --permanent --add-service=http 633 | firewall-cmd --permanent --add-service=https 634 | if [[ "$PORT" != "443" ]]; then 635 | firewall-cmd --permanent --add-port=${PORT}/tcp 636 | fi 637 | firewall-cmd --reload 638 | else 639 | nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'` 640 | if [[ "$nl" != "3" ]]; then 641 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT 642 | iptables -I INPUT -p tcp --dport 443 -j ACCEPT 643 | if [[ "$PORT" != "443" ]]; then 644 | iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT 645 | fi 646 | fi 647 | fi 648 | else 649 | res=`which iptables 2>/dev/null` 650 | if [[ $? -eq 0 ]]; then 651 | nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'` 652 | if [[ "$nl" != "3" ]]; then 653 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT 654 | iptables -I INPUT -p tcp --dport 443 -j ACCEPT 655 | if [[ "$PORT" != "443" ]]; then 656 | iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT 657 | fi 658 | fi 659 | else 660 | res=`which ufw 2>/dev/null` 661 | if [[ $? -eq 0 ]]; then 662 | res=`ufw status | grep -i inactive` 663 | if [[ "$res" = "" ]]; then 664 | ufw allow http/tcp 665 | ufw allow https/tcp 666 | if [[ "$PORT" != "443" ]]; then 667 | ufw allow ${PORT}/tcp 668 | fi 669 | fi 670 | fi 671 | fi 672 | fi 673 | } 674 | 675 | installBBR() { 676 | if [[ "$NEED_BBR" != "y" ]]; then 677 | INSTALL_BBR=false 678 | return 679 | fi 680 | result=$(lsmod | grep bbr) 681 | if [[ "$result" != "" ]]; then 682 | echo " BBR模块已安装" 683 | INSTALL_BBR=false 684 | return 685 | fi 686 | res=`hostnamectl | grep -i openvz` 687 | if [[ "$res" != "" ]]; then 688 | echo " openvz机器,跳过安装" 689 | INSTALL_BBR=false 690 | return 691 | fi 692 | 693 | echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf 694 | echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf 695 | sysctl -p 696 | result=$(lsmod | grep bbr) 697 | if [[ "$result" != "" ]]; then 698 | echo " BBR模块已启用" 699 | INSTALL_BBR=false 700 | return 701 | fi 702 | 703 | colorEcho $BLUE " 安装BBR模块..." 704 | if [[ "$PMT" = "yum" ]]; then 705 | if [[ "$V6_PROXY" = "" ]]; then 706 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 707 | rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 708 | $CMD_INSTALL --enablerepo=elrepo-kernel kernel-ml 709 | $CMD_REMOVE kernel-3.* 710 | grub2-set-default 0 711 | echo "tcp_bbr" >> /etc/modules-load.d/modules.conf 712 | INSTALL_BBR=true 713 | fi 714 | else 715 | $CMD_INSTALL --install-recommends linux-generic-hwe-16.04 716 | grub-set-default 0 717 | echo "tcp_bbr" >> /etc/modules-load.d/modules.conf 718 | INSTALL_BBR=true 719 | fi 720 | } 721 | 722 | install() { 723 | getData 724 | 725 | $PMT clean all 726 | [[ "$PMT" = "apt" ]] && $PMT update 727 | #echo $CMD_UPGRADE | bash 728 | $CMD_INSTALL wget vim unzip tar gcc openssl 729 | $CMD_INSTALL net-tools 730 | if [[ "$PMT" = "apt" ]]; then 731 | $CMD_INSTALL libssl-dev g++ 732 | fi 733 | res=`which unzip 2>/dev/null` 734 | if [[ $? -ne 0 ]]; then 735 | echo -e " ${RED}unzip安装失败,请检查网络${PLAIN}" 736 | exit 1 737 | fi 738 | 739 | installNginx 740 | setFirewall 741 | getCert 742 | configNginx 743 | 744 | echo " 安装trojan-go..." 745 | getVersion 746 | downloadFile 747 | installTrojan 748 | configTrojan 749 | 750 | setSelinux 751 | installBBR 752 | 753 | start 754 | showInfo 755 | 756 | bbrReboot 757 | } 758 | 759 | bbrReboot() { 760 | if [[ "${INSTALL_BBR}" == "true" ]]; then 761 | echo 762 | echo " 为使BBR模块生效,系统将在30秒后重启" 763 | echo 764 | echo -e " 您可以按 ctrl + c 取消重启,稍后输入 ${RED}reboot${PLAIN} 重启系统" 765 | sleep 30 766 | reboot 767 | fi 768 | } 769 | 770 | update() { 771 | res=`status` 772 | if [[ $res -lt 2 ]]; then 773 | echo -e " ${RED}trojan-go未安装,请先安装!${PLAIN}" 774 | return 775 | fi 776 | 777 | echo " 安装最新版trojan-go" 778 | getVersion 779 | downloadFile 780 | installTrojan 781 | 782 | stop 783 | start 784 | } 785 | 786 | uninstall() { 787 | res=`status` 788 | if [[ $res -lt 2 ]]; then 789 | echo -e " ${RED}trojan-go未安装,请先安装!${PLAIN}" 790 | return 791 | fi 792 | 793 | echo "" 794 | read -p " 确定卸载trojan-go?[y/n]:" answer 795 | if [[ "${answer,,}" = "y" ]]; then 796 | domain=`grep sni $CONFIG_FILE | cut -d\" -f4` 797 | 798 | stop 799 | rm -rf /etc/trojan-go 800 | rm -rf /usr/bin/trojan-go 801 | systemctl disable trojan-go 802 | rm -rf /etc/systemd/system/trojan-go.service 803 | 804 | if [[ "$BT" = "false" ]]; then 805 | systemctl disable nginx 806 | $CMD_REMOVE nginx 807 | if [[ "$PMT" = "apt" ]]; then 808 | $CMD_REMOVE nginx-common 809 | fi 810 | rm -rf /etc/nginx/nginx.conf 811 | if [[ -f /etc/nginx/nginx.conf.bak ]]; then 812 | mv /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf 813 | fi 814 | fi 815 | 816 | rm -rf $NGINX_CONF_PATH${domain}.conf 817 | ~/.acme.sh/acme.sh --uninstall 818 | echo -e " ${GREEN}trojan-go卸载成功${PLAIN}" 819 | fi 820 | } 821 | 822 | start() { 823 | res=`status` 824 | if [[ $res -lt 2 ]]; then 825 | echo -e "${RED}trojan-go未安装,请先安装!${PLAIN}" 826 | return 827 | fi 828 | 829 | stopNginx 830 | startNginx 831 | systemctl restart trojan-go 832 | sleep 2 833 | port=`grep local_port $CONFIG_FILE|cut -d: -f2| tr -d \",' '` 834 | res=`ss -ntlp| grep ${port} | grep trojan-go` 835 | if [[ "$res" = "" ]]; then 836 | colorEcho $RED " trojan-go启动失败,请检查端口是否被占用!" 837 | else 838 | colorEcho $BLUE " trojan-go启动成功" 839 | fi 840 | } 841 | 842 | stop() { 843 | stopNginx 844 | systemctl stop trojan-go 845 | colorEcho $BLUE " trojan-go停止成功" 846 | } 847 | 848 | 849 | restart() { 850 | res=`status` 851 | if [[ $res -lt 2 ]]; then 852 | echo -e " ${RED}trojan-go未安装,请先安装!${PLAIN}" 853 | return 854 | fi 855 | 856 | stop 857 | start 858 | } 859 | 860 | reconfig() { 861 | res=`status` 862 | if [[ $res -lt 2 ]]; then 863 | echo -e " ${RED}trojan-go未安装,请先安装!${PLAIN}" 864 | return 865 | fi 866 | 867 | line1=`grep -n 'websocket' $CONFIG_FILE | head -n1 | cut -d: -f1` 868 | line11=`expr $line1 + 1` 869 | WS=`sed -n "${line11}p" $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 870 | getData true 871 | configTrojan 872 | setFirewall 873 | getCert 874 | configNginx 875 | stop 876 | start 877 | showInfo 878 | 879 | bbrReboot 880 | } 881 | 882 | 883 | showInfo() { 884 | res=`status` 885 | if [[ $res -lt 2 ]]; then 886 | echo -e " ${RED}trojan-go未安装,请先安装!${PLAIN}" 887 | return 888 | fi 889 | 890 | domain=`grep sni $CONFIG_FILE | cut -d\" -f4` 891 | port=`grep local_port $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 892 | line1=`grep -n 'password' $CONFIG_FILE | head -n1 | cut -d: -f1` 893 | line11=`expr $line1 + 1` 894 | password=`sed -n "${line11}p" $CONFIG_FILE | tr -d \"' '` 895 | line1=`grep -n 'websocket' $CONFIG_FILE | head -n1 | cut -d: -f1` 896 | line11=`expr $line1 + 1` 897 | ws=`sed -n "${line11}p" $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 898 | echo "" 899 | echo -n " trojan-go运行状态:" 900 | statusText 901 | echo "" 902 | echo -e " ${BLUE}trojan-go配置文件: ${PLAIN} ${RED}${CONFIG_FILE}${PLAIN}" 903 | echo -e " ${BLUE}trojan-go配置信息:${PLAIN}" 904 | echo -e " IP:${RED}$IP${PLAIN}" 905 | echo -e " 伪装域名/主机名(host)/SNI/peer名称:${RED}$domain${PLAIN}" 906 | echo -e " 端口(port):${RED}$port${PLAIN}" 907 | echo -e " 密码(password):${RED}$password${PLAIN}" 908 | if [[ $ws = "true" ]]; then 909 | echo -e " websocket:${RED}true${PLAIN}" 910 | wspath=`grep path $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 911 | echo -e " ws路径(ws path):${RED}${wspath}${PLAIN}" 912 | fi 913 | echo "" 914 | } 915 | 916 | showLog() { 917 | res=`status` 918 | if [[ $res -lt 2 ]]; then 919 | echo -e "${RED}trojan-go未安装,请先安装!${PLAIN}" 920 | return 921 | fi 922 | 923 | journalctl -xen -u trojan-go --no-pager 924 | } 925 | 926 | menu() { 927 | clear 928 | echo "#############################################################" 929 | echo -e "# ${RED}trojan-go一键安装脚本${PLAIN} #" 930 | echo -e "# ${GREEN}作者${PLAIN}: 网络跳越(hijk) #" 931 | echo -e "# ${GREEN}网址${PLAIN}: https://hijk.art #" 932 | echo -e "# ${GREEN}论坛${PLAIN}: https://hijk.club #" 933 | echo -e "# ${GREEN}TG群${PLAIN}: https://t.me/hijkclub #" 934 | echo -e "# ${GREEN}Youtube频道${PLAIN}: https://youtube.com/channel/UCYTB--VsObzepVJtc9yvUxQ #" 935 | echo "#############################################################" 936 | echo "" 937 | 938 | echo -e " ${GREEN}1.${PLAIN} 安装trojan-go" 939 | echo -e " ${GREEN}2.${PLAIN} 安装trojan-go+WS" 940 | echo -e " ${GREEN}3.${PLAIN} 更新trojan-go" 941 | echo -e " ${GREEN}4. ${RED}卸载trojan-go${PLAIN}" 942 | echo " -------------" 943 | echo -e " ${GREEN}5.${PLAIN} 启动trojan-go" 944 | echo -e " ${GREEN}6.${PLAIN} 重启trojan-go" 945 | echo -e " ${GREEN}7.${PLAIN} 停止trojan-go" 946 | echo " -------------" 947 | echo -e " ${GREEN}8.${PLAIN} 查看trojan-go配置" 948 | echo -e " ${GREEN}9. ${RED}修改trojan-go配置${PLAIN}" 949 | echo -e " ${GREEN}10.${PLAIN} 查看trojan-go日志" 950 | echo " -------------" 951 | echo -e " ${GREEN}0.${PLAIN} 退出" 952 | echo 953 | echo -n " 当前状态:" 954 | statusText 955 | echo 956 | 957 | read -p " 请选择操作[0-10]:" answer 958 | case $answer in 959 | 0) 960 | exit 0 961 | ;; 962 | 1) 963 | install 964 | ;; 965 | 2) 966 | WS="true" 967 | install 968 | ;; 969 | 3) 970 | update 971 | ;; 972 | 4) 973 | uninstall 974 | ;; 975 | 5) 976 | start 977 | ;; 978 | 6) 979 | restart 980 | ;; 981 | 7) 982 | stop 983 | ;; 984 | 8) 985 | showInfo 986 | ;; 987 | 9) 988 | reconfig 989 | ;; 990 | 10) 991 | showLog 992 | ;; 993 | *) 994 | echo -e "$RED 请选择正确的操作!${PLAIN}" 995 | exit 1 996 | ;; 997 | esac 998 | } 999 | 1000 | checkSystem 1001 | 1002 | action=$1 1003 | [[ -z $1 ]] && action=menu 1004 | case "$action" in 1005 | menu|update|uninstall|start|restart|stop|showInfo|showLog) 1006 | ${action} 1007 | ;; 1008 | *) 1009 | echo " 参数错误" 1010 | echo " 用法: `basename $0` [menu|update|uninstall|start|restart|stop|showInfo|showLog]" 1011 | ;; 1012 | esac 1013 | -------------------------------------------------------------------------------- /trojan.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # trojan一键安装脚本 3 | # Author: hijk 4 | 5 | RED="\033[31m" # Error message 6 | GREEN="\033[32m" # Success message 7 | YELLOW="\033[33m" # Warning message 8 | BLUE="\033[36m" # Info message 9 | PLAIN='\033[0m' 10 | 11 | OS=`hostnamectl | grep -i system | cut -d: -f2` 12 | 13 | V6_PROXY="" 14 | IP=`curl -sL -4 ip.sb` 15 | if [[ "$?" != "0" ]]; then 16 | IP=`curl -sL -6 ip.sb` 17 | V6_PROXY="https://gh.hijk.art/" 18 | fi 19 | 20 | BT="false" 21 | NGINX_CONF_PATH="/etc/nginx/conf.d/" 22 | res=`which bt 2>/dev/null` 23 | if [[ "$res" != "" ]]; then 24 | BT="true" 25 | NGINX_CONF_PATH="/www/server/panel/vhost/nginx/" 26 | fi 27 | 28 | # 以下网站是随机从Google上找到的无广告小说网站,不喜欢请改成其他网址,以http或https开头 29 | # 搭建好后无法打开伪装域名,可能是反代小说网站挂了,请在网站留言,或者Github发issue,以便替换新的网站 30 | SITES=( 31 | http://www.zhuizishu.com/ 32 | http://xs.56dyc.com/ 33 | #http://www.xiaoshuosk.com/ 34 | #https://www.quledu.net/ 35 | http://www.ddxsku.com/ 36 | http://www.biqu6.com/ 37 | https://www.wenshulou.cc/ 38 | #http://www.auutea.com/ 39 | http://www.55shuba.com/ 40 | http://www.39shubao.com/ 41 | https://www.23xsw.cc/ 42 | #https://www.huanbige.com/ 43 | https://www.jueshitangmen.info/ 44 | https://www.zhetian.org/ 45 | http://www.bequgexs.com/ 46 | http://www.tjwl.com/ 47 | ) 48 | 49 | CONFIG_FILE=/usr/local/etc/trojan/config.json 50 | 51 | colorEcho() { 52 | echo -e "${1}${@:2}${PLAIN}" 53 | } 54 | 55 | function checkSystem() 56 | { 57 | result=$(id | awk '{print $1}') 58 | if [ $result != "uid=0(root)" ]; then 59 | colorEcho $RED " 请以root身份执行该脚本" 60 | exit 1 61 | fi 62 | 63 | res=`which yum 2>/dev/null` 64 | if [ "$?" != "0" ]; then 65 | res=`which apt 2>/dev/null` 66 | if [ "$?" != "0" ]; then 67 | colorEcho $RED " 不受支持的Linux系统" 68 | exit 1 69 | fi 70 | PMT=apt 71 | CMD_INSTALL="apt install -y " 72 | CMD_REMOVE="apt remove -y " 73 | CMD_UPGRADE="apt update; apt upgrade -y; apt autoremove -y" 74 | else 75 | PMT=yum 76 | CMD_INSTALL="yum install -y " 77 | CMD_REMOVE="yum remove -y " 78 | CMD_UPGRADE="yum update -y" 79 | fi 80 | res=`which systemctl 2>/dev/null` 81 | if [ "$?" != "0" ]; then 82 | colorEcho $RED " 系统版本过低,请升级到最新版本" 83 | exit 1 84 | fi 85 | } 86 | 87 | status() { 88 | if [[ ! -f /usr/local/bin/trojan ]]; then 89 | echo 0 90 | return 91 | fi 92 | 93 | if [[ ! -f $CONFIG_FILE ]]; then 94 | echo 1 95 | return 96 | fi 97 | port=`grep local_port $CONFIG_FILE|cut -d: -f2| tr -d \",' '` 98 | res=`ss -ntlp| grep ${port} | grep trojan` 99 | if [[ -z "$res" ]]; then 100 | echo 2 101 | else 102 | echo 3 103 | fi 104 | } 105 | 106 | statusText() { 107 | res=`status` 108 | case $res in 109 | 2) 110 | echo -e ${GREEN}已安装${PLAIN} ${RED}未运行${PLAIN} 111 | ;; 112 | 3) 113 | echo -e ${GREEN}已安装${PLAIN} ${GREEN}正在运行${PLAIN} 114 | ;; 115 | *) 116 | echo -e ${RED}未安装${PLAIN} 117 | ;; 118 | esac 119 | } 120 | 121 | function getData() 122 | { 123 | echo " " 124 | echo " 本脚本为trojan一键脚本,运行之前请确认如下条件已经具备:" 125 | echo -e " ${RED}1. 一个伪装域名${PLAIN}" 126 | echo -e " ${RED}2. 伪装域名DNS解析指向当前服务器ip(${IP})${PLAIN}" 127 | echo -e " 3. 如果/root目录下有 ${GREEN}trojan.pem${PLAIN} 和 ${GREEN}trojan.key${PLAIN} 证书密钥文件,无需理会条件2" 128 | echo " " 129 | read -p " 确认满足按y,按其他退出脚本:" answer 130 | if [ "${answer}" != "y" ] && [ "${answer}" != "Y" ]; then 131 | exit 0 132 | fi 133 | 134 | echo "" 135 | while true 136 | do 137 | read -p " 请输入伪装域名:" DOMAIN 138 | if [ -z "${DOMAIN}" ]; then 139 | echo " 域名输入错误,请重新输入!" 140 | else 141 | break 142 | fi 143 | done 144 | DOMAIN=${DOMAIN,,} 145 | colorEcho $BLUE " 伪装域名(host): $DOMAIN" 146 | 147 | echo "" 148 | if [[ -f ~/trojan.pem && -f ~/trojan.key ]]; then 149 | echo -e "${GREEN} 检测到自有证书,将使用其部署${PLAIN}" 150 | echo 151 | CERT_FILE="/usr/local/etc/trojan/${DOMAIN}.pem" 152 | KEY_FILE="/usr/local/etc/trojan/${DOMAIN}.key" 153 | else 154 | resolve=`curl -sL https://lefu.men/hostip.php?d=${DOMAIN}` 155 | res=`echo -n ${resolve} | grep ${IP}` 156 | if [[ -z "${res}" ]]; then 157 | echo " ${DOMAIN} 解析结果:${resolve}" 158 | echo -e " ${RED}域名未解析到当前服务器IP(${IP})!${PLAIN}" 159 | exit 1 160 | fi 161 | fi 162 | 163 | echo "" 164 | read -p " 请设置trojan密码(不输入则随机生成):" PASSWORD 165 | [ -z "$PASSWORD" ] && PASSWORD=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1` 166 | colorEcho $BLUE " 密码: " $PASSWORD 167 | 168 | echo "" 169 | read -p " 请输入trojan端口[100-65535的一个数字,默认443]:" PORT 170 | [ -z "${PORT}" ] && PORT=443 171 | if [ "${PORT:0:1}" = "0" ]; then 172 | echo -e " ${RED}端口不能以0开头${PLAIN}" 173 | exit 1 174 | fi 175 | colorEcho $BLUE " trojan端口: " $PORT 176 | 177 | echo "" 178 | colorEcho $BLUE " 请选择伪装站类型:" 179 | echo " 1) 静态网站(位于/usr/share/nginx/html)" 180 | echo " 2) 小说站(随机选择)" 181 | echo " 3) 美女站(https://imeizi.me)" 182 | echo " 4) VPS优惠博客(https://www.lowendtalk.com)" 183 | echo " 5) 自定义反代站点(需以http或者https开头)" 184 | read -p " 请选择伪装网站类型[默认:美女站]" answer 185 | if [[ -z "$answer" ]]; then 186 | PROXY_URL="https://imeizi.me" 187 | else 188 | case $answer in 189 | 1) 190 | PROXY_URL="" 191 | ;; 192 | 2) 193 | len=${#SITES[@]} 194 | ((len--)) 195 | index=`shuf -i0-${len} -n1` 196 | PROXY_URL=${SITES[$index]} 197 | ;; 198 | 3) 199 | PROXY_URL="https://imeizi.me" 200 | ;; 201 | 4) 202 | PROXY_URL="https://www.lowendtalk.com" 203 | ;; 204 | 5) 205 | read -p " 请输入反代站点(以http或者https开头):" PROXY_URL 206 | if [[ -z "$PROXY_URL" ]]; then 207 | colorEcho $RED " 请输入反代网站!" 208 | exit 1 209 | elif [[ "${PROXY_URL:0:4}" != "http" ]]; then 210 | colorEcho $RED " 反代网站必须以http或https开头!" 211 | exit 1 212 | fi 213 | ;; 214 | *) 215 | colorEcho $RED " 请输入正确的选项!" 216 | exit 1 217 | esac 218 | fi 219 | REMOTE_HOST=`echo ${PROXY_URL} | cut -d/ -f3` 220 | echo "" 221 | colorEcho $BLUE " 伪装域名:$PROXY_URL" 222 | 223 | echo "" 224 | colorEcho $BLUE " 是否允许搜索引擎爬取网站?[默认:不允许]" 225 | echo " y)允许,会有更多ip请求网站,但会消耗一些流量,vps流量充足情况下推荐使用" 226 | echo " n)不允许,爬虫不会访问网站,访问ip比较单一,但能节省vps流量" 227 | read -p " 请选择:[y/n]" answer 228 | if [[ -z "$answer" ]]; then 229 | ALLOW_SPIDER="n" 230 | elif [[ "${answer,,}" = "y" ]]; then 231 | ALLOW_SPIDER="y" 232 | else 233 | ALLOW_SPIDER="n" 234 | fi 235 | echo "" 236 | colorEcho $BLUE " 允许搜索引擎:$ALLOW_SPIDER" 237 | 238 | echo "" 239 | read -p " 是否安装BBR(默认安装)?[y/n]:" NEED_BBR 240 | [ -z "$NEED_BBR" ] && NEED_BBR=y 241 | [ "$NEED_BBR" = "Y" ] && NEED_BBR=y 242 | colorEcho $BLUE " 安装BBR:$NEED_BBR" 243 | } 244 | 245 | function preinstall() 246 | { 247 | $PMT clean all 248 | [[ "$PMT" = "apt" ]] && $PMT update 249 | #colorEcho $BLUE " 更新系统..." 250 | #echo $CMD_UPGRADE | bash 251 | 252 | colorEcho $BLUE " 安装必要软件" 253 | if [[ "$PMT" = "yum" ]]; then 254 | $CMD_INSTALL epel-release 255 | fi 256 | $CMD_INSTALL wget vim unzip tar gcc openssl 257 | $CMD_INSTALL net-tools 258 | if [[ "$PMT" = "apt" ]]; then 259 | $CMD_INSTALL libssl-dev g++ 260 | fi 261 | 262 | if [[ -s /etc/selinux/config ]] && grep 'SELINUX=enforcing' /etc/selinux/config; then 263 | sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config 264 | setenforce 0 265 | fi 266 | } 267 | 268 | function installTrojan() 269 | { 270 | colorEcho $BLUE " 安装最新版trojan..." 271 | rm -rf $CONFIG_FILE 272 | rm -rf /etc/systemd/system/trojan.service 273 | 274 | NAME=trojan 275 | VERSION=`curl -fsSL ${V6_PROXY}https://api.github.com/repos/trojan-gfw/trojan/releases/latest | grep tag_name | sed -E 's/.*"v(.*)".*/\1/'` 276 | TARBALL="$NAME-$VERSION-linux-amd64.tar.xz" 277 | DOWNLOADURL="${V6_PROXY}https://github.com/trojan-gfw/$NAME/releases/download/v$VERSION/$TARBALL" 278 | TMPDIR="$(mktemp -d)" 279 | INSTALLPREFIX=/usr/local 280 | SYSTEMDPREFIX=/etc/systemd/system 281 | 282 | BINARYPATH="$INSTALLPREFIX/bin/$NAME" 283 | CONFIGPATH="$INSTALLPREFIX/etc/$NAME/config.json" 284 | SYSTEMDPATH="$SYSTEMDPREFIX/$NAME.service" 285 | 286 | echo Entering temp directory $TMPDIR... 287 | cd "$TMPDIR" 288 | 289 | echo Downloading $NAME $VERSION... 290 | curl -LO --progress-bar "$DOWNLOADURL" || wget -q --show-progress "$DOWNLOADURL" 291 | 292 | echo Unpacking $NAME $VERSION... 293 | tar xf "$TARBALL" 294 | cd "$NAME" 295 | 296 | echo Installing $NAME $VERSION to $BINARYPATH... 297 | cp "$NAME" "$BINARYPATH" 298 | chmod 755 "$BINARYPATH" 299 | 300 | mkdir -p $INSTALLPREFIX/etc/$NAME 301 | 302 | echo Installing $NAME systemd service to $SYSTEMDPATH... 303 | cat > "$SYSTEMDPATH" << EOF 304 | [Unit] 305 | Description=$NAME 306 | Documentation=https://trojan-gfw.github.io/$NAME/config https://trojan-gfw.github.io/$NAME/ 307 | After=network.target network-online.target nss-lookup.target mysql.service mariadb.service mysqld.service 308 | 309 | [Service] 310 | Type=simple 311 | StandardError=journal 312 | ExecStart="$BINARYPATH" "$CONFIGPATH" 313 | ExecReload=/bin/kill -HUP \$MAINPID 314 | LimitNOFILE=51200 315 | Restart=on-failure 316 | RestartSec=1s 317 | 318 | [Install] 319 | WantedBy=multi-user.target 320 | EOF 321 | 322 | echo Reloading systemd daemon... 323 | systemctl daemon-reload 324 | 325 | echo Deleting temp directory $TMPDIR... 326 | rm -rf "$TMPDIR" 327 | 328 | echo Done! 329 | 330 | if [[ ! -f "$BINARYPATH" ]]; then 331 | colorEcho $RED " $OS 安装trojan失败,请到 https://hijk.art 反馈" 332 | exit 1 333 | fi 334 | 335 | systemctl enable trojan 336 | colorEcho $GREEN " trojan安装成功!" 337 | } 338 | 339 | configTrojan() { 340 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 341 | 342 | cat >$CONFIG_FILE<<-EOF 343 | { 344 | "run_type": "server", 345 | "local_addr": "::", 346 | "local_port": ${PORT}, 347 | "remote_addr": "127.0.0.1", 348 | "remote_port": 80, 349 | "password": [ 350 | "$PASSWORD" 351 | ], 352 | "log_level": 1, 353 | "ssl": { 354 | "cert": "$CERT_FILE", 355 | "key": "$KEY_FILE", 356 | "key_password": "", 357 | "sni": "$DOMAIN", 358 | "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384", 359 | "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384", 360 | "prefer_server_cipher": true, 361 | "alpn": [ 362 | "http/1.1", "h2" 363 | ], 364 | "alpn_port_override": { 365 | "h2": 81 366 | }, 367 | "reuse_session": true, 368 | "session_ticket": false, 369 | "session_timeout": 600, 370 | "plain_http_response": "", 371 | "curves": "", 372 | "dhparam": "" 373 | }, 374 | "tcp": { 375 | "prefer_ipv4": false, 376 | "no_delay": true, 377 | "keep_alive": true, 378 | "reuse_port": false, 379 | "fast_open": false, 380 | "fast_open_qlen": 20 381 | }, 382 | "mysql": { 383 | "enabled": false, 384 | "server_addr": "127.0.0.1", 385 | "server_port": 3306, 386 | "database": "trojan", 387 | "username": "trojan", 388 | "password": "", 389 | "key": "", 390 | "cert": "", 391 | "ca": "" 392 | } 393 | } 394 | EOF 395 | } 396 | 397 | getCert() { 398 | mkdir -p /usr/local/etc/trojan 399 | if [[ -z ${CERT_FILE+x} ]]; then 400 | stopNginx 401 | res=`netstat -ntlp| grep -E ':80 |:443 '` 402 | if [[ "${res}" != "" ]]; then 403 | colorEcho $RED " 其他进程占用了80或443端口,请先关闭再运行一键脚本" 404 | echo " 端口占用信息如下:" 405 | echo ${res} 406 | exit 1 407 | fi 408 | 409 | $CMD_INSTALL socat openssl 410 | if [[ "$PMT" = "yum" ]]; then 411 | $CMD_INSTALL cronie 412 | systemctl start crond 413 | systemctl enable crond 414 | else 415 | $CMD_INSTALL cron 416 | systemctl start cron 417 | systemctl enable cron 418 | fi 419 | curl -sL https://get.acme.sh | sh -s email=hijk.pw@protonmail.sh 420 | source ~/.bashrc 421 | ~/.acme.sh/acme.sh --upgrade --auto-upgrade --force 422 | ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt --force 423 | if [[ "$BT" = "false" ]]; then 424 | ~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 --pre-hook "systemctl stop nginx" --post-hook "systemctl restart nginx" --standalone 425 | else 426 | ~/.acme.sh/acme.sh --issue -d $DOMAIN --keylength ec-256 --pre-hook "nginx -s stop || { echo -n ''; }" --post-hook "nginx -c /www/server/nginx/conf/nginx.conf || { echo -n ''; }" --standalone 427 | fi 428 | [[ -f ~/.acme.sh/${DOMAIN}_ecc/ca.cer ]] || { 429 | colorEcho $RED " 获取证书失败,请复制上面的红色文字到 https://hijk.art 反馈" 430 | exit 1 431 | } 432 | CERT_FILE="/usr/local/etc/trojan/${DOMAIN}.pem" 433 | KEY_FILE="/usr/local/etc/trojan/${DOMAIN}.key" 434 | ~/.acme.sh/acme.sh --install-cert -d $DOMAIN --ecc \ 435 | --key-file $KEY_FILE \ 436 | --fullchain-file $CERT_FILE \ 437 | --reloadcmd "service nginx force-reload" 438 | [[ -f $CERT_FILE && -f $KEY_FILE ]] || { 439 | colorEcho $RED " 获取证书失败,请到 https://hijk.art 反馈" 440 | exit 1 441 | } 442 | else 443 | cp ~/trojan.pem /usr/local/etc/trojan/${DOMAIN}.pem 444 | cp ~/trojan.key /usr/local/etc/trojan/${DOMAIN}.key 445 | fi 446 | } 447 | 448 | function installNginx() 449 | { 450 | colorEcho $BLUE " 安装nginx..." 451 | if [[ "$BT" = "false" ]]; then 452 | if [[ "$PMT" = "yum" ]]; then 453 | $CMD_INSTALL epel-release 454 | if [[ "$?" != "0" ]]; then 455 | echo '[nginx-stable] 456 | name=nginx stable repo 457 | baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ 458 | gpgcheck=1 459 | enabled=1 460 | gpgkey=https://nginx.org/keys/nginx_signing.key 461 | module_hotfixes=true' > /etc/yum.repos.d/nginx.repo 462 | fi 463 | fi 464 | $CMD_INSTALL nginx 465 | if [[ "$?" != "0" ]]; then 466 | colorEcho $RED " Nginx安装失败,请到 https://hijk.art 反馈" 467 | exit 1 468 | fi 469 | systemctl enable nginx 470 | else 471 | res=`which nginx 2>/dev/null` 472 | if [[ "$?" != "0" ]]; then 473 | colorEcho $RED " 您安装了宝塔,请在宝塔后台安装nginx后再运行本脚本" 474 | exit 1 475 | fi 476 | fi 477 | } 478 | 479 | configNginx() { 480 | mkdir -p /usr/share/nginx/html 481 | if [[ "$ALLOW_SPIDER" = "n" ]]; then 482 | echo 'User-Agent: *' > /usr/share/nginx/html/robots.txt 483 | echo 'Disallow: /' >> /usr/share/nginx/html/robots.txt 484 | ROBOT_CONFIG=" location = /robots.txt {}" 485 | else 486 | ROBOT_CONFIG="" 487 | fi 488 | 489 | if [[ "$BT" = "false" ]]; then 490 | if [ ! -f /etc/nginx/nginx.conf.bak ]; then 491 | mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak 492 | fi 493 | res=`id nginx 2>/dev/null` 494 | if [[ "$?" != "0" ]]; then 495 | user="www-data" 496 | else 497 | user="nginx" 498 | fi 499 | cat > /etc/nginx/nginx.conf<<-EOF 500 | user $user; 501 | worker_processes auto; 502 | error_log /var/log/nginx/error.log; 503 | pid /run/nginx.pid; 504 | 505 | # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 506 | include /usr/share/nginx/modules/*.conf; 507 | 508 | events { 509 | worker_connections 1024; 510 | } 511 | 512 | http { 513 | log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" ' 514 | '\$status \$body_bytes_sent "\$http_referer" ' 515 | '"\$http_user_agent" "\$http_x_forwarded_for"'; 516 | 517 | access_log /var/log/nginx/access.log main; 518 | 519 | sendfile on; 520 | tcp_nopush on; 521 | tcp_nodelay on; 522 | keepalive_timeout 65; 523 | types_hash_max_size 2048; 524 | gzip on; 525 | 526 | include /etc/nginx/mime.types; 527 | default_type application/octet-stream; 528 | 529 | # Load modular configuration files from the /etc/nginx/conf.d directory. 530 | # See http://nginx.org/en/docs/ngx_core_module.html#include 531 | # for more information. 532 | include /etc/nginx/conf.d/*.conf; 533 | } 534 | EOF 535 | fi 536 | 537 | mkdir -p $NGINX_CONF_PATH 538 | if [[ "$PROXY_URL" = "" ]]; then 539 | cat > $NGINX_CONF_PATH${DOMAIN}.conf<<-EOF 540 | server { 541 | listen 80; 542 | listen [::]:80; 543 | listen 81 http2; 544 | server_name ${DOMAIN}; 545 | root /usr/share/nginx/html; 546 | 547 | $ROBOT_CONFIG 548 | } 549 | EOF 550 | else 551 | cat > $NGINX_CONF_PATH${DOMAIN}.conf<<-EOF 552 | server { 553 | listen 80; 554 | listen [::]:80; 555 | listen 81 http2; 556 | server_name ${DOMAIN}; 557 | root /usr/share/nginx/html; 558 | location / { 559 | proxy_ssl_server_name on; 560 | proxy_pass $PROXY_URL; 561 | proxy_set_header Accept-Encoding ''; 562 | sub_filter "$REMOTE_HOST" "$DOMAIN"; 563 | sub_filter_once off; 564 | } 565 | 566 | $ROBOT_CONFIG 567 | } 568 | EOF 569 | fi 570 | } 571 | 572 | startNginx() { 573 | if [[ "$BT" = "false" ]]; then 574 | systemctl start nginx 575 | else 576 | nginx -c /www/server/nginx/conf/nginx.conf 577 | fi 578 | } 579 | 580 | stopNginx() { 581 | if [[ "$BT" = "false" ]]; then 582 | systemctl stop nginx 583 | else 584 | res=`ps aux | grep -i nginx` 585 | if [[ "$res" != "" ]]; then 586 | nginx -s stop 587 | fi 588 | fi 589 | } 590 | 591 | function setFirewall() 592 | { 593 | res=`which firewall-cmd 2>/dev/null` 594 | if [[ $? -eq 0 ]]; then 595 | systemctl status firewalld > /dev/null 2>&1 596 | if [[ $? -eq 0 ]];then 597 | firewall-cmd --permanent --add-service=http 598 | firewall-cmd --permanent --add-service=https 599 | if [[ "$PORT" != "443" ]]; then 600 | firewall-cmd --permanent --add-port=${PORT}/tcp 601 | fi 602 | firewall-cmd --reload 603 | else 604 | nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'` 605 | if [[ "$nl" != "3" ]]; then 606 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT 607 | iptables -I INPUT -p tcp --dport 443 -j ACCEPT 608 | if [[ "$PORT" != "443" ]]; then 609 | iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT 610 | fi 611 | fi 612 | fi 613 | else 614 | res=`which iptables 2>/dev/null` 615 | if [[ $? -eq 0 ]]; then 616 | nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'` 617 | if [[ "$nl" != "3" ]]; then 618 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT 619 | iptables -I INPUT -p tcp --dport 443 -j ACCEPT 620 | if [[ "$PORT" != "443" ]]; then 621 | iptables -I INPUT -p tcp --dport ${PORT} -j ACCEPT 622 | fi 623 | fi 624 | else 625 | res=`which ufw 2>/dev/null` 626 | if [[ $? -eq 0 ]]; then 627 | res=`ufw status | grep -i inactive` 628 | if [[ "$res" = "" ]]; then 629 | ufw allow http/tcp 630 | ufw allow https/tcp 631 | if [[ "$PORT" != "443" ]]; then 632 | ufw allow ${PORT}/tcp 633 | fi 634 | fi 635 | fi 636 | fi 637 | fi 638 | } 639 | 640 | function installBBR() 641 | { 642 | if [ "$NEED_BBR" != "y" ]; then 643 | INSTALL_BBR=false 644 | return 645 | fi 646 | 647 | result=$(lsmod | grep bbr) 648 | if [ "$result" != "" ]; then 649 | colorEcho $YELLOW " BBR模块已安装" 650 | INSTALL_BBR=false 651 | return; 652 | fi 653 | res=`hostnamectl | grep -i openvz` 654 | if [ "$res" != "" ]; then 655 | colorEcho $YELLOW " openvz机器,跳过安装" 656 | INSTALL_BBR=false 657 | return 658 | fi 659 | 660 | echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf 661 | echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf 662 | sysctl -p 663 | result=$(lsmod | grep bbr) 664 | if [[ "$result" != "" ]]; then 665 | colorEcho $GREEN " BBR模块已启用" 666 | INSTALL_BBR=false 667 | return 668 | fi 669 | 670 | colorEcho $BLUE " 安装BBR模块..." 671 | if [[ "$PMT" = "yum" ]]; then 672 | if [[ "$V6_PROXY" = "" ]]; then 673 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 674 | rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 675 | $CMD_INSTALL --enablerepo=elrepo-kernel kernel-ml 676 | $CMD_REMOVE kernel-3.* 677 | grub2-set-default 0 678 | echo "tcp_bbr" >> /etc/modules-load.d/modules.conf 679 | INSTALL_BBR=true 680 | fi 681 | else 682 | $CMD_INSTALL --install-recommends linux-generic-hwe-16.04 683 | grub-set-default 0 684 | echo "tcp_bbr" >> /etc/modules-load.d/modules.conf 685 | INSTALL_BBR=true 686 | fi 687 | } 688 | 689 | function showInfo() 690 | { 691 | res=`netstat -nltp | grep trojan` 692 | [[ -z "$res" ]] && status="${RED}已停止${PLAIN}" || status="${GREEN}正在运行${PLAIN}" 693 | 694 | domain=`grep sni $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 695 | if [[ "$domain" = "" ]]; then 696 | domain=`grep -m1 cert $CONFIG_FILE | cut -d/ -f5` 697 | fi 698 | port=`grep local_port $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 699 | line1=`grep -n 'password' $CONFIG_FILE | head -n1 | cut -d: -f1` 700 | line11=`expr $line1 + 1` 701 | password=`sed -n "${line11}p" $CONFIG_FILE | tr -d \",' '` 702 | 703 | res=`netstat -nltp | grep ${port} | grep nginx` 704 | [[ -z "$res" ]] && ngstatus="${RED}已停止${PLAIN}" || ngstatus="${GREEN}正在运行${PLAIN}" 705 | 706 | echo ============================================ 707 | echo -e " ${BLUE}trojan运行状态:${PLAIN}${status}" 708 | echo "" 709 | echo -e " ${BLUE}trojan配置文件:${PLAIN}${RED}$CONFIG_FILE${PLAIN}" 710 | echo -e " ${BLUE}trojan配置信息:${PLAIN} " 711 | echo -e " ${BLUE}IP/域名(address):${PLAIN} ${RED}${domain}${PLAIN}" 712 | echo -e " ${BLUE}端口(port):${PLAIN}${RED}${port}${PLAIN}" 713 | echo -e " ${BLUE}密码(password):${PLAIN}${RED}$password${PLAIN}" 714 | echo 715 | echo ============================================ 716 | } 717 | 718 | function bbrReboot() { 719 | if [ "${INSTALL_BBR}" == "true" ]; then 720 | echo "" 721 | colorEcho $BLUE " 为使BBR模块生效,系统将在30秒后重启" 722 | echo 723 | echo -e " 您可以按 ctrl + c 取消重启,稍后输入 ${RED}reboot${PLAIN} 重启系统" 724 | sleep 30 725 | reboot 726 | fi 727 | } 728 | 729 | 730 | function install() { 731 | getData 732 | preinstall 733 | installBBR 734 | setFirewall 735 | installNginx 736 | getCert 737 | configNginx 738 | installTrojan 739 | configTrojan 740 | 741 | start 742 | showInfo 743 | bbrReboot 744 | } 745 | 746 | reconfig() { 747 | res=`status` 748 | if [[ $res -lt 2 ]]; then 749 | echo -e " ${RED}trojan未安装,请先安装!${PLAIN}" 750 | return 751 | fi 752 | 753 | getData 754 | setFirewall 755 | getCert 756 | configNginx 757 | configTrojan 758 | restart 759 | showInfo 760 | } 761 | 762 | update() { 763 | res=`status` 764 | if [[ $res -lt 2 ]]; then 765 | echo -e " ${RED}trojan未安装,请先安装!${PLAIN}" 766 | return 767 | fi 768 | 769 | installTrojan 770 | 771 | stop 772 | start 773 | colorEcho $BLUE " 成功更新到最新版trojan" 774 | } 775 | 776 | start() { 777 | res=`status` 778 | if [[ $res -lt 2 ]]; then 779 | echo -e "${RED}trojan未安装,请先安装!${PLAIN}" 780 | return 781 | fi 782 | stopNginx 783 | startNginx 784 | systemctl restart trojan 785 | sleep 2 786 | port=`grep local_port $CONFIG_FILE|cut -d: -f2| tr -d \",' '` 787 | res=`ss -ntlp| grep ${port} | grep trojan` 788 | if [[ "$res" = "" ]]; then 789 | colorEcho $RED " trojan启动失败,请检查端口是否被占用!" 790 | else 791 | colorEcho $BLUE " trojan启动成功" 792 | fi 793 | } 794 | 795 | stop() { 796 | stopNginx 797 | systemctl stop trojan 798 | colorEcho $BLUE " trojan停止成功" 799 | } 800 | 801 | 802 | restart() { 803 | res=`status` 804 | if [[ $res -lt 2 ]]; then 805 | echo -e " ${RED}trojan未安装,请先安装!${PLAIN}" 806 | return 807 | fi 808 | 809 | stop 810 | start 811 | } 812 | 813 | showLog() { 814 | res=`status` 815 | if [[ $res -lt 2 ]]; then 816 | echo -e "${RED}trojan未安装,请先安装!${PLAIN}" 817 | return 818 | fi 819 | 820 | journalctl -xen -u trojan --no-pager 821 | } 822 | 823 | function uninstall() { 824 | res=`status` 825 | if [[ $res -lt 2 ]]; then 826 | echo -e "${RED}trojan未安装,请先安装!${PLAIN}" 827 | return 828 | fi 829 | 830 | echo "" 831 | read -p " 确定卸载trojan?(y/n)" answer 832 | [[ -z ${answer} ]] && answer="n" 833 | 834 | if [[ "${answer}" == "y" ]] || [[ "${answer}" == "Y" ]]; then 835 | domain=`grep sni $CONFIG_FILE | cut -d: -f2 | tr -d \",' '` 836 | if [[ "$domain" = "" ]]; then 837 | domain=`grep -m1 cert $CONFIG_FILE | cut -d/ -f5` 838 | fi 839 | 840 | systemctl stop trojan 841 | systemctl disable trojan 842 | rm -rf /usr/local/bin/trojan 843 | rm -rf /usr/local/etc/trojan 844 | rm -rf /etc/systemd/system/trojan.service 845 | 846 | if [[ "$BT" = "false" ]]; then 847 | $CMD_REMOVE nginx 848 | if [[ "$PMT" = "apt" ]]; then 849 | $CMD_REMOVE nginx-common 850 | fi 851 | if [[ -d /usr/share/nginx/html.bak ]]; then 852 | rm -rf /usr/share/nginx/html 853 | mv /usr/share/nginx/html.bak /usr/share/nginx/html 854 | fi 855 | fi 856 | rm -rf $NGINX_CONF_PATH${domain}.conf 857 | ~/.acme.sh/acme.sh --uninstall 858 | colorEcho $GREEN " trojan卸载成功" 859 | fi 860 | } 861 | 862 | menu() { 863 | clear 864 | echo "#############################################################" 865 | echo -e "# ${RED}trojan一键安装脚本${PLAIN} #" 866 | echo -e "# ${GREEN}作者${PLAIN}: 网络跳越(hijk) #" 867 | echo -e "# ${GREEN}网址${PLAIN}: https://hijk.art #" 868 | echo -e "# ${GREEN}论坛${PLAIN}: https://hijk.club #" 869 | echo -e "# ${GREEN}TG群${PLAIN}: https://t.me/hijkclub #" 870 | echo -e "# ${GREEN}Youtube频道${PLAIN}: https://youtube.com/channel/UCYTB--VsObzepVJtc9yvUxQ #" 871 | echo "#############################################################" 872 | echo "" 873 | 874 | echo -e " ${GREEN}1.${PLAIN} 安装trojan" 875 | echo -e " ${GREEN}2.${PLAIN} 更新trojan" 876 | echo -e " ${GREEN}3. ${RED}卸载trojan${PLAIN}" 877 | echo " -------------" 878 | echo -e " ${GREEN}4.${PLAIN} 启动trojan" 879 | echo -e " ${GREEN}5.${PLAIN} 重启trojan" 880 | echo -e " ${GREEN}6.${PLAIN} 停止trojan" 881 | echo " -------------" 882 | echo -e " ${GREEN}7.${PLAIN} 查看trojan配置" 883 | echo -e " ${GREEN}8. ${RED}修改trojan配置${PLAIN}" 884 | echo -e " ${GREEN}9.${PLAIN} 查看trojan日志" 885 | echo " -------------" 886 | echo -e " ${GREEN}0.${PLAIN} 退出" 887 | echo 888 | echo -n " 当前状态:" 889 | statusText 890 | echo 891 | 892 | read -p " 请选择操作[0-10]:" answer 893 | case $answer in 894 | 0) 895 | exit 0 896 | ;; 897 | 1) 898 | install 899 | ;; 900 | 2) 901 | update 902 | ;; 903 | 3) 904 | uninstall 905 | ;; 906 | 4) 907 | start 908 | ;; 909 | 5) 910 | restart 911 | ;; 912 | 6) 913 | stop 914 | ;; 915 | 7) 916 | showInfo 917 | ;; 918 | 8) 919 | reconfig 920 | ;; 921 | 9) 922 | showLog 923 | ;; 924 | *) 925 | echo -e "$RED 请选择正确的操作!${PLAIN}" 926 | exit 1 927 | ;; 928 | esac 929 | } 930 | 931 | checkSystem 932 | 933 | action=$1 934 | [[ -z $1 ]] && action=menu 935 | case "$action" in 936 | menu|install|update|uninstall|start|restart|stop|showInfo|showLog) 937 | ${action} 938 | ;; 939 | *) 940 | echo " 参数错误" 941 | echo " 用法: `basename $0` [menu|install|update|uninstall|start|restart|stop|showInfo|showLog]" 942 | ;; 943 | esac 944 | -------------------------------------------------------------------------------- /v2ray(WS+TLS+web).md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 本文是搭建V2Ray服务器(ws+tls+web)的完整教程。除了搭建V2Ray+ws+tls+web的过程,还包括配置CDN隐藏IP,打开BBR加速,以及简单配置防火墙防探测。最近(2020年初开始)防火墙加大了封杀VPN的力度,很多SS,SSR,纯VMess都开始间歇掉线,有些代理甚至直接被封IP。如果你打算自己搭建翻墙服务,强烈推荐V2Ray+ws+tls+web(CDN可选)一步到位。 4 | 5 | 本文面向小白,你只要会购买虚拟主机,会使用SSH连接服务器,那么看懂本教程就毫无压力。当然如果有搭建SS/SSR的经验,就更容易看懂了。建议能看懂本教程的,尽量购买VPS自建翻墙服务。按照本文搭建实在有困难的用户,可以考虑迷雾通或其它外资VPN。 6 | 7 | 不推荐使用一键脚本,很多一键脚本都存在安全隐患,轻则屏蔽掉几个网站,重则把你的服务器变成“肉鸡”(即黑客攻击别人电脑的跳板)。另外,就算用脚本搭建服务器,本文中的大部分操作,比如购买域名,配置域名解析等等,脚本无法自动完成。你恐怕还要亲自购买域名,亲自配置域名解析,亲自登录VPS执行脚本。本文中的方法只比一键脚本多出几步,但是可以大大降低安全风险。 8 | 9 | 自建V2Ray服务器首先要购买VPS(虚拟主机),为避免广告嫌疑,正文中不推荐VPS,我会在评论中补充一些常见的外资VPS。一般而言,自建服务的成本远远低于机场,大多数VPS每个月花费20-30元左右,流量1TB/月,有些外资VPS价格低到10-20元,甚至每月不到10元。如果愿意折腾,还可以用免费的谷歌云。此外,自建服务没有客户端数量限制,如果多人分摊成本,价格就更便宜了。 10 | 11 | V2Ray+ws+tls+web是目前最稳定的翻墙技术之一,即使在十一也稳如泰山。和SSR的流量混淆不同,V2Ray+ws+tls用真正的https流量翻墙,没有必要做任何混淆。在防火长城看来,你的流量和不计其数的https流量没有任何区别。但是,如果有好事者主动访问你的代理服务器,就会发现一些不对劲: 12 | 13 | ![img1](https://i.imgur.com/avZQgib.png) 14 | 15 | 尽管流量没有任何明显的特征,但是如果墙主动访问代理服务器,会发现流量的目的地没有真正的网站,从而识破https流量的目的。使用https流量不做掩护,反而增大了IP被墙的概率。因此你需要在V2Ray服务外面加一层真网站做掩护。 16 | 17 | ![img2](https://i.imgur.com/raSjDmM.png) 18 | 19 | 这就是V2Ray+ws+tls再加上web的原理。在配置了真实网站之后,只有你自己知道是个代理,在别人看来是个网站(包括墙)。反过来说,V2Ray+ws+tls+web也可以看作是自建了一个网站,然后利用这个网站来翻墙。因此,如果你读完本文,不仅能学会V2Ray翻墙,还能学到一点建网站的流程。 20 | 21 | 上面“https流量”的正确叫法是“tls流量”,这东西就是你平时浏览网页发出的流量。这里为了方便新手理解,叫做“https流量”。 22 | 23 | 安全提示: 24 | 25 | >如果服务器之前运行过SS,SSR,V2Ray(非TLS)等服务,请确保先停止原来的代理服务,再安装V2Ray。如果不知道怎么停止,请重装VPS(在网页控制面板上点reinstall,不到一分钟就搞定)。翻墙的隐蔽性取决于最薄弱的一环,如果服务器上同时运行其它代理软件,这些代理软件依然会被墙探测到,这种情况下V2Ray+ws+tls+web并不能保证隐蔽性。 26 | 27 | 自建网站看上去很复杂,其实很简单,只要按照以下步骤: 28 | 29 | 1 购买域名&配置域名解析:V2Ray需要域名伪装成真正的网站,因此你需要购买一个域名,并把域名绑定到服务器的IP地址上。 30 | 31 | 2 一键填写配置文件:本文已经写好了配置文件,只要把域名,UUID等信息填进去就行了。 32 | 33 | 3 一键安装v2ray+nginx 34 | 35 | 4 上传配置文件&一键运行 36 | 37 | 5 配置客户端 38 | 39 | 成功翻墙以后,还可以做以下事情进一步强化: 40 | 41 | 可选1. 加固服务器 42 | 43 | 可选2. 配置CDN隐藏IP 44 | 45 | 可选3. 使用BBR加速 46 | 47 | 下面按照以上顺序讲解配置。 48 | 49 | ## 1.购买域名&配置域名解析 50 | 51 | 这里从域名注册商GoDaddy购买域名,用Cloudflare提供域名解析。GoDaddy本身也提供域名解析服务,这里用Cloudflare是为了配置CDN方便。如果遇到墙加高,或者IP被墙等极端情况,只要简单的配置就可以切换成v2ray+ws+tls+web+cdn。CDN翻墙速度较慢,但是稳定性极高。 52 | 53 | 可能不少新手没听说过GoDaddy和Cloudflare,这里介绍一下,GoDaddy是世界上最大的域名提供商,占据市场30%的份额。Cloudflare是世界上最大的CDN提供商,全球半数的网站都在使用Cloudflare。注册不用担心隐私泄露或钓鱼风险。 54 | 55 | 注册GoDaddy和CloudFlare需要邮箱。特别注意,购买域名之后,域名服务商会公开邮箱地址。建议至少使用gmail注册,如果对隐私有较高要求,可以用Protonmail等匿名邮箱注册。 56 | 57 | 1.1 注册GoDaddy 58 | 59 | 点击这里进入GoDaddy的新加坡官网,全过程都有中文界面。出于安全考虑,选择邮箱注册。 60 | 61 | ![img1.1.1](https://i.imgur.com/bu3N2ZK.png) 62 | 63 | 1.2 选择一个域名 64 | 65 | GoDaddy和淘宝的用法完全一样。注册完成以后,回到GoDaddy首页。点击搜索框,输入一个你想要的域名,查询价格。GoDaddy会根据域名包含的词汇定价,为了降低成本,域名尽量选得随机一些,其中不要包含任何单词,我这里头滚键盘输入hrw1rdzqa7c5a8u3ibkn。 66 | 67 | ![img1.2.1](https://i.imgur.com/IxWvPW8.png) 68 | 69 | 可以看到不同后缀的域名价格差别很大,通常.com .net这类域名比较昂贵.website,.site,.rocks,.xyz价格较低,选一个最便宜的。这里我们选www.hrw1rdzqa7c5a8u3ibkn.website,这个域名一年不到7块钱。如果你购买时发现价格贵一些也是正常的,域名首年的价格通常不到10块钱。 70 | 71 | ![img1.2.2](https://i.imgur.com/ywKsYoB.png) 72 | 73 | 接下来进入购物车,隐私保护不用选。 74 | 75 | ![img-reg-cf](https://i.imgur.com/8fM0rJP.png) 76 | 77 | 点进入购物车,进入结算页面。GoDaddy默认选购买2年,我们的域名只用来翻墙,选1年就可以了,到时候再换。 78 | GoDaddy支持支付宝或信用卡付款。第一次购买域名,GoDaddy会要求你填写个人信息,这里姓名和手机号随便填一个假的就行。 79 | 80 | 购买完成,刚买到的域名不会马上在域名列表里出现,一般会有一两分钟的延迟。 81 | 接下来注册Cloudflare。GoDaddy的页面暂时不要关,一会还要回来配置域名服务器。 82 | 83 | 1.3 注册CloudFlare。 84 | 85 | 打开Cloudflare官网,用邮箱注册,如图。注册页面入口[https://dash.cloudflare.com/sign-up](https://dash.cloudflare.com/sign-up) 86 | 87 | ![img-reg-cf](https://i.imgur.com/S2epVPg.png) 88 | 89 | 接下来输入刚才购买的域名,注意这里输入的是【二级域名】。所谓二级域名,可以理解为网址去掉www。 90 | 比如我的网站的网址是www.hrw1rdzqa7c5a8u3ibkn.website,那么这里应该输入hrw1rdzqa7c5a8u3ibkn.website,如图: 91 | 92 | ![img-cf-addsite](https://i.imgur.com/Q8Q5TA9.png) 93 | 94 | 点【Add Site】,把域名交给Cloudflare托管。 95 | 96 | 接下来选择套餐,这里选择FREE套餐。 97 | 98 | ![img-cf-selectplan](https://i.imgur.com/brAXbxG.png) 99 | 100 | 点【Confirm Plan】,进入管理页面,不要关掉页面,接下来配置域名解析。 101 | 102 | 103 | 1.4 配置域名解析 104 | 105 | 配置域名解析分两步: 106 | 107 | 配置域名服务器记录(也叫name server,NS记录) 108 | 109 | 配置地址解析记录(也叫address,A记录) 110 | 111 | NS记录用来表明由哪台服务器对域名进行解析。从GoDaddy买到域名后,域名是由Godaddy的服务器进行解析的。我们这里把Godaddy的服务器换成Cloudflare的服务器。 112 | 113 | 如图是Cloudflare的管理界面,如果你的域名之前有配置域名解析,管理界面会显示之前的记录。暂时不用管这些。 114 | 点Continue,修改域名服务器。 115 | 116 | 点【Continue with default】 117 | 118 | ![img-cf-continue](https://i.imgur.com/YiZuOAP.png) 119 | 120 | 接下来Cloudflare会提示你变更域名服务器,并给出了方法。 121 | 122 | ![img-cf-changenameserver](https://i.imgur.com/HTUNjSb.png) 123 | 124 | 画红框的部分就是Cloudflare提供的两个域名服务器,我这里是ns90.domaincontrol.com和ns91.domaincontrol.com, 125 | 你看到的的可能和我不一样。 126 | 127 | 回到GoDaddy,点击屏幕右上角的用户名,选择【我的产品】。 128 | 129 | 这里可以看到你拥有的域名,点击域名旁边的【DNS】,进入DNS管理页面。 130 | 131 | ![img-godaddy-dns](https://i.imgur.com/he6OqIE.png) 132 | 133 | 在DNS管理界面向下拉,找到域名服务器。如图所示,这里可以看到GoDaddy提供的两个域名服务器,点击【更改】。 134 | 135 | ![img-godaddy-changedns](https://i.imgur.com/LBZ5vNd.png) 136 | 137 | 选择【输入我自己的域名服务器】 138 | 139 | ![img-godaddy-addnameserver](https://i.imgur.com/93ic5KS.png) 140 | 141 | 输入刚才Cloudflare提供的两个域名服务器,我这里是fccp.ns.cloudflare.com和xjp.ns.cloudflare.com, 142 | 点击【保存】。 143 | 144 | ![fig1.4.8](https://i.imgur.com/LUl7HAd.png) 145 | 146 | 注意不要有多余的域名服务器,不是CloudFlare提供的就要删除,否则可能会出问题。 147 | 148 | 接下来转移域名服务器可能需要几分钟,转移完成后会收到Cloudflare的邮件,可以先等一阵子。 149 | 150 | 配置地址解析(A记录) 151 | 转移域名服务器完成后,进入cloudflare的首页,点击右上角的【log in】,进入你的账户,如图: 152 | 153 | ![img1.4.9](https://i.imgur.com/rdFD2Ke.png) 154 | 155 | 点击买来的域名,进入下一步,如图: 156 | 157 | ![img1.4.10](https://i.imgur.com/dMSA0xq.png) 158 | 159 | 点击【DNS】按钮,进入Cloudflare的DNS管理页面,如下图: 160 | 161 | ![img1.4.11](https://i.imgur.com/BCeOWfm.png) 162 | 163 | 点击【Add record】,一次可以添加一条解析记录. 164 | 165 | 这里简单讲解一下,如果不想了解原理,可以跳过这一部分。 166 | 167 | 每条域名解析有四个部分:Type,Name,Address,TTL 168 | 169 | Type是域名解析的类型,常见的几种有 170 | 171 | * A记录:即地址(Address)记录,用来指定域名的IPv4地址。如果需要将域名指向一个IP地址,就需要添加A记录。举个例子,我们要把域名www.hrw1rdzqa7c5a8u3ibkn.website指向VPS的IP地址218.30.118.6,就要添加A记录。 172 | * AAAA记录,指定域名的IPv6地址。 173 | * CNAME:即规范名字(Canonical Name)记录,俗称“别名”。如果需要把域名指向另一个域名,就要添加CNAME记录。 174 | * NS:域名服务器记录,如果要把域名交给其他DNS服务器解析,就需要添加NS记录。我们刚才修改的就是NS记录。 175 | 176 | 接下来说明每个选项应该填什么,以及为什么这么填: 177 | 178 | Name 179 | 180 | 对于A记录,这里介绍三种填法 181 | 182 | * www:表示解析带www的域名,即www.hrw1rdzqa7c5a8u3ibkn.website 183 | * @:直接解析裸域名,即hrw1rdzqa7c5a8u3ibkn.website 184 | * *:表示泛解析,即匹配其他所有域名*.hrw1rdzqa7c5a8u3ibkn.website 185 | 186 | Address 187 | 188 | 这里填VPS的IP地址,我这里是218.30.118.6 189 | 190 | TTL 191 | 192 | 即 Time To Live,缓存的生存时间。指本地dns缓存解析记录的时间,缓存失效后会再次获取记录。在Cloudflare里,如果配置了CDN,则这里填Auto即可;如果没有配置CDN,可以选择Auto,也可以选择一个大于1小时的值。 193 | 194 | 理解了上面的内容以后,接下来添加两条A记录(如果VPS只有IPv6地址则添加AAAA记录) 195 | 196 | 点一下云朵,确保云是灰色的(DNS only)。橘色云朵表示此解析记录使用CDN,灰色云朵表示不使用 CDN,点击云朵可以切换。这里不要使用CDN,否则接下来的配置会出问题。 197 | 198 | * 第一条A记录,name填www,address填服务器IP地址,TTL选择1小时。(表示解析带www的地址) 199 | * 第二条A记录,name填@,address填服务器IP地址,TTL选择1小时。(表示解析不带www的裸域名) 200 | 201 | 填好之后的正确结果如图: 202 | 203 | ![img1.4.12](https://i.imgur.com/qDKfuRy.png) 204 | 205 | 注意云一定是灰色的。 206 | 207 | 208 | 检查是否配置成功: 209 | 配置完成后点【save】就大功告成了,可以打开windows的powershell,输入 210 | 211 | `ping www.hrw1rdzqa7c5a8u3ibkn.website` 212 | 213 | (替换成你的域名) 214 | 215 | Ping一下你的域名,如果能Ping通,就说明域名解析没问题。 216 | 217 | 218 | ## 2. 配置文件 219 | 220 | V2Ray和Nginx的配置文件这里已经写好。你需要做的就是填表格,把配置中标出的地方换成自己的内容。 221 | 编辑配置文件可以用Windows记事本,不过推荐使用Notepad++。 222 | 223 | 下载地址: 224 | [网页链接,直接下载链接(7.8.4)](https://notepad-plus-plus.org/downloads/) 225 | 226 | 2.1 V2Ray配置文件 227 | 228 | V2Ray配置文件如下: 229 | 230 | ``` 231 | { 232 | "inbound": { 233 | "protocol": "vmess", 234 | "listen": "127.0.0.1", 235 | "port": 8964, 236 | "settings": {"clients": [ 237 | {"id": "◆◆◆◆◆◆◆◆◆◆◆◆"} 238 | ]}, 239 | "streamSettings": { 240 | "network": "ws", 241 | "wsSettings": {"path": "/★★★★★★★★★★★★"} 242 | } 243 | }, 244 | 245 | "outbound": {"protocol": "freedom"} 246 | } 247 | ``` 248 | 249 | 是不是很短?接下来把标了符号的地方换成你自己的信息。 250 | 251 | (1) 252 | 253 | ◆◆◆◆◆◆◆◆◆◆◆◆:标“◆”的地方填写UUID。 254 | 255 | UUID可以从这个网站生成:https://www.uuidgenerator.net/。只要打开或者刷新这个网页就可以得到一个UUID。 256 | 举个例子,我生成的UUID是: 257 | 258 | >63c0042a-4a85-4d03-a488-3ba3aa002461 259 | 260 | 261 | (2) 262 | 263 | ★★★★★★★★★★★★:标“★”的地方填写一个随机字符串。注意不要删掉前面的斜杠。 264 | 265 | “随机字符串”就是你在键盘上胡乱敲打出来的东西,比如dsfhsdjfhref。[推荐用这个网站生成一个](https://www.random.org/strings/?num=1&len=7&digits=on&upperalpha=on&loweralpha=on&unique=off&format=html&rnd=new),只要打开或刷新网页就可以得到一个随机字符串。 266 | 267 | 我用这个网站随机生成的字符串是mL7Gg8K 268 | 269 | 这个随机字符串就是WebSocket路径,不要抄我这里的例子,去自己生成一个!否则会被墙探测出来。建议WebSocket路径取得长一些(5个字符以上),过于简单,过于常见的路径(比如/ray,/v2,/v2ray之类的名称),很容易被墙探测出来。 270 | 271 | 填好之后的配置如下图: 272 | 273 | ![img2.1.1](https://i.imgur.com/K1FEnrw.png) 274 | 275 | 最后,把V2Ray的配置文件另存为config.json 276 | 277 | 2.2 Nginx配置文件 278 | 279 | Nginx配置文件如下: 280 | 281 | ``` 282 | server { 283 | ### 1: 284 | server_name ●●●●●●●●●●●●; 285 | 286 | listen 80; 287 | rewrite ^(.*) https://$server_name$1 permanent; 288 | if ($request_method !~ ^(POST|GET)$) { return 501; } 289 | autoindex off; 290 | server_tokens off; 291 | } 292 | 293 | server { 294 | ### 2: 295 | ssl_certificate /etc/letsencrypt/live/●●●●●●●●●●●●/fullchain.pem; 296 | 297 | ### 3: 298 | ssl_certificate_key /etc/letsencrypt/live/●●●●●●●●●●●●/privkey.pem; 299 | 300 | ### 4: 301 | location /★★★★★★★★★★★★ 302 | { 303 | proxy_pass http://127.0.0.1:8964; 304 | proxy_redirect off; 305 | 306 | proxy_http_version 1.1; 307 | proxy_set_header Upgrade $http_upgrade; 308 | proxy_set_header Connection "upgrade"; 309 | proxy_set_header Host $host; 310 | 311 | sendfile on; 312 | tcp_nopush on; 313 | tcp_nodelay on; 314 | keepalive_requests 25600; 315 | keepalive_timeout 300 300; 316 | proxy_buffering off; 317 | proxy_buffer_size 8k; 318 | } 319 | 320 | listen 443 ssl http2; 321 | server_name $server_name; 322 | charset utf-8; 323 | 324 | ssl_protocols TLSv1.2 TLSv1.3; 325 | ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; 326 | ssl_prefer_server_ciphers on; 327 | 328 | ssl_session_cache shared:SSL:60m; 329 | ssl_session_timeout 1d; 330 | ssl_session_tickets off; 331 | 332 | ssl_stapling on; 333 | ssl_stapling_verify on; 334 | resolver 8.8.8.8 8.8.4.4 valid=300s; 335 | resolver_timeout 10s; 336 | 337 | # Security settings 338 | if ($request_method !~ ^(POST|GET)$) { return 501; } 339 | add_header X-Frame-Options DENY; 340 | add_header X-XSS-Protection "1; mode=block"; 341 | add_header X-Content-Type-Options nosniff; 342 | add_header Strict-Transport-Security max-age=31536000 always; 343 | autoindex off; 344 | server_tokens off; 345 | 346 | index index.html index.htm index.php; 347 | root /usr/share/nginx/html; 348 | location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF|png)$ { access_log off; } 349 | } 350 | ``` 351 | 352 | 看上去很长,实际上只有四处需要填写,配置文件里用#1,#2,#3,#4标出了位置,把标符号的地方换成你自己的信息。 353 | 354 | ●●●●●●●●●●●●:标注“●”的地方填写域名,注意这里的域名带www 355 | 356 | 这个域名就是前面购买的域名,本文中是www.hrw1rdzqa7c5a8u3ibkn.website,一共有三处需要填,都以“●”标出: 357 | 358 | (1) server_name ●●●●●●●●●●●●; 注意域名和前面的server_name保持一个空格,后面的分号“;”不要删掉。 359 | 填好之后:(注意带www,以下皆相同) 360 | 361 | `server_name www.hrw1rdzqa7c5a8u3ibkn.website;` 362 | 363 | (2) ssl_certificate /etc/letsencrypt/live/●●●●●●●●●●●●/fullchain.pem; 两边的斜杠“/”不要删掉。 364 | 365 | 填好之后: 366 | 367 | `ssl_certificate /etc/letsencrypt/live/www.hrw1rdzqa7c5a8u3ibkn.website/fullchain.pem;` 368 | 369 | (3) ssl_certificate /etc/letsencrypt/live/●●●●●●●●●●●●/fullchain.pem; 一样,两边的斜杠“/”不要删掉 370 | 371 | 填好之后: 372 | 373 | `ssl_certificate /etc/letsencrypt/live/www.hrw1rdzqa7c5a8u3ibkn.website/fullchain.pem;` 374 | 375 | (4) ★★★★★★★★★★★★:标注“★”的地方填写一个随机字符串,这个随机字符串必须和V2Ray配置中的一样,不然无法工作。注意不要删掉前面的斜杠。 376 | 377 | 这个例子里,此处填mL7Gg8K。 378 | 379 | 填好之后的配置如下图: 380 | 381 | ![img2.1.2](https://i.imgur.com/Vc5LhXw.png) 382 | 383 | 最后,把Nginx的配置文件另存为default.conf(注意扩展名就是.conf) 384 | 385 | 386 | ## 3.上传配置 & 运行 387 | 388 | 3.1 连接到服务器,安装v2ray+Nginx 389 | 390 | 很多新手在买到VPS之后不知所措,其实VPS和游戏账号是一样的,买游戏账号付款之后,店家会私信告诉你两件东西: 391 | >用户名,密码 392 | 393 | 394 | 买VPS付款之后,VPS提供商会给你发邮件,告诉你四件东西: 395 | >IP地址,密码,登录账号,端口 396 | 397 | 398 | IP地址和密码一定会有,登录账号如果没说,默认是root。端口如果没说,默认填22. 399 | 400 | 拿到登录信息之后,就可以登录服务器了。这里推荐Bitvise SSH,轻量级,但是功能强大。 401 | 402 | 下载链接:[https://www.bitvise.com/ssh-client-download](https://www.bitvise.com/ssh-client-download) 403 | 404 | 直接下载链接:[https://dl.bitvise.com/BvSshClient-Inst.exe](https://dl.bitvise.com/BvSshClient-Inst.exe) 405 | 406 | 安装好之后的界面如下图,点红框圈起的下拉菜单,【Initial method】下拉菜单里面选【password】,在【Store encrypted password in profile】选项上打勾。 407 | 408 | ![img3.1.1](https://i.imgur.com/FliqoSK.png) 409 | 410 | 这里假定我们的IP地址是218.30.118.6,密码是12345,登录账号和密码分别是root和22. 如图: 411 | 412 | * 【Host】:这里填IP地址 413 | * 【Port】:这里填端口,如果没说就是22 414 | * 【Username】:这里填用户名,如果没说就是root 415 | * 【Password】:登录密码。 416 | 417 | 填好之后如下图,点【Log in】就可以登录了。 418 | 419 | ![img3.1.2](https://i.imgur.com/mWm5Oxq.png) 420 | 421 | 第一次登录服务器会弹出窗口,问是否要保存密钥,点【Accept and save】继续。 422 | 423 | 成功登录之后会弹出两个窗口。 424 | 425 | ![img3.1.3](https://i.imgur.com/DvucZdx.png) 426 | 427 | ![img3.1.4](https://i.imgur.com/UNzAKOO.png) 428 | 429 | 一个是文件浏览窗口,使用方法和Windows资源管理器一样,这里可以浏览服务器上的文件。把电脑中的文件拖拽到这里,就可以把文件上传到服务器。 430 | 431 | 另一个黑色的窗口是命令窗口。在电脑上复制一段文字,在这个窗口上右键,就可以把文字粘贴到命令窗口。 432 | 433 | 3.2 配置SSL证书 434 | 435 | 为了用真正的https流量翻墙,我们的网站必须有合法的SSL证书。可以用自动化工具Certbot申请证书,只要把以下命令复制到命令窗口,依次执行即可。 436 | 437 | 这里说的“证书”,实际指的是“数字证书”。当然申请完全是免费的,申请时需要邮箱地址。如有必要,可以使用匿名邮箱。 438 | 439 | (1) 安装Certbot: 440 | `yum install -y python36 && pip3 install certbot` 441 | 442 | 443 | 运行这条命令后,如果显示: 444 | Successfully installed xxxx, xxxx, xxxx (各种软件包名字) 445 | 446 | 就表示成功。 447 | 448 | (2) 停止防火墙 449 | `systemctl stop firewalld && systemctl disable firewalld` 450 | 451 | 注意,在CentOS7版本以上,默认开启防火墙,不关闭防火墙将无法申请证书。某些系统上没有安装firewalld防火墙,执行这一步命令会报错,但是不影响后面的操作。 452 | 453 | 运行这条命令后,如果显示: 454 | >Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. 455 | Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. 456 | 457 | 就表示成功 458 | 459 | (3) 申请SSL证书 460 | 这一步做个填空题,把这条命令里的域名和邮箱,换成你自己的信息。 461 | `certbot certonly --standalone --agree-tos -n -d www.●●●●●● -d ●●●●●● -m ▲▲▲@▲▲▲.▲▲▲` 462 | 463 | 第一个-d加一个带www的域名,第二个-d加一个不带www的域名,-m后面加你的电子邮箱。 464 | 465 | 注意前后要带空格。 466 | 467 | 例子:(域名:www.hrw1rdzqa7c5a8u3ibkn.website,邮箱:xijinping@protonmail.com) 468 | 469 | ``` 470 | certbot certonly --standalone --agree-tos -n -d www.hrw1rdzqa7c5a8u3ibkn.website -d hrw1rdzqa7c5a8u3ibkn.website -m xijinping@protonmail.com 471 | ``` 472 | 473 | 运行这条命令后,如果显示: 474 | 475 | >IMPORTANT NOTES: 476 | - Congratulations! Your certificate and chain have been saved at: 477 | /etc/letsencrypt/live/www.hrw1rdzqa7c5a8u3ibkn.website/fullchain.pem 478 | Your key file has been saved at: 479 | /etc/letsencrypt/live/www.hrw1rdzqa7c5a8u3ibkn.website/privkey.pem 480 | Your cert will expire on 2020-06-04. To obtain a new or tweaked 481 | version of this certificate in the future, simply run certbot 482 | again. To non-interactively renew *all* of your certificates, run 483 | "certbot renew" 484 | - Your account credentials have been saved in your Certbot 485 | configuration directory at /etc/letsencrypt. You should make a 486 | secure backup of this folder now. This configuration directory will 487 | also contain certificates and private keys obtained by Certbot so 488 | making regular backups of this folder is ideal. 489 | - If you like Certbot, please consider supporting our work by: 490 | 491 | > Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate 492 | Donating to EFF: https://eff.org 493 | 494 | 495 | 就表示成功。 496 | 497 | 注意:这一步比较容易出错,常见的问题有: 498 | 499 | * 其它代理占用了80,443端口。解决方法:停止其它代理软件,或重装VPS。 500 | * 没有正确配置域名解析。解决方法:ping一下域名,看看能不能正确解析到IP。注意不要打开CDN(云朵点灰)。 501 | * 没有关闭防火墙。解决方法:回到(2),关闭防火墙。 502 | 503 | (4) 配置证书自动更新 504 | `echo "0 0 1 */2 * service nginx stop; certbot renew; service nginx start;" | crontab` 505 | 506 | 运行这条命令后,如果没有任何信息输出,就表示成功。 507 | 508 | 我们申请的证书只有三个月期限,上面的命令表示每隔两个月,证书就自动续命一次,从而保证可以一直用下去。 509 | 510 | 3.3 安装V2Ray和Nginx 511 | 512 | (1) 一键安装 513 | 514 | V2Ray和Nginx可以一键安装,把下列命令复制粘贴到控制台,运行即可。 515 | 516 | `yum install -y nginx && yum install -y curl && bash -c "$(curl -L -s https://install.direct/go.sh)"` 517 | 518 | 运行这条命令后,如果最后一行显示: 519 | V2Ray v4.x.x is installed. 520 | 就表示成功。(如果V2Ray安装成功,那么Nginx也一定安装成功) 521 | 522 | (2) 关闭SELinux 523 | 524 | 在某些系统上,需要关闭SELinux,否则Nginx无法正常将流量转发给V2Ray,输入 525 | `setsebool -P httpd_can_network_connect 1 && setenforce 0` 526 | 527 | 关闭SELinux,没有提示就表示成功。 528 | 529 | ## 4 上传配置文件&运行 530 | 531 | 安装好V2Ray和Nginx后,我们终于来到了最后一步。在启动V2Ray之前,需要把之前的配置文件上传 532 | 533 | 4.1 上传配置文件 534 | 535 | 这一步把第(2)步编辑好的配置文件上传就可以了。 536 | 首先上传V2Ray的配置文件,V2Ray的配置文件存储在 537 | 538 | `/etc/v2ray` 539 | 540 | 目录下,把上面这个路径,复制到文件管理器的路径栏,回车,即可跳转到该目录下。如图: 541 | 542 | ![img4.1.1](https://i.imgur.com/Cj92ghh.png) 543 | 544 | 可以看到这里已经有一个config.json文件了,这是V2Ray安装时自动生成的。接下来的操作和Windows一样,把你编辑好的config.json拖拽到这里,就可以上传了。 545 | 546 | 文件管理器会提示你存在同名文件,选择【Overwrite】覆盖原来的文件即可。 547 | 548 | ![img4.1.2](https://i.imgur.com/n0Uqnj7.png) 549 | 550 | 上传完成好以后,最好再验证一下,输入 551 | 552 | `/usr/bin/v2ray/v2ray -test -config=/etc/v2ray/config.json` 553 | 554 | 如果显示: 555 | 556 | >V2Ray 4.x.x (V2Fly, a community-driven edition of V2Ray.) 557 | > 558 | >A unified platform for anti-censorship. 559 | > 560 | >Configuration OK. 561 | 562 | 563 | 说明配置没有问题。 564 | 565 | 然后按同样的步骤上传nginx配置文件,Nginx的配置文件存储在 566 | 567 | `/etc/nginx/conf.d` 568 | 569 | 目录下,转到这个目录,拖拽上传你编辑的default.conf文件即可。 570 | 571 | 再验证一下Nginx配置是否正确,输入: 572 | 573 | `nginx -t` 574 | 575 | 如果显示: 576 | 577 | >nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 578 | nginx: configuration file /etc/nginx/nginx.conf test is successful 579 | 580 | 581 | 说明配置没有问题。 582 | 583 | 4.2 启动 584 | 585 | V2Ray和Nginx都是守护进程,可以认为是Windows上的“后台服务”。把V2Ray和Nginx配置成守护进程以后,这两个程序就可以在服务器上持续运行了。Linux服务器的稳定性非常高,可以连续不重启运行一年,甚至更长。我们接下来就让V2Ray和Nginx在服务器上运行一年。 586 | 587 | 在Linux上启动一个守护进程很简单,输入以下两条命令就可以启动V2Ray和Nginx: 588 | 589 | ``` 590 | service v2ray start 591 | service nginx start 592 | ``` 593 | 594 | 有启动,也有其它操作,这里列出所有有用的命令,方便管理后台: 595 | 596 | 启动V2Ray: 597 | 598 | `service v2ray start` 599 | 600 | 重启V2Ray: 601 | 602 | `service v2ray restart` 603 | 604 | 注:这一条是常用命令,每次修改配置文件后,都要重启一下V2Ray。 605 | 606 | 查看V2Ray状态: 607 | 608 | `service v2ray status` 609 | 610 | 停止V2Ray: 611 | 612 | `service v2ray stop` 613 | 614 | 查看V2Ray版本: 615 | 616 | `/usr/bin/v2ray/v2ray -version` 617 | 618 | 测试V2Ray配置文件: 619 | 620 | `/usr/bin/v2ray/v2ray -test -config=/etc/v2ray/config.json` 621 | 622 | 注:常用命令,每次修改配置文件后,最好检查一下配置文件是否正确。 623 | 配置文件位置: 624 | 625 | `/etc/v2ray/config.json ` 626 | 627 | Nginx: 628 | 629 | 启动Nginx: 630 | 631 | `service nginx start` 632 | 633 | 重启Nginx: 634 | 635 | `service nginx restart` 636 | 637 | 查看Nginx状态: 638 | 639 | `service nginx status` 640 | 641 | 停止Nginx: 642 | 643 | `service nginx stop` 644 | 645 | 测试Nginx配置文件: 646 | 647 | `nginx -t` 648 | 649 | 配置文件位置: 650 | 651 | `/etc/nginx/conf.d/default.conf` 652 | 653 | 配置完成后,可以在浏览器里输入网址,如果显示Nginx的红色欢迎页面,就说明网址配置成功了! 654 | 655 | 接下来要做的是上传一个网页模板,这样别人访问你的服务器就会看到一个真的网站。 656 | 657 | ![img4.2.1](https://i.imgur.com/Npk1rOW.png) 658 | 659 | 4.3 上传网页模板 660 | 661 | 去Google上搜“website template”可以找到很多提供网页模板的网站,这里随便找一家,例如[https://colorlib.com/wp/templates/](https://colorlib.com/wp/templates/) 662 | 663 | 网页模板强烈建议用纯英文模板,其中不要包含任何中文内容,否则(可能)会增加网站被墙的概率。 664 | 665 | 下载好以后,解压压缩文件,一路点开,如图,可以看到里面有一个index.html文件(有些是index.htm或index.php) 666 | 667 | ![img4.3.1](https://i.imgur.com/8UXO1Ul.png) 668 | 669 | 把这个文件夹里的所有东西,包括index.html,blog.html,以及css,fonts,img,js几个文件夹,全部上传到 670 | /usr/share/nginx/html/ 671 | 目录下面。上传方法前面已有介绍,打开Bitvise SSH,拖动到文件管理窗口即可上传。 672 | 673 | 接下来打开网址,这时候可以看到一个真正的网站。 674 | 675 | ## 5 客户端配置 676 | 677 | 5.1 Windows客户端 678 | 679 | Windows客户端推荐V2RayN,V2RayN是开源软件,下载地址: 680 | [https://github.com/2dust/v2rayN/releases](https://github.com/2dust/v2rayN/releases) 681 | 682 | 可以看到有一个v2rayN-Core.zip和一个v2rayN.zip,这里下载v2rayN-Core.zip(GUI界面+V2Ray内核)。 683 | 684 | 安装好V2RayN之后,如图 685 | 686 | ![img5.1.1](https://i.imgur.com/UP27H1F.png) 687 | 688 | 点【服务器】按钮,选择【添加VMess】服务器。 689 | 690 | * 地址:你的VPS的IP地址,这里我的IP是218.30.118.6。 691 | * 端口:443 692 | * 用户ID:就是2.1节中,V2Ray配置文件里的UUID,本文中是63c0042a-4a85-4d03-a488-3ba3aa002461 693 | * 额外ID:0(保持默认值) 694 | * 加密方式:随便选。 695 | * 传输协议:选ws,即WebSocket 696 | * 别名:随便填。 697 | * 伪装类型:none(保持默认值) 698 | * 伪装域名:绑定到服务器的域名,我的是www.hrw1rdzqa7c5a8u3ibkn.website 699 | * 路径:即前面的随机字符串,注意前面必须要加上斜杠“/”,这里的例子是/mL7Gg8K 700 | * 底层传输安全:选tls 701 | 702 | 配置完成后如下图: 703 | 704 | ![img5.1.2](https://i.imgur.com/rYmRD6S.png) 705 | 706 | 5.2 Android客户端 707 | 708 | 安卓客户端推荐V2RayNG,配置和V2RayN可以互通。下载地址: 709 | [https://github.com/2dust/v2rayNG/releases](https://github.com/2dust/v2rayNG/releases) 710 | 711 | 分享配置很简单,在Windows的V2RayN客户端里,点击服务器列表,勾选右边的“显示分享内容”,可以显示配置的二维码。安卓端选择“扫描二维码”导入配置即可。 712 | 713 | 5.3 iOS客户端 714 | 715 | iOS客户端全部要收费,常用有Shadowrocket(小火箭)等。配置方法略。 716 | 717 | 其它平台客户端(Mac OS,Linux)可以查看V2Ray官网的客户端列表:[神一样的工具们](https://v2ray.com/awesome/tools.html) 718 | 719 | 到这一步结束,整个V2Ray翻墙的搭建就结束了。接下来是一些可选配置,可以加强你的服务器的隐蔽性和安全性。 720 | 721 | 可选配置1:使用CDN隐藏IP 722 | 723 | CDN相当于在服务器前又加了一层代理,墙只知道你的域名和CDN的IP,无法得知代理服务器的真实IP。如果伪装网站开启了DoH+ESNI,甚至连域名都可以隐藏。因此v2ray+ws+tls+web+CDN相当于事实上的双重代理,它的隐蔽性和安全性非常高。缺点是Cloudflare 会让访问延迟变高一些。除非遇到IP被墙,或者特殊节日前后等墙加高等极端情况,如果平时翻墙很稳定,就没有必要打开CDN。 724 | 725 | 因为前面已经注册了Cloudflare解析,所以使用CDN非常简单,只要两步即可。 726 | 727 | (1) 登录Cloudflare账号,点击【DNS】按钮,进入Cloudflare的管理页面,如图: 728 | 729 | ![fig1](https://i.imgur.com/ihzyMBe.png) 730 | 731 | 点一下灰色的云,让颜色变成橙色即可。 732 | 733 | 点击切换后,域名不会马上解析到CDN的地址,一般会有几分钟的延迟。可以ping一下你的服务器的域名,如果返回地址是CDN的IP,就说明切换完成。 734 | 735 | (2) 接下来配置客户端。客户端切换成CDN很简单,配置的其它地方不用改动,只要把地址一栏换成域名即可,如图 736 | 737 | ![fig2](https://i.imgur.com/1MsBKA0.png) 738 | 739 | 手机端配置方法类似,把IP换成网址即可。 740 | 741 | 可选配置2:加固服务器,配置防火墙 742 | 743 | 如果VPS上没有其它服务,建议打开防火墙。服务器对外只暴露80,443,SSH端口,可以降低代理服务器被探测的风险。 744 | 745 | 前面的步骤中禁用了防火墙firewalld,不是所有的机器都安装了firewalld,我们这里使用ufw防火墙作为替代。 746 | 747 | 安装ufw: 748 | 749 | `yum install -y epel-release && yum install -y ufw` 750 | 751 | 打开SSH,HTTP,HTTPS端口,运行: 752 | 753 | `ufw disable && ufw allow ssh && ufw allow http && ufw allow https && ufw enable` 754 | 755 | 如果ssh端口不是22,那么需要将ssh改为端口号。例如ssh端口为14320,则: 756 | 757 | `ufw disable && ufw allow 14320 && ufw allow http && ufw allow https && ufw enable` 758 | 759 | ufw和firewalld的底层实现都是一样的,都调用了linux iptables,本质并无太大区别。 760 | 761 | 可选配置3:使用BBR加速 762 | 763 | BBR是谷歌开发的拥塞控制算法,可以降低延迟,加快访问速度。启用BBR需要4.10以上版本Linux内核,现在大多数VPS都满足这一条件,输入uname(空格)-a可以查看内核版本. 764 | 765 | 如果内核版本大于4.10就可以用BBR了,把以下三条命令复制到命令窗口执行: 766 | ``` 767 | bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf' 768 | bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf' 769 | sysctl -p 770 | ``` 771 | 772 | 然后运行以下命令,查看BBR是否启动成功: 773 | 774 | `sysctl net.ipv4.tcp_congestion_control` 775 | 776 | 如果提示 777 | 778 | `net.ipv4.tcp_congestion_control = bbr` 779 | 780 | 就表示成功启动了BBR加速。 781 | 782 | 783 | 到这里,整个V2Ray翻墙教程就结束了,过程总结: 784 | 785 | * 购买域名 & 配置域名解析 786 | * 安装Nginx和V2Ray 787 | * 上传配置文件 788 | 789 | 可选步骤: 790 | 791 | * CDN隐藏IP 792 | * 打开防火墙 793 | * BBR加速 794 | 795 | VPS推荐 796 | 797 | 在此列出一些外资VPS提供商,主要是为了给出一些直观的参考,说明自建翻墙服务的成本相对较低。这里列出的VPS网上已有大量测评,可靠性有保证。但如果使用中出现问题,我也无法为此负责。 798 | (以下信息可能会变动,供参考。此处价格单位是人民币) 799 | 800 | * Bandwagon:流量1TB/月,价格28元/月。 801 | * Vultr IPv4:流量0.5TB/月,价格24.5元/月 802 | * Vultr IPv6:流量0.5TB/月,价格17.5元/月 803 | * VIRMACH:流量0.5TB/月,价格8.75元/月 804 | * RamNode:流量1TB/月,价格21元/月 805 | * OneVPS:流量2TB/月,价格35元/月 806 | * ChangeIP:流量无限,价格14元/月 807 | * INVS:流量无限,价格10元/月 808 | 809 | 搭建V2Ray需要的配置很低,一般单核CPU,256MB内存就足够3-4个人看YouTube了。廉价VPS的配置都差不多(单核CPU,几百MB内存),出口带宽一般比较高(1Gbps,约合100MB/s)。挑选这类VPS最直观的指标就是价格和流量。 810 | 811 | IP段,网络质量也是重要的指标,但这些指标无法直接给出,如果有特殊需求(比如看Netflix,比特币匿名付款),需要在网上多找相关测评。 812 | 813 | 总之,VPS的性价比很高,就是最廉价的VPS看高清Youtube也完全够用。如果愿意每个月花5美元以上,足够买到网络质量非常高,流量无限的机器。 814 | 815 | 补充一下配置时经常遇到的问题和解决方案 816 | 817 | 1.没有Nginx安装源 818 | 某些VPS商家提供的系统中,没有带nginx的安装源。因此在运行V2Ray和Nginx的一键安装命令时会出现以下错误: 819 | 820 | >Loaded plugins: fastestmirror 821 | Loading mirror speeds from cached hostfile 822 | * base: xxxxxx 823 | * extras: xxxxxx 824 | * updates: xxxxxx 825 | No package nginx available. 826 | Error: Nothing to do 827 | 828 | 解决办法:手动添加安装源即可,根据你的系统版本,运行以下命令: 829 | 830 | CentOS7:(这是大多数VPS的系统版本) 831 | 832 | `rpm -ivh https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.16.1-1.el7.ngx.x86_64.rpm` 833 | 834 | CentOS8: 835 | 836 | `rpm -ivh https://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.16.1-1.el8.ngx.x86_64.rpm` 837 | 838 | CentOS6: 839 | 840 | `rpm -ivh https://nginx.org/packages/centos/6/SRPMS/nginx-1.8.1-1.el6.ngx.src.rpm` 841 | 842 | 2.V2Ray安装问题 843 | 换成以下一键命令: 844 | 845 | `yum install -y curl && yum install -y nginx && bash <(curl -L -s https://install.direct/go.sh)` 846 | 847 | 3.使用IPv6 848 | 849 | Nginx不会主动监听IPv6地址,如果配置了AAAA记录,需要在端口号前加上[::]: 850 | 851 | 填好之后: 852 | 853 | ``` 854 | listen [::]:80; 855 | listen [::]:443 ssl http2; 856 | ``` 857 | 858 | 4.提示“重定向次数过多” 859 | 860 | 登录cloudflare,在网站管理界面,点【SSL/TLS】。 861 | 862 | 在页面的四个选项中,选【full】。(默认为【flexible】) 863 | 864 | 5.客户端出现如下502错误 865 | 866 | >[Warning] failed to handler mux client connection > v2ray.com/core/proxy/vmess/outbound: failed to find an available destination > v2ray.com/core/common/retry: [v2ray.com/core/transport/internet/websocket: failed to dial WebSocket > v2ray.com/core/transport/internet/websocket: failed to dial to (wss://你的域名): 502 Bad Gateway > websocket: bad handshake] > v2ray.com/core/common/retry: all retry attempts failed 867 | > 868 | 869 | 原因:Nginx无法把流量转发给V2Ray,原因是没有关闭SELinux。 870 | 871 | 解决办法:按照3.3节的方法,关闭SELinux。 872 | 输入: 873 | 874 | `setsebool -P httpd_can_network_connect 1 && setenforce 0 ` 875 | 即可 876 | 877 | #### 相关推荐 878 | 879 | 1 [V2Ray翻墙完全教程(WS+TLS+Web)](https://pincong.rocks/article/15493) 880 | 881 | 2 [自建梯子教程 --Trojan版本](https://trojan-tutor.github.io/2019/04/10/p41.html) 882 | -------------------------------------------------------------------------------- /v2ray.md: -------------------------------------------------------------------------------- 1 | 2 | ## 科学上网工具 V2Ray 简介及具体搭建流程 3 | 4 | ### 关于V2Ray 5 | 6 | 7 | V2Ray是一个功能类似于Shadowsocks的代理工具,可以帮我们实现科学上网,支持 Socks、HTTP、Shadowsocks、VMess 等协议。 8 | 9 | 10 | ### V2Ray与Shadowsocks有什么区别 11 | 12 | * 1.开发时间晚于Shadowsocks,功能更为强大,目前仍在维护更新。 13 | * 2.使用自主VMess协议,不易被墙屏蔽。 14 | * 3.网络传输效率更高,并且具有Mux多路复用功能,并发性能强 15 | * 4.自带mKCP协议,可免去KCPTUN的安装。 16 | * 5.可设置流量伪装,类似ShadowSocksR的混淆功能。 17 | * 6.目前比较小众,被封锁的可能性较小。 18 | 19 | ### V2Ray的缺点: 20 | 21 | 1.目前SSR科学上网仍是主流,V2Ray的教程不多,上手稍慢。 22 | 2.因为功能强大,所有需要设置的参数稍多,不过已经有图形化界面了,设置并不复杂。 23 | 24 | ### 搭建V2Ray所需条件 25 | 26 | 27 | 其实搭建V2Ray的条件与SSR所需条件基本一致,并没有太特殊的。 28 | 29 | V2Ray也是需要在国外VPS服务器上安装服务端,然后在本地设备上安装V2Ray客户端,设置好后客户端成功连接服务端就可以。 30 | 31 | 所以V2Ray的搭建流程: 32 | 33 | * 购买一台国外VPS服务器。 34 | * 一键安装V2Ray服务端。 35 | * 在本地设备安装V2Ray客户端 36 | * 连接成功。 37 | 38 | 下面我们分别介绍。 39 | 40 | 1.V2Ray服务器购买 41 | 42 | 之前在SSR的相关教程里,我们介绍过,国外VPS服务器并不贵,512M内存的VPS就够用了,平均每月大概十几块钱,相当于一碗面钱,可以用支付宝付美元,与日常网购区别不大。 43 | 44 | 用哪家的服务器,怎么购买 45 | 46 | [搬瓦工](https://bandwagonhost.com/aff.php?aff=19935) [Vultr](https://www.vultr.com/?ref=7887711-4F) [ONEVPS](https://www.onevps.com/portal/aff.php?aff=3257) 47 | 48 | 2.在VPS服务器上安装V2Ray 49 | 50 | 2.1 Putty连接VPS服务器,复制以下命令输入开始安装: 51 | 52 | ``` 53 | wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/V2ray.Fun/master/install.sh && bash install.sh 54 | ``` 55 | 56 | 如果运行以上命令时,出现找不到wget的英文提示,则表示系统没有安装wget,根据系统不同,选择以下命令安装: 57 | 58 | `yum -y install wget` 59 | 60 | 2.2 V2Ray安装接近完成时,会提示输入用户名、密码、控制面板端口,可随意设置,如下图: 61 | 62 | 访问控制面板需要用这个端口,用户名和密码用于登录控制面板。 63 | 64 | ![](https://ssr.tools/wp-content/uploads/2018-07-26_183309.jpg) 65 | 66 | 2.3 正常来说,V2Ray已经安装成功了,可以尝试在浏览器打开控制面板地址。不过博主在这一步后无法打开V2Ray控制面板,可能是个例,保险起见,再复制以下命令运行: 67 | 68 | `pip install Flask-BasicAuth` 69 | 70 | 2.4 以上命令运行完成后,我们再启动面板。Putty输入以下命令,然后选择1回车。如下图,提示V2ray.fun started,即表示启动成功。 71 | 72 | ![](https://ssr.tools/wp-content/uploads/2018-07-26_183519.jpg) 73 | 74 | 5.浏览器输入服务器IP+刚才设置的端口,访问V2Ray控制面板,输入用户名和密码登录,登录成功后的界面如下图所示: 75 | 76 | ![](https://ssr.tools/wp-content/uploads/2018-07-26_194039.jpg) 77 | 78 | 各项连接参数都显示在运行状态菜单。最下面的Vmess链接和二维码图片,都可以用于客户端连接。 79 | 80 | ### V2Ray控制面板设置 81 | V2Ray.fun控制面板的修改连接菜单中,我们可以修改各项连接参数,如下图所示 82 | 83 | 84 | * 运行控制:用于控制V2Ray的状态。 85 | * UUID:用于客户端连接使用,默认是自动生成的,可以点击右侧按钮生成一个新的。 86 | * 主端口:用于客户端连接的端口,可设置一个新的端口,然后点击右侧的修改端口进行修改。 87 | * 加密方式:用于客户端连接的参数,不懂的话,默认即可。 88 | * 传输方式:也是客户端连接参数之一,默认即可。 89 | * TLS:不建议开启,默认是关闭的,右侧两个按钮是操作按钮,并非表示当前状态。 90 | * Mux cool:多路复用功能,可提高并发连接性能,默认开启 91 | 92 | 93 | 以上各项参数设置完成后,就可以通过V2Ray客户端连接了。点击上图左侧的运行状态菜单,用V2Ray客户端扫描二维码即可连接,或者输入Vmess链接也可以 94 | 95 | V2Ray各客户端下载、安装及使用教程可参考: 96 | 97 | [V2Ray各平台客户端下载汇总 带图形化界面](https://ssr.tools/314) 98 | 99 | 参考链接: 100 | 101 | [V2Ray一键安装脚本 自带图形化界面控制面板](https://ssr.tools/269) 102 | -------------------------------------------------------------------------------- /v2ray面板.md: -------------------------------------------------------------------------------- 1 | # sprov-ui,支持多协议多用户的v2ray管理面板 2 | 3 | 4 | ##查看面板支持的功能 5 | 6 | ### 支持的功能 7 | 8 | https 访问面板 9 | 10 | 系统运行状态监控 11 | 12 | 多协议、多用户管理 13 | 14 | 禁用、启用单个账号 15 | 16 | 支持设置监听的 IP(多 IP 服务器下) 17 | 18 | 流量统计(支持所有协议) 19 | 20 | ### 支持的 v2ray 协议 21 | 22 | vmess(v2ray 特色) 23 | 24 | shadowsocks(经典 ss) 25 | 26 | mtproto(Telegram 专用) 27 | 28 | dokodemo-door(端口转发) 29 | 30 | socks(socks 4、socks 4a、socks 5) 31 | 32 | http(http 代理) 33 | 34 | ### 支持的 vmess 传输配置 35 | 36 | tcp 37 | kcp + 伪装 38 | ws + 伪装 + tls 39 | http/2 + 伪装 + tls 40 | 41 | ## 一、sprov-ui 安装&升级 42 | 43 | 推荐内存在 256MB 及以上的 vps 安装,在低内存的 vps 下可能运行不佳,你可以试试设置虚拟内存来缓解内存压力。 44 | 45 | 支持的系统,最好是纯净版的系统,在精简版的系统中可能会安装失败: 46 | 47 | CentOS 7(推荐) 48 | 49 | Ubuntu 16 50 | 51 | Ubuntu 18 52 | 53 | Debian 8 54 | 55 | Debian 9 56 | 57 | ### 一键管理脚本 58 | 59 | >以下四组命令任君选择,效果都是一样的,如果下载脚本有报错则尝试另一组。 60 | 61 | >请务必使用 root 用户运行脚本,否则会出问题:sudo su root,或者在命令前加上 sudo 62 | 63 | ``` 64 | wget -O /usr/bin/sprov-ui -N --no-check-certificate https://blog.sprov.xyz/sprov-ui.sh && chmod +x /usr/bin/sprov-ui && sprov-ui 65 | ``` 66 | 67 | ``` 68 | wget -O /usr/bin/sprov-ui -N --no-check-certificate https://github.com/sprov065/sprov-ui/raw/master/sprov-ui.sh && chmod +x /usr/bin/sprov-ui && sprov-ui 69 | ``` 70 | 71 | ``` 72 | yum install wget -y 73 | apt-get install wget -y 74 | wget -O sprov-ui https://blog.sprov.xyz/sprov-ui.sh 75 | chmod +x sprov-ui 76 | mv sprov-ui /usr/bin/ -f 77 | sprov-ui 78 | ``` 79 | 80 | ``` 81 | yum install wget -y 82 | apt-get install wget -y 83 | wget -O sprov-ui https://github.com/sprov065/sprov-ui/raw/master/sprov-ui.sh 84 | chmod +x sprov-ui 85 | mv sprov-ui /usr/bin/ -f 86 | sprov-ui 87 | ``` 88 | 89 | 运行管理脚本会出现如下界面,这就不用多说了吧,输入 1,并回车即可安装面板。 90 | 91 | ![一键管理脚本](https://blog.sprov.xyz/wp-content/uploads/2019/05/image-2.png) 92 | 93 | 94 | 安装面板可能需要几分钟时间,该脚本会安装 Java 环境、v2ray(如果已安装则会强制升级到最新版)、以及关闭防火墙,安装过程中会让你输入面板监听端口、登录用户名和密码,推荐自己定义,不使用默认的。 95 | 96 | 97 | ![面板安装完成](https://blog.sprov.xyz/wp-content/uploads/2019/05/image-3.png) 98 | 99 | ### 查看手动安装或升级面板方法 100 | 101 | ### 安装谷歌bbr 102 | 103 | 参考这篇文章:[谷歌bbr – tcp加速工具](https://blog.sprov.xyz/2019/02/04/bbr-tcp-faster/) 104 | 105 | ## 二、sprov-ui 使用 106 | 107 | sprov-ui 使用 systemd 来管理,以下是常用的命令,使用这些命令时,可能不会输出任何信息,也可能会输出一些信息,都是正常的。如果输出了错误信息,比如包含了 error 等字样,才代表出错了,需要排查错误。 108 | 109 | ``` 110 | systemctl start sprov-ui # 启动sprov-ui 111 | systemctl restart sprov-ui # 重启sprov-ui 112 | systemctl stop sprov-ui # 关闭sprov-ui 113 | systemctl status sprov-ui # 查看sprov-ui运行状态 114 | systemctl enable sprov-ui # sprov-ui开机启动 115 | systemctl disable sprov-ui # 取消sprov-ui开机启动 116 | ``` 117 | 118 | >以上都是老的管理办法,现在也可以使用,或者也可以使用一键管理脚本,一键管理脚本在文章前面有说明。 119 | 120 | 启动 sprov-ui 后,在浏览器地址栏中输入你的服务器 IP 加冒号端口号,切记是英文的冒号,不是中文的冒号,访问 sprov-ui 面板网页。 121 | 122 | 123 | 使用你设置的用户名和密码登录 sprov-ui 面板。 124 | 125 | 126 | ![登录](https://blog.sprov.xyz/wp-content/uploads/2019/05/image-1.png) 127 | 128 | 登录后可以看到你的服务器的基本状态以及 v2ray 的运行状况。 129 | 130 | 此页面显示的是系统的状态,比如【已运行】表示的是服务器已运行的时间,而不是 v2ray 运行的时间。【网络】和【流量】显示的是整个服务器外网网卡的网络速度和流量,而不是 v2ray 的,如果你发现面板统计了内网的流量,请告知我你的系统版本和所有网卡名称,我将作出修正。 131 | 132 | 133 | ![系统运行状态](https://blog.sprov.xyz/wp-content/uploads/2019/04/blog.sprov.xyz-snipaste-2019-04-06-21-52-06.png) 134 | 135 | 账号列表可以看到你的 v2ray 账号,在这里你可以选择添加多个账号,或者删除、修改账号,添加、修改、删除账号之后记得点击【重启】来使配置生效。 136 | 137 | 【重置】是重置流量的功能,每个账号可单独重置流量,最上面的【重置】按钮可重置所有账号的流量。 138 | 139 | 140 | ![账号列表](https://blog.sprov.xyz/wp-content/uploads/2019/04/blog.sprov.xyz-snipaste-2019-04-06-21-52-07.png) 141 | 142 | ## 三、客户端使用 143 | 144 | 可以在[这篇文章]()https://blog.sprov.xyz/2019/02/04/v2ray-simple-use/的第五章看起,包括Windows、macOS、安卓、iOS的教程。 145 | 146 | ## 四、常见问题 147 | 148 | sprov-ui 启动失败:Address already in use 149 | 150 | 这个问题是因为面板的监听端口被占用了,换个端口即可。 151 | 152 | sprov-ui 启动失败:port out of range:xxxx 153 | 154 | 面板监听的端口超出正常范围,正常范围是1-65535,换个端口即可。 155 | 156 | sprov-ui 启动失败:Invalid keystore format 157 | 158 | 证书有问题,需要 jks 格式的证书,文章下面有配置教程。 159 | 160 | sprov-ui 启动失败:Keystore was tampered with, or password was incorrect 161 | 162 | jks 证书密码错误,如果忘记密码了可以重新生成一个。 163 | 164 | vmess 协议的账号连不上,其它的账号都连得上,端口也是通的 165 | 166 | 这是因为你的服务器时间和本地时间相差过大,vmess 协议要求服务器的 UTC 时间和本地 UTC 时间相差不超过 90 秒,服务器与本地的时区不一样没关系,但是分钟数要相同,请自行修改服务器时间。 167 | 168 | 所有账号都连不上,或者刚刚添加/修改的账号连不上 169 | 170 | 添加、删除、修改账号之后都需要重启 v2ray 才会生效新的配置,点击网页上的【重启】按钮即可,不是【重启面板】。还有确保你的端口是通的,防火墙都放行了。 171 | 172 | 开启 v2ray api 失败:xxxx 173 | 174 | 这个错误的原因一般就是你的 v2ray 配置文件格式过老了,v2ray 的 v4.1 版本开始启用了新的配置文件格式,本面板只支持 v4.1 版本之后的配置文件。 175 | 176 | 通用解决方法: 177 | 178 | 先备份好你的 v2ray 节点信息 179 | 删除 /etc/v2ray/config.json 文件 180 | 重新使用此命令安装 v2ray:bash <(curl -L -s https://install.direct/go.sh) -f 181 | 重启面板 182 | 访问网页出现:Bad response. The server or forwarder response doesn’t look like HTTP. 183 | 184 | 开启 https 后不能使用 http:// 访问,请使用 https:// 访问,且必须使用域名访问,不能使用 ip。 185 | 186 | ## 五、高级操作 187 | 188 | ### 使用域名 189 | 190 | 首先你需要一个域名,并将域名解析到你 vps 的 IP,直接使用域名加端口号登录面板即可,无需其它配置。 191 | 192 | ### sprov-ui 面板配置文件 193 | 194 | 面板配置文件在 /etc/sprov-ui/ 文件夹下,包含两个文件,一个是 sprov-ui.conf,一个是 v2ray-extra-config.json。 195 | 196 | ### sprov-ui.conf 197 | 198 | ``` 199 | port=80 # 面板监听端口 200 | username=sprov # 用户名 201 | password=blog.sprov.xyz # 密码 202 | keystoreFile= # jks 证书文件路径,v3.0.0+ 203 | keystorePass= # jks 证书密码,v3.0.0+ 204 | maxWrongPassCount=5 # 密码最大错误次数,达到此次数则封禁 IP,默认为 5,v3.0.0+ 205 | loginTitle=xxxx # 登录页标题,可自定义,留空则没有标题,v3.1.0+ 206 | loginFooter=xxxx # 登录页页脚,可自定义,支持 html 标签,留空则没有页脚,v3.1.0+ 207 | ``` 208 | 209 | 此文件配置了 sprov-ui 的端口、用户名、密码等等,可以自行修改,修改后需要重启面板生效,留空则使用默认配置。配置错误会导致面板启动失败,例如:port=111111(非法端口号)。 210 | 211 | ### v2ray-extra-config.json 212 | 213 | ``` 214 | { 215 | "disabled-inbounds": [], 216 | "inbounds": [] 217 | } 218 | ``` 219 | 220 | 此文件为 v2ray 配置文件的扩展,为一个 json 文件,包含两个属性:inbounds、disabled-inbounds。 221 | 222 | inbounds 为一个数组,包含若干个 inbound,主要记录流量数据,每个 inbound 的格式如下: 223 | 224 | ``` 225 | { 226 | "tag": "", // tag 标识,不能为空 227 | "downlink": 0, // 下行流量,单位 Byte 228 | "uplink: 0 // 上行流量,单位 Byte 229 | } 230 | ``` 231 | disabled-inbounds 为一个数组,包含若干个 inbound,记录被禁用的 inbound,每个 inbound 都是一个完整的 v2ray inbound,并且还包含流量数据。 232 | 233 | ### 启用面板 https 访问 234 | 235 | sprov-ui v3.0.0 及以上版本支持 236 | 237 | >开启 https 后不能再使用 http:// 访问面板,请使用 https:// 访问面板,且必须使用域名访问,不能使用 ip 238 | 239 | 首先我们申请的证书常见的是 .crt / .pem 等格式,密钥常见的格式是 .key,这些证书不能直接配置在面板里,需要将证书和密钥转换成 .jks 格式的证书,以下是转换教程。 240 | 241 | 将 crt / pem 证书转换为 jks 格式的证书 242 | 243 | 在转换 jks 证书后,上传 jks 证书至你的服务器,并在面板配置文件里添加如下配置,并重启面板: 244 | 245 | ``` 246 | keystoreFile=/path/to/xxx.com.jks # jks 证书文件绝对路径 247 | keystorePass=yourpassword # jks 证书密码,如果没有设置密码则留空 248 | ``` 249 | 250 | 不会上传文件到服务器?看这篇文章:MobaXterm – 一个强大的全能终端 251 | 252 | ### 面板服务器迁移 253 | 254 | 面板的服务器迁移很简单,首先需要备份面板配置文件和 v2ray 配置文件,分别是:/etc/sprov-ui/ 文件夹下所有文件,/etc/v2ray/config.json,如何备份请自行解决。 255 | 256 | 然后在新服务器上重新安装面板,之前备份的文件覆盖掉现有的,最后启动或重启面板即可。 257 | 258 | ## 六、总结 259 | 260 | 以上就是我花了几天来开发的 v2ray 面板,名字叫 sprov-ui,如果你在使用中遇到了问题,或者你有更多的建议,推荐加入 Telegram 群组讨论,也可以在下方评论,或者在 Github 提 issue。 261 | 262 | 参考链接: 263 | 264 | [sprov-ui,支持多协议多用户的v2ray管理面板](https://blog.sprov.xyz/2019/02/09/sprov-ui/) -------------------------------------------------------------------------------- /vps被封-cloudfare-v2ray-.md: -------------------------------------------------------------------------------- 1 | 2 | 前言:IP被封的检测和解决思路已经写成系列文章,最新信息请查看[《搬瓦工vps的IP被封(0) 前言及日志目录》](https://eveaz.com/1093.html)。 3 | 4 | 以下正文: 5 | 6 | 1、先行检测: 7 | 参考[《搬瓦工vps的IP被封(1) 如何检测及更换IP》](https://eveaz.com/1076.html)一文方法。 8 | 9 | 2、情况描述:IP被全面封锁,具体表现如下: 10 | 2.1、ICMP和TCP快速检测; 11 | ![](http://ww1.sinaimg.cn/large/006tNc79gy1g46huv80v4j30jg0adjs2.jpg) 12 | 13 | 2.2、全球ping检测; 14 | 15 | ![](https://eveaz.com/wp-content/uploads/2019060402.jpg) 16 | 17 | 3、准备工作 18 | 3.1、注册域名或使用现有域名; 19 | 3.1.1、本博客使用的域名是在NameSilo注册的,输入本站域名“eveaz.com”可以直减1美刀;阿里云、其它渠道或者免费域名请自行搜索。 20 | 21 | 3.2、vps安装Cenots7系统(建议重装至全新,以免出现错误); 22 | 3.2.1、博主使用的是[”BandwagonHOST(搬瓦工)“](https://bandwagonhost.com/aff.php?aff=19935)的vps,6.25%优惠码 BWH26FXH3HIQ 。目前最具有性价比的vps是(CN2 GT线路洛杉矶机房,1核1G,20G SSD,流量1T/月); 23 | 24 | 3.3、确保SSH连接vps成功; 25 | 3.3.1、Xshell隧道代理SSH,参考[《搬瓦工vps的IP被封(2) Xshell如何设置代理SSH》)](https://eveaz.com/1077.html); 26 | 3.3.2、vps控制面板后台SSH(不建议,例如搬瓦工KiviVM面板下Basic shell下运行文中所用v2ray脚本报错;Interactive Shell不支持中文); 27 | 28 | 3.4、注册Cloudflare账号; 29 | 30 | 3.5、想一劳永逸?那我建议你用 [(Just My Socks)搬瓦工自建机场](https://justmysocks.net/members/aff.php?aff=2765) ,域名和vps都不需要注册和购买了;机场IP被封自动换IP,走搬瓦工CN2 GIA线路,月付2.8刀起,5.2%优惠码 JMS9272283 。 31 | 32 | 3.6、以上如果需要代购,联系邮箱cocofive#foxmail.com。 33 | 34 | 4、具体实施步骤如下 35 | 4.1、在Cloudflare添加域名,并确保域名能在Cloudflare正常使用; 36 | 4.1.1、登陆到Cloudflare,进入域名管理页面,点击“Add a Site”按钮; 37 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46hxgad9bj30jg07yjrs.jpg) 38 | 39 | 4.1.2、填写主域名,点击“Add a Site”按钮; 40 | 41 | ![](http://ww1.sinaimg.cn/large/006tNc79ly1g46hxtor73j30jg0c2aap.jpg) 42 | 43 | 4.1.3、Cloudflare查询DNS,无视掉,点击“NEXT”; 44 | 45 | ![](http://ww1.sinaimg.cn/large/006tNc79ly1g46hy0iph3j30jg0d6myd.jpg) 46 | 47 | 4.1.4、勾选 “FREE”,点击 “Confirm plan”; 48 | 49 | ![](http://ww1.sinaimg.cn/large/006tNc79ly1g46hy61yqdj30jg0fg0uc.jpg) 50 | 51 | 4.1.5、弹出“Confirm plan”窗口,点击“Confirm”; 52 | 53 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46hyeqkcgj30jg07n3zc.jpg) 54 | 55 | 56 | 4.1.6、这个时候Cloudflare会提取之前的解析记录,如果不需要修改,直接无视;添加二级域名A记录解析到被封的IP,点击 “Add Record”; 57 | 58 | ![](http://ww2.sinaimg.cn/large/006tNc79ly1g46hymrci1j30jg04ejrq.jpg) 59 | 60 | 4.1.7、新增解析之后,是这样的; 61 | 62 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46hysqtxxj30jg03vwes.jpg) 63 | 64 | 65 | 4.1.8、点击“Status”栏那朵小黄云,让小黄云变灰色,即(DNS only);点击“Continue”;Cloudflare的操作暂时结束,不要关闭网页; 66 | 67 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46hz4f1xtj30jg04u3yv.jpg) 68 | 69 | 4.2、域名DNS服务器修改; 70 | 4.2.1、新标签页打开已经注册的域名解析管理后台,修改DNS服务器为Cloudflare的DNS服务器(Cloudflare的DNS服务器信息参考4.2.2中截图,请根据4.1.8操作后获取的DNS信息修改,也就是那个提醒过不要关闭的网页);这里不做演示,根据注册商后台自行修改; 71 | 4.2.2、修改完毕之后,回到4.1.8步骤未关闭的Cloudflare网页,点击 “Continue”,进入到Cloudflare域名管理页面; 72 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46hzcie6hj30jg0cbjsc.jpg) 73 | 74 | 4.2.3、当在Cloudflare域名管理页面看到如下图时,说明域名服务器更改还未生效,等待生效就行;一般几分钟就可以生效的; 75 | 76 | ![](http://ww2.sinaimg.cn/large/006tNc79ly1g46hzm2qaoj30jg0gzgnh.jpg) 77 | 78 | 4.2.4、当在Cloudflare域名管理页面看到如下图时,说明域名服务器已经更换成功; 79 | 80 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46hzr6osjj30jg06lwfd.jpg) 81 | 82 | 83 | 4.3、在vps上安装V2Ray; 84 | 85 | 4.3.1、root用户SSH登陆到vps; 86 | 87 | 请先确认Firewalld是否开启,如果是开启的,在Firewalld中开放v2ray端口和80、443端口; 88 | 89 | 如果对Firewalld不熟悉,请直接关闭Firewalld; 90 | 91 | 92 | 防火墙相关指令 93 | 94 | 1、开启关闭防火墙 查看防火墙状态 95 | ``` 96 | systemctl start firewalld 97 | systemctl stop firewalld 98 | systemctl status firewalld 99 | ``` 100 | 2、放行端口 101 | ``` 102 | firewall-cmd --permanent --zone=public --add-port=21212/tcp 103 | firewall-cmd --reload 104 | 105 | ``` 106 | 107 | 108 | 3、检查端口是否开启 109 | ``` 110 | firewall-cmd --permanent --query-port=21212/tcp 111 | ``` 112 | 运行v2ray安装脚本 113 | 114 | `bash <(curl -s -L https://git.io/v2ray.sh)` 115 | 116 | ``` 117 | ## 如果提示 curl: command not found ,那是因为vps没装 Curl 118 | ## centos 系统安装 Curl 方法: yum update -y && yum install curl -y 119 | ## 安装好 curl 之后就能安装脚本了 120 | ``` 121 | 122 | 4.3.2、运行脚本之后进入脚本界面,选“1”安装; 123 | 124 | ![](http://ww2.sinaimg.cn/large/006tNc79ly1g46hzzbyp5j30jg05jq36.jpg) 125 | 126 | 4.3.3、选择V2Ray传输协议,选“4. WebSocket+TLS”; 127 | 128 | ![](http://ww1.sinaimg.cn/large/006tNc79ly1g46i32ua7ij30jg0ewdhf.jpg) 129 | 130 | 4.3.4、输入V2Ray端口,默认就行(指定端口的话,不能是80或者443端口),直接回车; 131 | 132 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46i399kiyj30jg06hq3c.jpg) 133 | 134 | 135 | 4.3.5、输入刚才在Cloudflare新增的二级域名,回车;确认域名是正确的,按“Y”,继续; 136 | 137 | ![](http://ww2.sinaimg.cn/large/006tNc79ly1g46i3d56fmj30jg065wez.jpg) 138 | 139 | 4.3.5.1、如果域名不对或者解析未生效(一般域名解析需要等待一段时间来生效),会提示检测域名解析错误,直接退出脚本,如下图; 140 | 141 | ![](http://ww1.sinaimg.cn/large/006tNc79ly1g46i3hqnr9j30jg04o3yu.jpg) 142 | 143 | 144 | 4.3.6、正确解析域名之后,继续运行脚本;域名解析检测正确,安装Caddy自动配置TLS,按“Y”继续; 145 | 146 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46i3myvswj30jg0b5q3t.jpg) 147 | 148 | 149 | 4.3.7、是否开启网站伪装和路径分流,默认否;是否开启广告拦截,默认否;是否配置Shadowsocks,默认否;准备安装,确认配置正确,按回车继续; 150 | 151 | ![](http://ww2.sinaimg.cn/large/006tNc79ly1g46i3rfm4qj30jg0h475l.jpg) 152 | 153 | 154 | 4.3.8、接下来是安装过程,安装完成之后会显示V2Ray的配置信息;提示输入 v2ray url 可生成 vmess URL 链接 / 输入 v2ray qr 可生成二维码链接,无视掉; 155 | 156 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46i3wa5avj30jg09hgmf.jpg) 157 | 158 | 159 | 4.3.9、 输入v2ray status 查看运行状态,确认V2Ray和Caddy都在运行; 160 | 161 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46i404pfdj30jg025dfs.jpg) 162 | 163 | 4.4、Cloudfare设置SSL 164 | 4.4.1、进入Cloudflare域名管理页面,打开“Crypto”选项卡,确认“SSL”状态为“Full”;确认“Universal SSL Status”状态为“Active Certificate”,如果没有,请等待,是在申请证书,24小时之内可以申请下来(也许几分钟就好了,反正我是这样的); 165 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46i47fox6j30jg0bajt0.jpg) 166 | 167 | 4.4.2、打开DNS选项卡,将之前 4.1.8 操作点成灰色的小云点亮,重新变成小黄云,即 DNS and HTTP proxy(CDN),需要等待一段时间才能生效; 168 | 169 | ![](http://ww3.sinaimg.cn/large/006tNc79ly1g46i4dmbnzj30jg0f3mz4.jpg) 170 | 171 | 4.4.3、点亮之后是这样的; 172 | 173 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46i4icmc5j30jg03vwes.jpg) 174 | 175 | 176 | 4.5、配置V2Ray客户端,SSH输入v2ray info可以查看V2Ray的配置信息,根据客户端设置就行了; 177 | (提示: 输入 v2ray 可以进行脚本管理;输入 v2ray url 可生成 vmess url 链接;输入 v2ray qr 可生成二维码链接) 178 | 179 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46i4p9nlrj30jg0c0jsg.jpg) 180 | 181 | 182 | 4.5.1、移动端小火箭直接通过vmess链接导入; 183 | 4.5.2、win系统参考《搬瓦工vps的IP被封(3) V2Ray+mKCP部署及V2RayN客户端配置使用教程》 184 | 4.5.3、刷了梅林固件的路由器在科学上网插件里面新增v2ray节点; 185 | 186 | ![](http://ww4.sinaimg.cn/large/006tNc79ly1g46i4p9nlrj30jg0c0jsg.jpg) 187 | 188 | 5、步骤结束。 189 | 190 | 2019年06月11日补充更新 191 | 192 | 6、其它事项: 193 | 6.1、如果有遇到任何问题,可以在下方留言;请先排查前面已经完成的步骤有没有问题,然后再详细描述在哪个步骤出现问题,报错信息是什么; 194 | 195 | 6.2、留言的时候请务必填写正确邮箱用于接收留言回复,本站开启了严格的留言审核,如果留言提交未生效,请勿多次提交; 196 | 197 | 6.3、如果步骤一步步按文章来,是不会出现问题的,出现各样问题只能是操作错误或者配置错误。 198 | 199 | 6.4、文章06月04日发布,截至2019年6月11日20:42分,已经通过邮件或者即时通讯工具帮助27位网友解决了问题(不一定包括文章留言中的网友);遇到的问题千奇百怪,本人精力有限,不一定能够即时回复留言或者邮件。 200 | 201 | 6.5、所以,不会配置,或者出现各种问题导致各种报错、无法科学上网却找不到原因的,可以联系联系邮箱cocofive#foxmail.com。邮件内容需要提供问题描述及报错信息,按需求可能需要提供域名注册商、Cloudflare的注册账号信息及SSH的root权限信息。当然,如果你觉得这些信息很重要不方便提供就算了。 202 | 203 | 2019年06月13日补充更新 204 | 205 | 6.6、校园网用户,如果通过ss或者V2RayN客户端代理Xshell,SSH连接不上vps或者卡着不动,请将本地网络切换至其它非校园网网络,如手机热点; 206 | 207 | 6.7、重装至Centos7之后,安装脚本,Caddy无法正常运行,请先确认Firewalld是否开启,如果是开启的,在Firewalld中开放v2ray端口和80、443端口;如果对Firewalld不熟悉,请直接关闭Firewalld; 208 | 209 | 查看Firewalld状态:`systemctl status firewalld` 或者 firewall-cmd –state 210 | 211 | 停止:`systemctl stop firewalld` 212 | 213 | 禁用:`systemctl disable firewalld` 214 | 215 | 6.8、IOS的小火箭用户,无法导入vmess链接或者手动填写无WebSocket选项,请更新至最新版; 216 | 217 | 2019年06月14日补充更新 218 | 219 | 6.9、如果配置正确且是独立网络环境连接的情况下,A设备能正常上网,但是B设备却不能上网,请检查B设备的时间是否是同步网络时间(客户端与服务端的时间误差不能超过90秒钟,与时区无关)。 220 | 221 | 222 | 参考链接: 223 | 224 | [搬瓦工vps的IP被封(4) Cloudflare+V2Ray+WebSocket+TLS](https://eveaz.com/1094.html) 225 | -------------------------------------------------------------------------------- /魔改BBR.md: -------------------------------------------------------------------------------- 1 | # 南琴浪版暴力魔改BBR一键安装脚本 2 | 3 | ### BBR介绍 4 | 5 | BBR是Google出品的TCP拥塞控制算法,目前集成在最新的Linux内核中。国外VPS服务器上安装BBR后,可以明显提高连接速度,降低丢包。 BBR对SS/SSR有明显的加速作用,看Youbube视频时更为明显。另外如果在国外VPS服务器上架设网站,BBR也可以加速网站的加载速度。 6 | 7 | 魔改版BBR,则是在原版BBR基础上的修改版本,通过参数的修改,使加速算法更为激进,比原版BBR有更为明显的加速效果。 8 | 9 | ### BBR安装要求 10 | 11 | 系统要求:CentOS+、Debian7+、Ubuntu12+。 12 | 13 | 另外不支持OpenVZ虚拟的VPS服务器,这也是我们不建议购买OpenVZ服务器的原因之一。 14 | 15 | 16 | 17 | 18 | ### 魔改BBR一键安装 19 | 􏲓􏱔􏱉􏲔􏲕1.用Putty连接VPS服务器,输入以下命令运行: 20 | 21 | ``` 22 | wget --no-check-certificate https://raw.githubusercontent.com/tcp-nanqinlang/general/master/General/CentOS/bash/tcp_nanqinlang-1.3.2.sh 23 | bash tcp_nanqinlang-1.3.2.sh 24 | ``` 25 | 小提示:如果运行命令时英文提示找不到wget的错误,那么先运行以下命令安装wget: 26 | 27 | ``` 28 | yum -y install wget 29 | ``` 30 | 31 | 2.出现下图提示时,输入数字1选择安装内核,然后回车: 32 | 33 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_183122.jpg) 34 | 35 | 3.接下来的安装过程中,部分系统可能会有如下提示,提示删除旧的内核,是否取消。 36 | 37 | 这时按方向右键, 选择No后回车,确认删除。 38 | 39 | ``` 40 | sysctl net.ipv4.tcp_congestion_control 41 | ``` 42 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_185659.jpg) 43 | 44 | 4.出现如下提示后,输入reboot回车重启系统: 45 | 46 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_185806.jpg) 47 | 48 | 5.系统重启完成后,重新Putty连接,输入以下命令重新运行脚本: 49 | 50 | `bash tcp_nanqinlang-1.3.2.sh` 51 | 52 | 6.出现如下图提示后,输入2选择安装并开启算法: 53 | 54 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_183122.jpg) 55 | 56 | 7.稍等片刻,安装成功后的提示如下图: 57 | 58 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_190039.jpg) 59 | 60 | ### 魔改BBR卸载 61 | 62 | 1.Putty连接VPS服务器,运行如下命令: 63 | 64 | `bash tcp_nanqinlang-1.3.2.sh` 65 | 66 | 2.出现下图提示后,选择4进行卸载: 67 | 68 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_183122.jpg) 69 | 70 | 3.卸载完成后重启。 71 | 72 | 注意:此卸载仅卸载算法,并不卸载内核。 73 | 74 | VPS推荐: 75 | 76 | [Vultr](https://www.vultr.com/?ref=7887711-4F) (vultr在2019年1月的最新活动,针对新用户,直接送50美元!vultr全球15个服务器位置可选,KVM框架,最低2.5美元/月。支持支付宝和paypal付款。) 77 | 78 | 79 | 80 | 81 | #### 参考文献: 82 | 83 | [南琴浪版暴力魔改BBR一键安装脚本](https://ssr.tools/550) 84 | 85 | -------------------------------------------------------------------------------- /魔改BBR一键安装.md: -------------------------------------------------------------------------------- 1 | # 南琴浪版暴力魔改BBR一键安装脚本 2 | 3 | ### BBR介绍 4 | 5 | BBR是Google出品的TCP拥塞控制算法,目前集成在最新的Linux内核中。国外VPS服务器上安装BBR后,可以明显提高连接速度,降低丢包。 BBR对SS/SSR有明显的加速作用,看Youbube视频时更为明显。另外如果在国外VPS服务器上架设网站,BBR也可以加速网站的加载速度。 6 | 7 | 魔改版BBR,则是在原版BBR基础上的修改版本,通过参数的修改,使加速算法更为激进,比原版BBR有更为明显的加速效果。 8 | 9 | ### BBR安装要求 10 | 11 | 系统要求:CentOS+、Debian7+、Ubuntu12+。 12 | 13 | 另外不支持OpenVZ虚拟的VPS服务器,这也是我们不建议购买OpenVZ服务器的原因之一。 14 | 15 | 16 | 17 | 18 | ### 魔改BBR一键安装 19 | 􏲓􏱔􏱉􏲔􏲕1.用Putty连接VPS服务器,输入以下命令运行: 20 | 21 | ``` 22 | wget --no-check-certificate https://raw.githubusercontent.com/tcp-nanqinlang/general/master/General/CentOS/bash/tcp_nanqinlang-1.3.2.sh 23 | bash tcp_nanqinlang-1.3.2.sh 24 | ``` 25 | 小提示:如果运行命令时英文提示找不到wget的错误,那么先运行以下命令安装wget: 26 | 27 | ``` 28 | yum -y install wget 29 | ``` 30 | 31 | 2.出现下图提示时,输入数字1选择安装内核,然后回车: 32 | 33 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_183122.jpg) 34 | 35 | 3.接下来的安装过程中,部分系统可能会有如下提示,提示删除旧的内核,是否取消。 36 | 37 | 这时按方向右键, 选择No后回车,确认删除。 38 | 39 | ``` 40 | sysctl net.ipv4.tcp_congestion_control 41 | ``` 42 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_185659.jpg) 43 | 44 | 4.出现如下提示后,输入reboot回车重启系统: 45 | 46 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_185806.jpg) 47 | 48 | 5.系统重启完成后,重新Putty连接,输入以下命令重新运行脚本: 49 | 50 | `bash tcp_nanqinlang-1.3.2.sh` 51 | 52 | 6.出现如下图提示后,输入2选择安装并开启算法: 53 | 54 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_183122.jpg) 55 | 56 | 7.稍等片刻,安装成功后的提示如下图: 57 | 58 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_190039.jpg) 59 | 60 | 如果报错: 61 | 62 | ``` 63 | make -C /lib/modules/`uname -r`/build M=`pwd` modules CC=/usr/bin/gcc 64 | ./scripts/gcc-version.sh:行25: /usr/bin/gcc: 没有那个文件或目录 65 | ./scripts/gcc-version.sh:行26: /usr/bin/gcc: 没有那个文件或目录 66 | make[1]: /usr/bin/gcc:命令未找到 67 | make[1]: 进入目录“/usr/src/kernels/4.12.10-1.el7.elrepo.x86_64” 68 | make[1]: /usr/bin/gcc:命令未找到 69 | make[1]: /usr/bin/gcc:命令未找到 70 | make[1]: /usr/bin/gcc:命令未找到 71 | make[1]: /usr/bin/gcc:命令未找到 72 | CC [M] /home/tcp_nanqinlang/tcp_nanqinlang.o 73 | /bin/sh: /usr/bin/gcc: 没有那个文件或目录 74 | make[2]: *** [/home/tcp_nanqinlang/tcp_nanqinlang.o] 错误 1 75 | make[1]: *** [_module_/home/tcp_nanqinlang] 错误 2 76 | make[1]: 离开目录“/usr/src/kernels/4.12.10-1.el7.elrepo.x86_64” 77 | make: *** [all] 错误 2 78 | [Error] load mod failed, please check! 79 | ``` 80 | 81 | 原因:没有安装gcc 82 | 83 | 安装gcc: 84 | 85 | `yum install gcc` 86 | 87 | 88 | ### 魔改BBR卸载 89 | 90 | 1.Putty连接VPS服务器,运行如下命令: 91 | 92 | `bash tcp_nanqinlang-1.3.2.sh` 93 | 94 | 2.出现下图提示后,选择4进行卸载: 95 | 96 | ![](https://ssr.tools/wp-content/uploads/2018-11-29_183122.jpg) 97 | 98 | 3.卸载完成后重启。 99 | 100 | 注意:此卸载仅卸载算法,并不卸载内核。 101 | 102 | VPS推荐: 103 | 104 | [Vultr](https://www.vultr.com/?ref=7887711-4F) (vultr在2019年1月的最新活动,针对新用户,直接送50美元!vultr全球15个服务器位置可选,KVM框架,最低2.5美元/月。支持支付宝和paypal付款。) 105 | 106 | 107 | 108 | 109 | #### 参考文献: 110 | 111 | [南琴浪版暴力魔改BBR一键安装脚本](https://ssr.tools/550) 112 | 113 | --------------------------------------------------------------------------------