使用Gost开SS连回内网

最近整理内网的服务器,之前乱七八糟的运行了很多服务所以需要整理规范一下。因为家里有公网IP,之前我在外面都是直接动态DNS和端口转发访问内网。这次趁整理服务试试用Gost开SS服务来访问内网。为什么这么选择呢,主要是我在手机上使用的软件是QuantumultX对SS非常友好,另外其他的一些服务比如WireGuard等搭建和使用都比较麻烦,最重要的是Gost后面可以加很多流量转发方便我们回内网的时候不耽误访问不容易访问的国外网络。

服务器系统Ubuntu 20.04。

安装Gost

wget https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz #下载最新版gost。
gzip -d gost-linux-amd64-2.11.1.gz #解压到当前位置
mv  gost-linux-amd64-2.11.1 /usr/bin/gost #移动到执行位置
chmod +x /usr/bin/gost #赋予运行权限

开启Gost

gost -L=ss://chacha20:password@:8338 #因为在墙内使用,我选择了最简单的加密方式。

现在可以在手机上的QuantumultX里增加这个SS代理了。如果是动态ipv4需要利用动态DNS服务绑定域名并且在路由器上做好端口转发,如果是动态ipv6,就直接动态DNS绑定域名+端口连接就可以了。如果连接成功会有日志输出,这时候QuantumultX里选择全局代理访问你的内网IP应该会成功。 现在可以退出命令行,并杀掉Gost进程来关闭Gost了。如果你只是想访问内网,那么现在已经可以了。只需要使用nohup让Gost后台运行就好了。

nohup gost -L=ss://chacha20:password@:8338 > /dev/null 2>&1 &

下面开始介绍我们选择Gost的最重要的原因-流量转发。在内网的服务器上运行Clash服务,并将访问内网的流量转发到Clash的socks5代理端口,这样我们只要配置好内网服务器上的Clash就可以在访问内网服务器的时候也不影响我们正常的访问不容易访问的国外网络了。

安装Clash

wget https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz #下载最新版clash
gzip -d clash-linux-amd64-v1.8.0.gz #解压
mv clash-linux-amd64-v0.19.0 /usr/bin/clash #移动到执行位置
chmod +x /usr/bin/clash #赋予运行权限
clash -v #如果返回版本号代表安装成功

配置clash

mkdir -p ~/.config/clash #创建配置目录
cd ~/.config/clash #进入目录
touch config.yaml #创建配置文件
vi config.yaml #编辑配置文件

具体的配置文件,可以参考一些项目的分享,这里我只示例下配置文件的头部。

port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
mode: Rule
# 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。
log-level: info
external-controller: '0.0.0.0:9090'
external-ui: dashboard
secret: 'password'
dns:
  enable: true
  ipv6: true
  enhanced-mode: redir-host       # redir-host or fake-ip
  # fake-ip-range: 198.18.0.1/16    # Fake IP addresses pool CIDR
  use-hosts: true                 # lookup hosts and return IP record
  nameserver:
    - 119.29.29.29     
    - 223.5.5.5       
  # 提供 fallback 时,如果GEOIP非 CN 中国时使用 fallback 解析
  fallback:
    - tls://8.8.8.8:853         # Google DNS over TLS 50ms
    - tls://8.8.4.4:853         # cloudflare DNS over TLS 50ms
    - https://1.1.1.1/dns-query # cloudflare DNS over HTTPS
    - https://dns.google/dns-query # Google DNS over HTTPS

  # 强制DNS解析使用`fallback`配置
  fallback-filter:
    # true: CN使用nameserver解析,非CN使用fallback
    geoip: true
    # geoip设置为false时有效: 不匹配`ipcidr`地址时会使用`nameserver`结果,匹配`ipcidr`地址时使用`fallback`结果。
    ipcidr:
      - 240.0.0.0/4

为了方便我们在外网的时候也能够操作Clash,这里我选择使用Yet Another Clash Dashboard来管理。

wget https://github.com/haishanh/yacd/archive/gh-pages.zip #下载yacd
unzip gh-pages.zip #解压
mv yacd-gh-pages/ dashboard/ #把目录名改成 dashboard,这里我们是处在~/.config/clash文件夹下

这样我们在启动Clash后就可以通过 http://ip:9090/ui/ 来访问Yet Another Clash Dashboard管理Clash,密码是上面secret: ‘password’里的password,请修改成自己需要的。

设置gost开机自启

touch /etc/systemd/system/gost.service #创建service文件
vi /etc/systemd/system/gost.service #编辑service文件

内容为

[Unit]
Description=GOST SERVER
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/gost -L=ss://chacha20:passwd@:8338 -F=socks5://ip:7891
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

其中passwd需要修改成你需要的ss的密码,ip是你内网服务器的内网ip。然后保存并退出。

# 重新加载配置文件
systemctl daemon-reload
#设置gost开机自启
systemctl enable gost.service
# 启动服务
systemctl start gost.service
# 重启服务
systemctl restart gost.service
## 查看运行状态 ##
systemctl status gost.service
## 实时日志 ##
journalctl -u gost.service -f

设置Clash开机自启

touch /etc/systemd/system/clash.service #创建service文件
vi /etc/systemd/system/clash.service #编辑service文件

内容为

[Unit]
Description=clash daemon

[Service]
Type=simple
User=root
ExecStart=/usr/bin/clash -d /root/.config/clash/
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后保存并退出。

# 重新加载配置文件
systemctl daemon-reload
#设置clash开机自启
systemctl enable clash.service
# 启动服务
systemctl start clash.service
# 重启服务
systemctl restart clash.service
## 查看运行状态 ##
systemctl status clash.service
## 实时日志 ##
journalctl -u clash.service -f

内网服务器的透明代理

都配置到这里了,当然你可以直接使用iptables等服务转发流量来实现透明代理服务,这样你的这台服务器也可以当作内网里的一个网关帮助内网一些不能科学上网的机器方便的访问互联网。 在这里你可以在Google搜索clash+透明代理学习部署。我没有这方面的需要就不往下研究了。

相关内容

gost - GO Simple Tunnel GO语言实现的安全隧道

Clash - A rule-based tunnel in Go.

Yet Another Clash Dashboard

SS Rule Snippet

Quantumult X - A Powerful Network Tool