Files
Multi-EasyGost/README.md
KANIKIG b1de6f7df5 fix
2020-10-15 16:32:17 +08:00

131 lines
6.8 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Multi-EasyGost一键脚本使用指南
***
## 感谢:
1. 感谢 @ginuerzh 大佬提供了如此优秀实用的软件,项目地址 `https://github.com/ginuerzh/gost` GOST功能强大使用简单想要详细了解用法的朋友可以查看官方文档 `https://docs.ginuerzh.xyz/gost/`
2. 感谢 @风萧萧兮易水寒 大佬的原始脚本,本脚本的灵感与思路都来自此大佬的一键脚本,项目地址 `https://www.fiisi.com/?p=125`
***
## 简介
> 项目地址及帮助文档:
> https://github.com/KANIKIG/Multi-EasyGost
***
## 脚本
* 启动脚本
`wget --no-check-certificate -O gost.sh https://raw.githubusercontent.com/KANIKIG/Multi-EasyGost/master/gost.sh && chmod +x gost.sh && ./gost.sh`
* 再次运行本脚本只需要输入`./gost.sh`回车即可
## 功能
### 原脚本功能
- 实现了systemd及gost配置文件对gost进行管理
- 在不借助其他工具(如screen)的情况下实现多条转发规则同时生效
- 机器reboot后转发不失效
- 支持传输类型:
- tcp+udp不加密转发
- relay+tls加密
### 此脚本新增功能
- 增加了传输类型选择功能
- 新支持传输类型
- relay+ws
- relay+wss
### 将要增加的功能
- 落地机一键创建ss或socks5代理
## 食用教程
* 启动脚本: 在已经运行过如下一键脚本的情况下
`wget --no-check-certificate -O gost.sh https://raw.githubusercontent.com/KANIKIG/Multi-EasyGost/master/gost.sh && chmod +x gost.sh && ./gost.sh`
* 再次运行本脚本只需要输入`./gost.sh`回车即可
***
* 难点1: 协议选择
![1.png](https://i.loli.net/2020/05/19/xtinMIfkzGcUKZ9.png)
* 对于具备足够加密强度的流量,如某些服务(Caddy, Nginx)提供的tls加密这种情况下你可能只需要对流量进行中转而不需要加密那么选[1]即可,在这种情况下,你只需要配置一台主机(中转流量的主机)即可实现GOST转发流量
* 有一些服务的加密强度是不可靠的所以你希望通过GOST实现在中转流量的同时对流量进行加密这种情况下选[2]即可。值得说明的是:
- 当选择[2]对中转流量进行加密时,意味着你还需要配置你的远程主机,即接收这些转发流量的主机,需要登录上远程主机运行此脚本,并选择协议[3]对来自于此主机的加密流量进行解密,从而供远程主机的其他服务接收这些流量
- 目前本脚本仅采用GOST提供的默认证书亦可能受到HTTPS中间人攻击如果想要更加安全请放弃使用此脚本自行学习GOST官方文档
* 协议[3]用于接收通过[2]转发而来的加密流量,即如果中转主机使用了协议[2],则要在对应的目标主机上选择协议[3]以对接
***
* 难点2: 本地端口填写
![2.png](https://i.loli.net/2020/05/19/kcmiI3j9vRw1brz.png)
![3.png](https://i.loli.net/2020/05/19/Yv95DEt8yIQXWzx.png)
* 本地端口是指当前正在使用脚本的这台主机要监听的端口从这个端口注入的流量会经由GOST服务进行处理(转发/加密/解密)
* 一般而言如果使用国内的NAT类机型分为外网和内网两种端口这里应填内网端口(如图60001)
* 而外部的其他客户端想要连接到这一台NAT主机时则需要在外部的客户端上填写外网端口(37096)以实现端口映射和连接,当然这一部分与本脚本无关,外部端口也无需在本脚本中填写
* 一般而言对于有独立IP的VPS/VDS/独服等类型的主机,端口通常都是全开放的,这里的端口直接自己按需填写即可,不存在内外之分(建议填写10000号以上的端口)
***
* 难点3: IP填写
- IP填写分为几种情况这里按3种协议选项进行解释
- [A]---[B]---[C]假如A是你自己正在用的电脑[B]是用于转发流量的主机,[C]是最终接收由[A]发出流量的主机
1. 选择协议[1]的,即不加密的流量转发,则此处填写你[C]主机的IP即可
2. 在[B]主机上选择协议[2]的,即对流量进行加密,则此处也是填写[C]主机的IP如图:
![4.png](https://i.loli.net/2020/05/19/dIOhC1q6fzjmylc.png)
3. 在[C]主机上选择协议[3]的,即对由[B]转发过来的流量进行解密,则此处填写[C]主机的IP或`127.0.0.1`,这取决于在[C]主机上GOST接收到这些流量后要将流量交给[C]主机面向外部的端口,还是面向[C]主机内部本地回环的端口
* 一般来讲,只有[A]---[C]的情况下,[C]主机某服务的端口是监听在本机上而非本地回环的,某些服务配置文件一般是这种形式:
```javascript
"server":"0.0.0.0",
"local_address":"127.0.0.1",
"local_port":22332,
```
* 或者这种形式
```javascript
{
"inbounds": [
{
"port": 22332,
"protocol": "?????",
"settings": {
"clients": [
```
* 以上2种形式的服务端配置文件都表明服务监听在本机的22332端口上而不是本地回环这种情况IP填写本机[C]的公网IP即可
* 同样的,通过修改你[C]主机上对应服务的配置文件,可以实现让这一服务仅监听在[C]主机本地回环的端口上,如`127.0.0.1:22332`即如下配置所示
```javascript
"server":127.0.0.1",
"local_address":"127.0.0.1",
"local_port":22332,
```
* 或者这种形式
```javascript
{
"inbounds": [
{
"port": 22332,
"listen":"127.0.0.1",
"protocol": "?????",
"settings": {
"clients": [
```
* 以上2种形式的服务端配置文件都表明服务监听在本地回环(127.0.0.1)的22332端口上换言之除了本机内部的流量外其他来源的流量都无法访问这一服务因此安全系数更高而GOST恰恰可以把从外部接收来的流量转发至本机内部
* 这种情况IP填写为`127.0.0.1`即可
***
* 难点4: 目标端口填写
- 算不上难点,稍微需要注意的地方提示一下
![5.png](https://i.loli.net/2020/05/19/GsoZh2bwgFeITCX.png)
1. 选择协议[1]的,此处填写你[C]主机对应服务监听的端口即可,可能是`443`也可能是如上示例的`22332`,具体依据目标主机对应服务的配置
2. 在[B]主机上选择协议[2]的,则此处建议填写`443`,当然你硬要填写其他的我也拦不住
3. 在[C]主机上选择协议[3]的,需要比较注意,在[C]主机上选择协议[3]意味着你[B]主机选的是协议[2],那么[C]主机在用此脚本时第一次填写的本地端口(难点2),应该与[B]主机上配置时填写的目标端口相一致(难点4.2),一般是`443`,而第二次填写的端口应与[C]主机上具体服务所监听的端口相一致,按如上示例即为`22332`
### 到此一切设置完毕尽情享受GOST为你带来的便捷吧 :)