Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

测试部署ok,request #32

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

测试部署ok,request #32

wants to merge 2 commits into from

Conversation

devcodewak
Copy link

@devcodewak devcodewak commented Aug 10, 2016

160802 fd8275a版
ws.go
通常: client hello ServerName为 url.HOST, 即MyAppName.herokuapp.com
修改: 强制client hello sni名为 herokuapp.com
目的: 1) 对中转的sni服务器隐藏了heroku app名 2)实测速度更快,估计sni服务器dns容易解析出主服务器

local_server.go
测试:tor使用本程序socks5前置时,会出错。而https前置正常。
修改:不使用sni名走socks5,原因tor这里也是fake sni。仍使用socksTargetHost即可。
实测:tor前置此socks5通过。建议根据上下文略掉大段sni代码判断。

protected.go
在windows下编译报错。
原因:多处 socketFd 类型不对。
暂时解决:做 int 及 syscall.Handle 强制转换
建议:多个版本protected.go, 头加入类似// +build !windows

//////////////////////////////////////////////////////////////////////////
目前已部署heroku使用,client.json配置SNIProxy, 测试ok,速度超赞,y2b测速2k-4kbps
请教一:PAAS下ServerList使用一个,不容易卡死。如配置多个ServerList,易卡住。
请教二:请给出样板的client.json,hosts.json及服务端的server.json,及已完成的功能。可配合测试。

看代码猜出的配置如下: (备:官方已有标配,官方为准)

server.json
{
    "Log": ["stdout"],
    "Encrypt":{
        "Method": "salsa20",
        "Key": "12345678901234567890123456789012"
    }
}

hosts.json  //全空
{
}

client.json
{
    // "Log": ["stderr","gsnova.log"],
    "Log": ["stderr"],
    "Encrypt":{
        "Method": "salsa20",
        "Key": "12345678901234567890123456789012"
    },
    "Proxy":[
        {
            "Local": "127.0.0.1:1080",
            "PAC": [
            {
            "Remote": "PAAS"
            }
            ]
        },
        {
            "Local": "127.0.0.1:8787",
            "PAC": [
            {
            "Remote": "PAAS"
            }
            ]
        }
    ],

    "PAAS":{
        "Enable":true,
        "ServerList":[
        //"wss://myapp1.herokuapp.com"
        //"wss://myapp2.herokuapp.com"
        "wss://myapp3.herokuapp.com"
    ],
        "ConnsPerServer": 3,

    //mo
        "SNIProxy": "202.171.253.111"
        //cn
        //"SNIProxy": "120.198.243.86"
    //hk
        //"SNIProxy": "110.4.24.170"
        //"SNIProxy": "219.76.4.14"

    }
}

@devcodewak devcodewak changed the title Master 测试部署ok,request Aug 10, 2016
@yinqiwen
Copy link
Owner

yinqiwen commented Aug 11, 2016

有几个问题可以交流下 :)
protected.go那里,主要是用于android vpn的,其它环境其实无用,windows下回头我改下编译

如果sni隐藏app名,是否也可用于https模式(例如openshift的https)?

local_server.go那里,仍然是和android vpn有关。 由于vpn模式下,所有socks5请求的地址都是ip(可能是本地dns解析的,也可能是远程,一般为了性能而言都是本地dns解析),如果本地解析的,存在污染或者并非远端最优的选择,所以用探测出来的sni地址比较合适。 但这里没有考虑到你说的情况。

@devcodewak
Copy link
Author

1 测了下今日611a4df版,windows已编译通过。

2 sni隐藏app名,不可用于openshift
原因:1)实测给定的一app名,被分配到了唯一的一台服务器。不同app名通常对应的ip不同。连错ip则无服务。
2)另rhcloud.com的解析出的ip, 反而无rhcloud.com证书。是:
[openshift.redhat.com openshift.com www.openshift.com assets.openshift.net origin-assets.openshift.net]

3 socks5 sni可按你节奏调整。或开放配置参数,交用户调整。或根据os环境调整。

另请给出3个json文件的官方样板配置及功能进度,便于测试。
问下我可否发godep heroku部署包,可否发修改编译后的客户端bin(带源码),便于大家测试反馈。

用了几年snova, 谢谢

@jzp820927
Copy link

jzp820927 commented Aug 11, 2016

sni隐藏app名,如果只能用于 heroku,可以考虑做一个开关,或者自动判断,如果是连接 heroku 服务器,就自动隐藏 app名,如果是连接 openshift 服务器,则不隐藏 app名

@yinqiwen
Copy link
Owner

@devcodewak 几个配置模板已经提交了。
另外这个是个开源的东西,只要不违反开源协议(BSD),你可以做任何相关的事情 :)

@jzp820927
Copy link

怎么有 “add fake cert” commit,不是原生证书的麽?

@yinqiwen
Copy link
Owner

@jzp820927 only used in GAE mode

@jzp820927
Copy link

哦,明白了,忘记还有个 gae 了。

@yinqiwen
Copy link
Owner

这是我正在自用的android app,基于gsnova的go代码 + 从lantern拿出来的tunn2socks部分实现,有兴趣的可以试用下 :)
https://drive.google.com/file/d/0ByTTmdKuh8haVWoxeFN2X0laLU0/view?usp=sharing

@jzp820927
Copy link

jzp820927 commented Aug 11, 2016

这么快就有 apps 了,太强大了。希望以后能作为一个开源 repo 持续开发。

@devcodewak
Copy link
Author

@yinqiwen 都看到了,另也在json中增加了fakeSni,谢,超赞

采用官方配置中PAAS及cn_sni_proxy部分,现访问流畅多了。网页不会再卡了,秒开。y2b测速从1M快速递增到4M bps

现测试的配置如下:

client.json:
   "ServerList" 中直接配5个wss app
   "ConnsPerServer": 1,
   "SNIProxy" : "cn_sni_proxy"
hosts.json:
   {"cn_sni_proxy" :["120.198.243.3","120.198.243.115","120.198.243.113","120.198.243.52"]}

TcpView 观察 443 连接,无论是否有访问,会始终保持三个连接,超时断开一个时,马上自动重连补上一个。
该等待机制确保了始终有三个通道可用,新开网页自然快速响应。和老版本机制一样了。

//////////////////////////////////////////////////////////////////////////////////////////////////////
以往错误的配置:在 client.json 中 "SNIProxy"项填单一ip, ServerList仅选一个,虽然ConnsPerServer填写3, 但无访问超时后,所有连接会都断开,不会重连保持。 自然新开网页会卡。

@jzp820927
Copy link

有个疑问请教一下:
add fake SNI config for paas 这个 commit,在 "SNIProxy" 上面又增加了 "SNI",这2个 SNI,是一个意思吧?都是配置 sni 服务器。有什么区别呢?是不是 "SNI" 优先级比 "SNIProxy" 高?如果配置有 "SNI",就使用它?如果没有配置 "SNI",就使用 "SNIProxy" 作为默认 SNI?

@yinqiwen
Copy link
Owner

@jzp820927 配置SNI是修改TLS 协议client hello里的server name, 配置SNIProxy则是TCP实际连接的地址,作用不一样的

@jzp820927
Copy link

基本明白了,谢谢解答!

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

问一下最新版服务端具体怎么搭建啊?heroku..只有一些.go的文件mac os x下怎么运行呢?

@jzp820927
Copy link

挺麻烦的,等出官方教程再说吧

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

。。以前用JAP搭过socks的服务端做Tor前置,不过JAP好久没开发了。。看到snova进来发现还有戏
等官方wiki了。。

@jzp820927
Copy link

终于把服务端和客户端都搞定了,真是挺麻烦的。不过感觉在 linux 下还是挺方便的,搭建好 go,git 和 heroku 环境,就是一大堆命令了。
提个建议,为了安全性,证书能不能不预置,而是在第一次运行客户端的时候自动生成随机证书。避免中间人攻击的可能性。虽然被这个攻击的概率极低,但是感觉安全性还是挺重要的。

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

能给一下你配置好的heroku的.git文件夹和linux下的客户端吗?
本人不会编译go语言所以只好伸手了

@jzp820927
Copy link

你要 .git 文件夹干嘛?

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

不是啦。。是一整个heroku的app文件啊,我想直接上传用,如果可以的话谢谢了

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

有人给个简单的配置教程有吗

@jzp820927
Copy link

jzp820927 commented Aug 12, 2016

你把 gsnova 源代码下载下来,就行了,我的整个目录就是 gsnova 源代码。还有你平时部署 heroku 是怎么部署的?是用 git?还是 dropbox?按照平时的部署方法部署就行了。
另外,我的客户端是 linux 64 位版的,你是不是 Linux 64 位,是就发给你,不然你用不了。
还有,这个整个操作过程挺复杂,主要部署 heroku 挺麻烦,真要写教程,那就不是简单教程了。

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

我就是ubuntu 64位啊

@jzp820927
Copy link

行吧,你留个邮箱,我发客户端给你。

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

谢谢啊,[email protected]
heroku我用的git ..但是没部署过go,procfile也不知道咋弄所以能把heroku那个文件夹也发过来吧谢谢啊

@jzp820927
Copy link

jzp820927 commented Aug 12, 2016

@cxnaive 已经发到你邮箱了,你自己查看下吧,注意看邮件内容说明,不然部署不了。

@cxnaive
Copy link

cxnaive commented Aug 12, 2016

好的谢谢

@devcodewak
Copy link
Author

@jzp820927 ok.

hosts.json中配下
"sni_proxy" 选 mo hk ip.

    "other_https":["sni_proxy"],
  "*.github.com":["other_https"],
  "github.com":["other_https"],
  "*.amazonaws.com":["other_https"],

client.json中这么配:

    "Proxy":[
        {
            "Local": "127.0.0.1:8087",
            "SNISniff": true,
            "PAC":[
                {"Rule":["InHosts"],"Remote":"TLSDirect"},
                {"Remote":"GAE"}
            ]
        },


则所有g系(含googlevideo.com),tls实名ServerName走sni, github也走sni。之外的走GAE.
合适的"sni_proxy" ip,整体速度快。

@jzp820927
Copy link

jzp820927 commented Aug 19, 2016

@devcodewak 你 PAC 里面好像少了个 {"Method":["CONNECT"],"Remote":"TLSDirect"}, 吧,不然你就得在 client.json 中把所有 G系的域名映射了,你目前这个配置中,好像没有 G系的相关规则。只有2个 github,1个 amazonaws,和一个默认规则,GAE。。。

而且你 "other_https":["sni_proxy"], 这条好像有点多余了,你把后面那 3 条映射到 other_https 的,直接映射到 sni_proxy 不就行了。

@devcodewak
Copy link
Author

这个参数好,可以再起个端口,全部https都走sni。
上文是测下自定义组,让常用的走sni, 其他走gae.

@jzp820927
Copy link

jzp820927 commented Aug 19, 2016

其实我觉得只要一个端口就行了,把所有规则全部做到一个端口上,https 用直连,其他可以走 GAE,最好能再把国内流量也做成直连。这个端口还可以当 APN 用。
随便再问下,gae 的 autorange 能不能用?还有 URL 规则应该怎么写,能给个例子麽(最好是带正则的例子)?

@cxnaive
Copy link

cxnaive commented Aug 23, 2016

Failed to read channel for reason:net/http: request canceled (Client.Timeout exceeded while reading body)...这个是啥情况。curl下载时候经常有问题

@yinqiwen
Copy link
Owner

@cxnaive 用的是http模式? 这个不影响proxy行为

@cxnaive
Copy link

cxnaive commented Aug 24, 2016

问题就是用curl下载的时候会下到一半就断掉(特别是稍微大一点的文件(http/socks都有这个问题)),每次一断就有那个信息

@jzp820927
Copy link

发个你下载中断的链接上来,我测试一下。

@yinqiwen
Copy link
Owner

@cxnaive Client.Timeout exceeded while reading body 这个是paas无数据返回给本地gsnova超过一段时间,可能是远端paas的网络问题或者本地到paas之间的网络丢包干扰

@cxnaive
Copy link

cxnaive commented Aug 24, 2016

我以前是直连的。。现在挂了sni不知道会不会解决

@cxnaive
Copy link

cxnaive commented Aug 24, 2016

就是这种情况:
c011e4f8-6ed4-419e-b17f-44a0f3dd4705

@cxnaive
Copy link

cxnaive commented Aug 24, 2016

就是下到一半就掉线

@cxnaive
Copy link

cxnaive commented Aug 24, 2016

用chrome下载的时候也有这个问题的

@yinqiwen
Copy link
Owner

@cxnaive 这个issue太长了,新建一个issue或者到gitter.im讨论吧。 https://gitter.im/gsnova/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge

@devcodewak
Copy link
Author

整理了些链接,请耐心阅读后,可熟悉gsnova各模式配置部署:
https://gitter.im/gsnova/Lobby
https://github.com/phuslu/goproxy/issues/991
https://github.com/phuslu/goproxy/issues/1037
#32
e56a509
54e857c
f23d593
274dcd8

@jzp820927
Copy link

整理的很不错,有心了。

@szh7379
Copy link

szh7379 commented Sep 17, 2016

求教host段的IP怎么找的,找到的填在sni还是cn_sni?

@jzp820927
Copy link

https://github.com/yinqiwen/gsnova/releases
打开上面的地址,下载 gsnova-paas-deploy-with-dependencies-v0.25.1.tar.bz2 ,这个是服务端的完整包。任何用 git 部署就行了,如果不会操作git,建议你先学习一下 git。

@szh7379
Copy link

szh7379 commented Sep 20, 2016

请教几个问题:

  1. sni是不是就是境外的sni服务器,cn_sni是国内的sni服务器中转?日志中ip: is CNIP:fasle这是在判断访问站点的IP吗,类似gfwlist ?那选择sni 跟cn_sni 又是根据什么进行呢?
  2. sni是https反代,非https地址是不是就不能访问,试过t66y不能直接连接,https 能连,但是页面不忍直视,dw.com 不管https或者http都没法连接
  3. 最关键的一点是sni的ip 怎么找啊

@jzp820927
Copy link

jzp820927 commented Sep 20, 2016

@szh7379
1、sni是不是就是境外的sni服务器 - 正确,cn_sni是国内的sni服务器中转 - 正确,is CNIP 是判断国内IP用的,所有国内IP,都会被这个规则匹配。sni ,和 cn_sni,看你自己手动配置,你配置的是 sni 就走 sni,你配置的 cn_sni ,他就走 cn_sni
2、sni 只能代理 https 流量,http 不行。有些网站是混合内容,就只能代理部分请求,所以就会出现页面不忍直视的情况,因为有部分请求无法完成,页面加载不完整,比如你说的 dw 就是这种情况。
3、sni 怎么找,这个页面不是提供了吗?往上翻 https://github.com/yinqiwen/gsnova/pull/32#issuecomment-239678174,
还有 #32 (comment) 里面提供的几个链接里面也有。

@szh7379
Copy link

szh7379 commented Sep 20, 2016

@jzp820927 非常感谢

@szh7379
Copy link

szh7379 commented Sep 20, 2016

default
http就用48102直连算了,这速度实在是太给力了

@jzp820927
Copy link

什么 48102直连?你看懂,你说的什么意思?

@szh7379
Copy link

szh7379 commented Sep 20, 2016

用48102端口的不是paas直连吗,这个访问http就没什么问题啊,SwitchyOmega规则设置里单独设置http的就行了,用48100是不能访问http的,单独设置48102能,所以我以为48102是不经过sni的

@jzp820927
Copy link

额,你说的端口哦,好久没用 gsnova 了,忘记端口了,你直连都这么快?你是移动网吧?

@szh7379
Copy link

szh7379 commented Sep 20, 2016

y2b走的https,走的sni才这么快的……

@jzp820927
Copy link

jzp820927 commented Sep 20, 2016

你刚刚不是说你是直连麽,现在又说是 SNI,不清楚你具体是怎么连的

@szh7379
Copy link

szh7379 commented Sep 20, 2016

图片连的是https感慨一下而已……48102说的是http解决办法
default

@jzp820927
Copy link

行吧,只要能用就行了,这个帖子好长啊,每次打开都要加载半天,蛋疼。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants