跳至正文
Wener Notes

gost

约 3 分钟阅读
    • MIT, Go
    • v3 还没正式发布
    • GO Simple Tunnel
    • gost.run
    • 上游/连接器 协议支持: http, http2, socks4, socks5, ss, ssu, sni, sshd
    • 监听 协议支持: tcp, udp, tls, mtls, ws, mws. mwss, http2, h2c, grpc, quic, pht, http3, kcp, ssh, sshd, red, redu, rtcp, rudp, dns, tun, tap, icmp, ohttp, otls, ftcp
    • mws -> 多路复用 websocket - 基于 Path 分流
    • ssu -> Shadowsocks UDP
    • red -> REDIRECT+tproxy
    • redu -> UDP iptables+tproxy
    • rtcp, rudp - 远程端口转发
    • ohttp, otls - HTTP 伪装握手
    • ftpc - 模拟 tcp
    • 支持
      • HTTP - Connect/Plain HTTP Tunnel/Websocket/HTTP2 CONNECT/gRPC/HTTP3 CONNECT/WebTransport
      • SOCKSv4/v5
      • Shadowsocks
      • KCP
      • SSH
      • SNI Proxy
      • PROXY 协议
      • TPROXY/REDIRECT
      • TUN/TAP
      • ICMP Tunnel
      • DNS 代理
      • WebAPI
  • 新协议支持的少
    • tuic
    • hysteria
    • trojan
bash
# https://github.com/go-gost/gost/releases/
# macOS
curl -LO https://github.com/go-gost/gost/releases/download/v3.0.0/gost_3.0.0_darwin_amd64.tar.gz
tar zxvf gost*.tar.gz gost

# Linux
curl -LO https://github.com/go-gost/gost/releases/download/v3.0.0/gost_3.0.0_linux_amd64.tar.gz
tar zxvf gost*.tar.gz gost

./gost -V
sudo mv gost /usr/local/bin/

# v3
# -L 监听
# -F 转发,支持配置多个,作为转发链
gost -L http://:8080 -L socks5://:1080 -F http://192.168.1.1:8080

gost -L http://:1080 -F ss://chacha20-ietf-poly1305:pass@:8338

# SNI proxy
gost -L sni://:80 -L sni://:443 -F socks5://192.168.1.1:1080
gost -L sni://:8080 -L sni://:8443
# flag -> config
gost -L sni://:80 -L sni://:443 -F socks5://192.168.1.1:1080 -O yaml > gost.yaml
gost

docker run --rm -it \
  gogost/gost

# 测试下来两个端口都可以 proxy-protocol 和不 proxy-protocol
# service,handler,listener 都加了 proxyProtocol=1
gost -L tcp://:8000/:8080 -L tcp://:8080/example.com:80?proxyProtocol=1
curl -H 'Host: example.com' 127.0.0.1:8000 -v
curl --haproxy-protocol -H 'Host: wener.me' 127.0.0.1:8080 -v

# 发送 HAProxy protocol / send-proxy
# 目前只有 rtcp 和 rudp 会处理
gost -L rtcp://:8080/127.0.0.1:80?proxyProtocol=1
  • -L tcp://:8080/192.168.1.1:80
    • 端口映射
  • rudp -> remote udp - 远程映射到本地

Notes

  • 四大模块
    • 服务(Service)
      • Listener+Handler
    • 转发链(Chain)
      • N*Hop -> Selector+Bypass -> Route
    • 跳跃点(Hop)
      • N*Node
    • 节点(Node)
      • Dialer+Connector
  • 五个子模块:监听器(Listener),处理器(Handler),转发器(Forwarder),拨号器(Dialer),连接器(Connector)
  • 辅助模块:节点选择器(Selector),准入控制器(Admission),分流器(Bypass),域名解析器(Resolver),主机映射器(Hosts),限速器(Limiter)等组成。
  • gost.run/concepts/architecture
flowchart TD

subgraph 客户端 [客户端 - person]
    client["需要使用代理服务的用户"]
end

subgraph GOST系统 [GOST系统 - system]
    服务["服务<br/>(处理客户端请求)"]
    转发链["转发链<br/>(管理数据转发路径)"]
    跳跃点["跳跃点<br/>(节点集合)"]
    节点["节点<br/>(转发数据)"]


    subgraph 服务
        监听器["监听器<br/>(接收客户端请求)"]
        处理器["处理器<br/>(处理客户端请求)"]
        转发器["转发器<br/>(执行端口转发)"]
    end

    subgraph 节点
        拨号器["拨号器<br/>(与服务建立连接)"]
        连接器["连接器<br/>(处理实际请求数据)"]
    end
end

subgraph 外部 [互联网 - external_system]
    internet["互联网<br/>(外部网络资源)"]
end

client --"发送请求(TCP/UDP)"--> 服务
转发器 --> 转发链
转发链 --> 跳跃点
跳跃点 --> 节点
连接器 --"访问(TCP/UDP)"--> internet

%% 服务容器内部
监听器 --> 处理器
处理器 --> 转发器

%% 节点容器内部
拨号器 --> 连接器

classDef person fill:#08427b,color:#fff
classDef system fill:#1168bd,color:#fff
classDef container fill:#3193f5,color:#000
classDef external_system fill:#a9a9a9,color:#fff

class client person
class GOST系统 system
class 服务容器,节点容器 container
class 外部 external_system

Config

  • -C
  • gost.yml, gost.json
    • $PWD
    • /etc/gost
    • $HOME/.gost
yaml
# -L
services:
  - name: service-0
    # -L 的 hostname
    addr: 'localhost:8080'
    handler:
      # -L 的 schema
      type: http
      chain: chain-0
      # -L 的 auth 信息
      auth:
        username: gost
        password: gost
      metadata:
        foo: bar
    listener:
      # -L 的 schema
      type: tcp
      metadata:
        foo: bar
    metadata:
      preUp:
        - echo pre-up
      postUp:
        - echo post-up
      preDown:
        - echo pre-down
      postDown:
        - echo post-down
# -F
# schema -> connector, dialer
chains:
  - name: chain-0
    hops:
      - name: hop-0
        nodes:
          - name: node-0
            addr: 192.168.1.1:8080
            connector:
              type: socks5
              auth:
                username: gost
                password: gost
              metadata:
                bar: baz
            dialer:
              type: tls
              metadata:
                bar: baz

api:
  addr: :1234

Auth

WebAPI

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • Proxy Awesome
    笔记 · ginuerzh/gost

    Note · 建议基于 overlay 组件内部 proxy,更安全,更好跨网。 · 对外暴露甚至选择 · | protocol | transport | UDP | Note | · | socks4 | tcp | ❌ | · | socks5 | tcp | ✅ |

  • SNI Reverse Proxy
    笔记 · gost

    mashirozx/Pixiv-Nginx · https://south-plus.net/read.php?tid-1032029.html · dlundquist/sniproxy · gost · clash premium 支持 Sniff TLS SNI

参考资料

GitHub3 条
其他外链6 条
最近更新commit aa1063d编辑