ginuerzh / gost

GO Simple Tunnel - a simple tunnel written in golang
MIT License
15.97k stars 2.49k forks source link

FAQs整理 #557

Open ginuerzh opened 4 years ago

ginuerzh commented 4 years ago

此处为FAQs汇总帖,可以提出你的疑问,或给出见解,后面会统一放到WIKI中。

f4nff commented 4 years ago

gost -L red://:12345 -F=mws://www.baidu.com:80?ip=122.223.22.11 iptables -t nat -A OUTPUT -p tcp --match multiport ! --dports 12345,80 -j DNAT --to-destination 127.0.0.1:12345 除了80,12345 端口其他测试都没问题, 但是80端口我日常需要使用,远程连接也需要, 该怎么对特定ip:80进行例外? 而不是对全部80例外?

poly-1 commented 4 years ago
ginuerzh commented 4 years ago
  • gost 内置的 TLS 证书是每次随机生成的还是固定的?若是固定的,是不是相当于所有人共用一个私钥,非常不安全,需要注明一下。

每次启动会生成一次,也可以使用手动生成的证书文件。

  • gost 的 ws 作为一种传输协议能否像 v2ray 一样添加host混淆(即使用不同于 server ip 的域名)?或者当前有没有类似的方案实现?

目前不支持host混淆。

PHCSJC commented 4 years ago

gost -L http+ws://11111:22222@:80

请问这种带验证的是加密的吗?也就是墙可以看到传输的内容吗?

poly-1 commented 4 years ago
  1. 当具有多个 -L 和 -F 参数时,实际效果是否如下: 对于每一个 -L 指定的服务,都会按照多个 -F 参数指定的一系列节点进行同样的链式转发

  2. 上述做法中,多个-L参数的摆放顺序是否与最终结果无关?

  3. 上述做法是否等效于在配置文件中配置了多个ServeNodes和ChainNodes节点?

  4. relay protocal 实现的是 udp over tcp 吗?

bash99 commented 4 years ago

bypass支持先解析后过滤ip吗? 比如 gost -L :8080 -F 192.168.1.1:8081?bypass=chnroutes.ip 这时如果用ip访问,则会跳过下级代理直接访问,但是如果用域名访问,即使域名解析出来在 chnroutes.ip 的范围内,仍然会通过下级代理访问。 甚至下游是socks5协议也是一样。

ginuerzh commented 4 years ago

gost -L http+ws://11111:22222@:80

请问这种带验证的是加密的吗?也就是墙可以看到传输的内容吗?

加密和验证是两种不同的功能,二者没有联系。

ginuerzh commented 4 years ago
  1. 当具有多个 -L 和 -F 参数时,实际效果是否如下: 对于每一个 -L 指定的服务,都会按照多个 -F 参数指定的一系列节点进行同样的链式转发

是的,可以看成是多对一的关系,多个-L对应一个链。

  1. 上述做法中,多个-L参数的摆放顺序是否与最终结果无关?

无关。

  1. 上述做法是否等效于在配置文件中配置了多个ServeNodes和ChainNodes节点?

是的。多个ServeNodes相当于多个入口,共用一个转发链(ChainNodes)。

  1. relay protocal 实现的是 udp over tcp 吗?

relay是协议,与具体的传输类型无关,可以是over TCP (tls, ws等),也可以是over UDP(kcp, quic)。

ginuerzh commented 4 years ago

bypass支持先解析后过滤ip吗? 比如 gost -L :8080 -F 192.168.1.1:8081?bypass=chnroutes.ip 这时如果用ip访问,则会跳过下级代理直接访问,但是如果用域名访问,即使域名解析出来在 chnroutes.ip 的范围内,仍然会通过下级代理访问。 甚至下游是socks5协议也是一样。

暂不支持解析后过滤。

PHCSJC commented 4 years ago

gost -L http+ws://11111:22222@:80

请问这种方式,墙可以看到传输的内容吗?

vaakian commented 4 years ago
  • gost 内置的 TLS 证书是每次随机生成的还是固定的?若是固定的,是不是相当于所有人共用一个私钥,非常不安全,需要注明一下。
  • gost 的 ws 作为一种传输协议能否像 v2ray 一样添加host混淆(即使用不同于 server ip 的域名)?或者当前有没有类似的方案实现?

可以配合自定义域名解析,然后ws地址填上域名就可以,我目前亲测是可行的。

除了可以自定义DNS服务用来解析域名外,还可以手动指定域名-IP映射关系,类似于Linux下的/etc/hosts文件功能。

gost -L=:8080?hosts=hosts.txt

配置文件的格式:

# options
reload  10s

# IP_address    canonical_hostname     [aliases...]
127.0.0.1       localhost
192.168.1.10    foo.mydomain.org       foo
192.168.1.13    bar.mydomain.org       bar baz
poly-1 commented 4 years ago
  • gost 内置的 TLS 证书是每次随机生成的还是固定的?若是固定的,是不是相当于所有人共用一个私钥,非常不安全,需要注明一下。
  • gost 的 ws 作为一种传输协议能否像 v2ray 一样添加host混淆(即使用不同于 server ip 的域名)?或者当前有没有类似的方案实现?

可以配合自定义域名解析,然后ws地址填上域名就可以,我目前亲测是可行的。

除了可以自定义DNS服务用来解析域名外,还可以手动指定域名-IP映射关系,类似于Linux下的/etc/hosts文件功能。

gost -L=:8080?hosts=hosts.txt

配置文件的格式:

# options
reload  10s

# IP_address    canonical_hostname     [aliases...]
127.0.0.1       localhost
192.168.1.10    foo.mydomain.org       foo
192.168.1.13    bar.mydomain.org       bar baz

谢谢回复,之前作者已经回答我了。不过您的这个回答似乎与我的问题完全无关,可能是我没有理解

poly-1 commented 4 years ago

gost -L http+ws://11111:22222@:80

请问这种方式,墙可以看到传输的内容吗?

可以

vaakian commented 4 years ago
  • gost 内置的 TLS 证书是每次随机生成的还是固定的?若是固定的,是不是相当于所有人共用一个私钥,非常不安全,需要注明一下。
  • gost 的 ws 作为一种传输协议能否像 v2ray 一样添加host混淆(即使用不同于 server ip 的域名)?或者当前有没有类似的方案实现?

可以配合自定义域名解析,然后ws地址填上域名就可以,我目前亲测是可行的。 除了可以自定义DNS服务用来解析域名外,还可以手动指定域名-IP映射关系,类似于Linux下的/etc/hosts文件功能。

gost -L=:8080?hosts=hosts.txt

配置文件的格式:

# options
reload  10s

# IP_address    canonical_hostname     [aliases...]
127.0.0.1       localhost
192.168.1.10    foo.mydomain.org       foo
192.168.1.13    bar.mydomain.org       bar baz

谢谢回复,之前作者已经回答我了。不过您的这个回答似乎与我的问题完全无关,可能是我没有理解

或许你是指这个?

gost -L :1080 -F ws://ip:port?host=yahoo.com
或者
gost -L :1080 -F ws://domain:port?host=yahoo.com
poly-1 commented 4 years ago

或许你是指这个?

gost -L :1080 -F ws://ip:port?host=yahoo.com
或者
gost -L :1080 -F ws://domain:port?host=yahoo.com

这个host参数应该是在SNI协议里面用的吧?ws作为一种传输类型应该没有这个功能。

vaakian commented 4 years ago

或许你是指这个?

gost -L :1080 -F ws://ip:port?host=yahoo.com
或者
gost -L :1080 -F ws://domain:port?host=yahoo.com

这个host参数应该是在SNI协议里面用的吧?ws作为一种传输类型应该没有这个功能。

你试试就知道了

我最近就有这种需求。ws本身建立连接的时候就会有类似http的请求头,所以也有相应的Host字段, 混淆也是一个道理。

虽然作者文档中没说websocket可以这么手动指定host,但是我自己试验确实是可以的。 我服务器上用nginx监听了一个域名,配置好websocket。然后用这种方法指定host是可以成功连接的。

lfznnzq commented 4 years ago

服务端是caddy forwardproxy的https代理(带tls证书)

客户端是gost -L=:1080 -F=https://user:password@服务器域名:443

请问这种方式,墙可以看到传输的内容吗?

poly-1 commented 4 years ago

或许你是指这个?

gost -L :1080 -F ws://ip:port?host=yahoo.com
或者
gost -L :1080 -F ws://domain:port?host=yahoo.com

这个host参数应该是在SNI协议里面用的吧?ws作为一种传输类型应该没有这个功能。

你试试就知道了

我最近就有这种需求。ws本身建立连接的时候就会有类似http的请求头,所以也有相应的Host字段, 混淆也是一个道理。

虽然作者文档中没说websocket可以这么手动指定host,但是我自己试验确实是可以的。 我服务器上用nginx监听了一个域名,配置好websocket。然后用这种方法指定host是可以成功连接的。

谢谢解答,你是用nginx反代的websocket吗?如果成功反代的话,那么这个用法应该是正确的, 不过也有可能是nginx反代的时候只验证path没有验证host导致可以凑巧成功。

大佬 @ginuerzh 能解答一下到底ws有没有实现这个功能吗?

poly-1 commented 4 years ago

转发ws隧道似乎可以这样实现, gost -L=tcp://:1111 -F=forward+ws://2.2.2.2:2222?path=/path

这种用法似乎不符合标准用法,因为此时 tcp://:1111 这种格式并不符合TCP本地端口转发的scheme(TCP本地端口转发的scheme后面应该接远程地址,如tcp://:1111/:3333),而tcp好像也是不能单独作为一种传输类型使用的吧?

但该用法似乎可以正常工作,想问下该用法是正确的吗?如果不正确,正确的等价用法是什么呢?

vaakian commented 4 years ago

或许你是指这个?

gost -L :1080 -F ws://ip:port?host=yahoo.com
或者
gost -L :1080 -F ws://domain:port?host=yahoo.com

这个host参数应该是在SNI协议里面用的吧?ws作为一种传输类型应该没有这个功能。

你试试就知道了 我最近就有这种需求。ws本身建立连接的时候就会有类似http的请求头,所以也有相应的Host字段, 混淆也是一个道理。 虽然作者文档中没说websocket可以这么手动指定host,但是我自己试验确实是可以的。 我服务器上用nginx监听了一个域名,配置好websocket。然后用这种方法指定host是可以成功连接的。

谢谢解答,你是用nginx反代的websocket吗?如果成功反代的话,那么这个用法应该是正确的, 不过也有可能是nginx反代的时候只验证path没有验证host导致可以凑巧成功。

大佬 @ginuerzh 能解答一下到底ws有没有实现这个功能吗?

当然验证host了,我怎么会犯这种错误。

我的nginx在80绑定了一堆域名,纯IP访问设置的404。

有没有实现,你自己试验一下不就知道了?

poly-1 commented 4 years ago

或许你是指这个?

gost -L :1080 -F ws://ip:port?host=yahoo.com
或者
gost -L :1080 -F ws://domain:port?host=yahoo.com

这个host参数应该是在SNI协议里面用的吧?ws作为一种传输类型应该没有这个功能。

你试试就知道了 我最近就有这种需求。ws本身建立连接的时候就会有类似http的请求头,所以也有相应的Host字段, 混淆也是一个道理。 虽然作者文档中没说websocket可以这么手动指定host,但是我自己试验确实是可以的。 我服务器上用nginx监听了一个域名,配置好websocket。然后用这种方法指定host是可以成功连接的。

谢谢解答,你是用nginx反代的websocket吗?如果成功反代的话,那么这个用法应该是正确的, 不过也有可能是nginx反代的时候只验证path没有验证host导致可以凑巧成功。 大佬 @ginuerzh 能解答一下到底ws有没有实现这个功能吗?

当然验证host了,我怎么会犯这种错误。

我的nginx在80绑定了一堆域名,纯IP访问设置的404。

有没有实现,你自己试验一下不就知道了?

Perfect 多谢大佬

oscode1988 commented 4 years ago

?ip=ip.txt 支持 绝对路径吗,放绝对路径文件好像无效

jfc8000 commented 4 years ago

希望可以改进链路检测 比如通过链路要正常打开某个特定网页才判定为“正常”

weiweiqingshan commented 4 years ago

QQ、微信、浏览器都可以使用IE代理配置,请问GOST如何让IE代理配置(主要wpad获取内容不知道)作为一级代理进行转发?

steom commented 4 years ago

it's possible with gost to redirect all internet traffic via tun/tap a-la tun2socks?

tun2socks-windows-4.0-amd64.exe -tunAddr 10.0.0.2 -tunGw 10.0.0.1 -proxyType socks -proxyServer 192.168.101.1:1086 -dnsServer 8.8.8.8,8.8.4.4

ch4rc0al1080 commented 4 years ago

请问 用gost反代加速国外网站

在服务器A上使用

gost -L tcp://:443/B_ip:443

直接输入https://A_ip可以访问,但是使用域名解析后访问就会出现 Connection_aborted 这个怎么搞

wnark commented 4 years ago

请问这个命令: gost -L sni://:443?whitelist=tcp:*.baidu.com,*.qq.com:443 怎么写成json呢? 我写的:

{
    "Debug": true,
    "Retries": 0,
    "ServeNodes": [
        "sni://:443"
    ],
    "whitelist": [
        "*.baidu.com",
        "*.qq.com"
    ]
}

不太清楚whitelist的TCP和443端口怎么加进去

wnark commented 4 years ago

请问这个命令: gost -L sni://:443?whitelist=tcp:*.baidu.com,*.qq.com:443 怎么写成json呢? 我写的:

{
    "Debug": true,
    "Retries": 0,
    "ServeNodes": [
        "sni://:443"
    ],
    "whitelist": [
        "*.baidu.com",
        "*.qq.com"
    ]
}

不太清楚whitelist的TCP和443端口怎么加进去

你的-L 没写错的话,应该是这样的

{
    "Debug": true,
    "Retries": 0,
    "ServeNodes": [
        "sni://:443?whitelist=tcp:*.baidu.com,*.qq.com:443"
    ],
    "ChainNodes": [

    ]
}

您这种写法gost可以成功sni代理,其实我之前

{
    "Debug": true,
    "Retries": 0,
    "ServeNodes": [
        "sni://:443"
    ],
    "whitelist": [
        "*.baidu.com",
        "*.qq.com"
    ]
}

的白名单也没生效。 单独执行

gost -L sni://:443?whitelist=tcp:*.baidu.com,*.qq.com:443

是有效的 请问有没有比较简单添加白名单的写法?谢谢

ghost commented 4 years ago

592 希望可以加上-F 链上的自定义DNS解析

proxy666-dev commented 3 years ago

这里有最新的gost二进制文件:https://github.com/proxy6-dev/Auto-Build-Gost-Bin

syouko commented 2 years ago

请问,在负载均衡中: gost -L=:8080 -F='http://localhost:8080?ip=192.168.1.1,192.168.1.2:8081,192.168.1.3:8082&strategy=round&max_fails=1&fail_timeout=30s' -F=socks5://localhost:1080?ip=172.20.1.1:1080,172.20.1.2:1081,172.20.1.3:1082

这条示例命令, -F='http://localhost:8080?ip=... 中的 localhost:8080 是做什么用途的呢?

我的理解有一个用途是,后面 ip= 中的域名或者IP未指定端口的情况下会默认用8080,但localhost不知其作用。

还有个疑惑就是两个 -F 的情况下,是默认就变成了从第一个F到第二个F的代理吗? 普通情况下使用两个F好像没有效果

heeroyuyj commented 2 years ago

请问 gost 支持范围端口转发吗, 目前看到的示例都是指定某个端口到某个端口, 能否实现 A-B 到 C-D 这样的转发呢

sn01615 commented 2 years ago

怎么关闭控制台的日志输出?

omaidb commented 2 years ago

有哪位大佬知道在json 文件中如何配置"探测防御"的参数吗? https://v2.gost.run/probe_resist/

just4xcx commented 2 years ago

刚刚 windows 11自带的defender现在把windows-386和windows-amd64的程序都判定为 “This program is used to create viruses, worms or other malware.”,我刚下载了最新版的依然会触发风险隔离

mymicroblog commented 1 year ago

gost -L red://:12345 -F=mws://www.baidu.com:80?ip=122.223.22.11 iptables -t nat -A OUTPUT -p tcp --match multiport ! --dports 12345,80 -j DNAT --to-destination 127.0.0.1:12345 除了80,12345 端口其他测试都没问题, 但是80端口我日常需要使用,远程连接也需要, 该怎么对特定ip:80进行例外? 而不是对全部80例外?

这个有答案了么

baguettex commented 1 year ago

请教一下 转发端口中 rtcp和tcp 的区别, 貌似他们俩功能是一致的?

woodlyer commented 1 year ago

请教一下 转发端口中 rtcp和tcp 的区别, 貌似他们俩功能是一致的?

see https://github.com/woodlyer/gostExample to know what's rtcp.

catninelife commented 1 year ago

请教ws的header参数的写法,例如 header=Host: 123.com 或者header={'Host':123.com} 都不起作用