Skip to content

配置概述

建议

在使用配置文件前,建议先了解一下GOST中的一些基本概念和架构,对于理解配置文件会有很大帮助。

可以随时在命令行模式下使用-O输出当前配置。

默认配置文件

如果-C-L参数都未指定,GOST会在以下位置寻找gost.ymlgost.json文件:当前工作目录,/etc/gost/$HOME/gost/。如果存在则使用此文件作为配置文件。

GOST运行方式有两种:命令行直接运行,和通过配置文件运行。命令行方式可以满足大多数使用需求,例如简单的启动一个代理或转发服务。如果需要更加详细的配置,可以采用配置文件方式,配置文件支持yaml或json格式。

详细的配置说明请参考:

命令行模式与配置文件之间存在一个转换关系,例如:

gost -L http://gost:gost@localhost:8080?foo=bar -F socks5+tls://gost:gost@192.168.1.1:8080?bar=baz

对应的配置文件:

services:
- name: service-0
  addr: "localhost:8080"
  handler:
    type: http
    chain: chain-0
    auth:
      username: gost
      password: gost
    metadata:
      foo: bar
  listener:
    type: tcp
    metadata:
      foo: bar
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
{
  "services": [
    {
      "name": "service-0",
      "addr": "localhost:8080",
      "handler": {
        "type": "http",
        "chain": "chain-0",
        "auth": {
          "username": "gost",
          "password": "gost"
        },
        "metadata": {
          "foo": "bar"
        }
      },
      "listener": {
        "type": "tcp",
        "metadata": {
          "foo": "bar"
        }
      }
    }
  ],
  "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"
                }
              }
            }
          ]
        }
      ]
    }
  ]
}
  • 所有-L参数会按顺序转换为services列表,每个service会自动生成名称name属性。

    • scheme部分会被解析为handlerlistener,例如http会被转换为http处理器和tcp监听器。
    • 地址localhost:8080部分对应service的addr属性。
    • 认证信息gost:gost部分被转换为handler.auth属性。
    • 参数选项部分foo=bar被转换为handler.metadatalistener.metadata
    • 如果存在转发链,则使用handler.chain属性引用此转发链(通过name属性)。
  • 如果有-F参数,则在chains列表中生成一条转发链,一个-F对应转发链的hops列表中的一项,-F参数按顺序转换为对应hop中的node。

    • scheme部分会被解析为connectordialer,例如socks5+tls被转换为socks5连接器和tls拨号器。
    • 地址192.168.1.1:8080部分对应node的addr属性。
    • 认证信息gost:gost部分被转换为connector.auth属性。
    • 参数选项部分foo=bar被转换为connector.metadatadialer.metadata

系统服务

GOST支持以系统服务的方式运行

Windows

通过Windows的sc命令可以创建一个Windows服务:

sc create gost binpath= "C:\gost.exe -L :8080" start= auto

Linux

通过Systemd来管理GOST进程

新建/etc/systemd/system/gost.service脚本:

[Unit]
Description=GO Simple Tunnel
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/gost -L=:8080
Restart=always

[Install]
WantedBy=multi-user.target

设置为开机启动

systemctl enable gost

启动服务

systemctl start gost

Comments