These are chat archives for zhuhaow/NEKit

4th
Jul 2016
浮生
@FlowerWrong
Jul 04 2016 07:27
Can I ask you a question about utun with Potatso-iOS project?
zhuhaow
@zhuhaow
Jul 04 2016 08:04
问吧
我看了Potatso-iOS 源码整理出来这个图,但发现有些地方走不通。NEPacketTunnelProvider会配置一个http proxy,但是又有utun0。不知道数据到底是怎么走的。
zhuhaow
@zhuhaow
Jul 04 2016 08:13
没有完全读过他的代码
不过我这么猜
utun0出来的数据被重新组成TCPflow
然后送入proxy中
http proxy设置了以后支持http proxy的地方
也就是比NSStream更高层的调用
都会自动使用代理
这样就不会走到utun0去
也不是猜
只有重新封装成TCP flow后的处理是猜的
其他都是一定的
顺带一说,他实现的UDP的转发完全是错的,只在某些情况下可用
你知道那个全局代理到底改变了什么么
浮生
@FlowerWrong
Jul 04 2016 08:19
稍等,我画个图
浮生
@FlowerWrong
Jul 04 2016 08:28
iosnet2.png
zhuhaow
@zhuhaow
Jul 04 2016 08:29
不是这样的
走代理的并不会到tun这一级去啊
HTTP这一级就连到代理了
你能看到DNS的结果么,google.com是被污染的
我不知道他是怎么处理这个的
浮生
@FlowerWrong
Jul 04 2016 08:32
这个dns是有问题的。
zhuhaow
@zhuhaow
Jul 04 2016 08:32
如果他通过代理连这个IP,自然是连不上的
但是通过代理连本机解析出来的IP这样做是不对的,虽然我发现很多人喜欢这样
另外我完全没懂全局模式是在干嘛,是指无视所有规则的意思么
浮生
@FlowerWrong
Jul 04 2016 08:37
我也没懂。我去看看代码。
zhuhaow
@zhuhaow
Jul 04 2016 08:37
还有个问题,你试一下,twitter.app可以用么
浮生
@FlowerWrong
Jul 04 2016 08:37
全局模式 google.com 是可以的
zhuhaow
@zhuhaow
Jul 04 2016 08:37
我看了一下,他处理了污染的情况
但是仅仅是在代理服务器这边
如果是tun这边的话,被污染了应该没法连了
浮生
@FlowerWrong
Jul 04 2016 08:44
1.pic.jpg
全局模式,twitter.app报这个错误
没这个地址吧
zhuhaow
@zhuhaow
Jul 04 2016 08:45
不是,我说的是twitter这个app
浮生
@FlowerWrong
Jul 04 2016 08:45
。。。抱歉
可以用
zhuhaow
@zhuhaow
Jul 04 2016 08:46
因为我只知道twitter这个地址是被污染并且是无视代理规则的
不是网页访问twitter
浮生
@FlowerWrong
Jul 04 2016 08:47
twitter app 可以的
刚发了一条twitter
zhuhaow
@zhuhaow
Jul 04 2016 08:49
嗯,在shadowsocks-libev里面做了
虽然不知道是怎么做的
zhuhaow
@zhuhaow
Jul 04 2016 08:56
你要是不怕麻烦的话
去下个Fing
然后点第二个tab,进去输google.com看看IP是多少
浮生
@FlowerWrong
Jul 04 2016 08:59
全局的意思可能是都走代理,即使 baidu.com
zhuhaow
@zhuhaow
Jul 04 2016 09:00
因为我从来没用过shadowsocks,所以之前我不太搞得清楚他的功能究竟是到了什么样子,我现在大概清楚了
其实potatso真的是非常简单
他就是包了一下shadowsocks,所有的逻辑都已经做好了,他只是做了个生成配置文件的GUI
浮生
@FlowerWrong
Jul 04 2016 09:01
ss我知道,我写过客户端。就是转发socks5的请求,加密解密
不是喔
zhuhaow
@zhuhaow
Jul 04 2016 09:02
不是,我说的是shadowsocks-libev提供的功能
其实非常多
zhuhaow
@zhuhaow
Jul 04 2016 09:03
你说的我都知道
但是他还有很多很多配套的东西都打包到shadowsocks-libev里了
你如果把fing的结果给我看一下,我应该能发现问题了
浮生
@FlowerWrong
Jul 04 2016 09:08
fing那个好像没效果,浏览器打开baidu.com,ip显示是代理服务器的。
zhuhaow
@zhuhaow
Jul 04 2016 09:09
我估计,google.com的解析结果不知道为什么虽然是被污染的,但是却被当成未被污染的了
fing在我这可以用啊
浮生
@FlowerWrong
Jul 04 2016 09:10
2.pic.jpg
zhuhaow
@zhuhaow
Jul 04 2016 09:10
google.com.hk呢?
浮生
@FlowerWrong
Jul 04 2016 09:13
也是一样的
我再去啃啃代码。
过不过tun那里,我的图有问题吗
zhuhaow
@zhuhaow
Jul 04 2016 09:13
可能是fing不支持cname的原因
                                    ┌────────────────────┐
┌──────────────────────┐            │                    │
│                      │            │        APP         │
│        Proxy         ◀────────────│                    │
│                      │            │                    │
└─────────▲────────────┘            └────────────────────┘
          │                                    │          
          │                                    │          
          │                                    │          
 ┌────────┴───────┐                            │          
 │      TUN       │◀───────────────────────────┘          
 └────────────────┘
应该是这样的
app调用的库支持代理的,访问网络直接走代理
不支持的才到tun
再去重新装成tcp流走代理
浮生
@FlowerWrong
Jul 04 2016 09:17
"再去重新装成tcp流走代理" 这个应该不会走配置的那个http代理了吧。走自己本地启动的代理。
zhuhaow
@zhuhaow
Jul 04 2016 09:17
嗯,这里就是完全由potasto随意控制了
会直接发到ss
fing无法检测到IP的原因是因为DNS直接就查不到东西,比如fb.com
不知道这里具体是怎么处理的
但是估计是DNS出了问题
浮生
@FlowerWrong
Jul 04 2016 09:23
明白了一部分,谢谢。大概可以串联起来了。余下问题应该是potasto怎么处理的dns
zhuhaow
@zhuhaow
Jul 04 2016 09:24
这库核心就是ShadowPath,下面有Antinat(SOCKS5 proxy),Privoxy(HTTP proxy)和shadowsocks-libev
Potatso又加了一个tun2socks来把TCP转为TCP流
然后这些东西接收到数据就直接转发给shadowsocks-libev
shadowsocks-libev负责处理规则,连接远程服务器等等
包括DNS也是shadowsocks-libev处理
浮生
@FlowerWrong
Jul 04 2016 09:25
dns不是
utun0 -> tun2socks -》Antinat(SOCKS5 proxy) -》shadowsocks-libev
不遵从代理应该是这么走的
zhuhaow
@zhuhaow
Jul 04 2016 09:27
应该不需要ANtinat
浮生
@FlowerWrong
Jul 04 2016 09:27
我看的代码,ANtinat 的fd是作为参数传递给tun2socks的
作者应该是为了加自定义http代理功能
utun0 -> tun2socks -》Antinat(SOCKS5 proxy) -》http代理
zhuhaow
@zhuhaow
Jul 04 2016 09:28
不是,我明白了
Antinat应该是为了和ss通信的
ss建立了SOCKS5代理
好像也不对
诶,这个不是重点,反正DNS也不在这些里面
这个不知道是谁写的,可靠性也不知道
zhuhaow
@zhuhaow
Jul 04 2016 09:35
像是一个联手项目,并没有打算真正用的那种
基于Apple官方的那个demo改的
浮生
@FlowerWrong
Jul 04 2016 09:35
那个pdf分析了surge和surf,可能是surf的作者
zhuhaow
@zhuhaow
Jul 04 2016 09:36
surf是什么
a.big.t
zhuhaow
@zhuhaow
Jul 04 2016 09:38
有可能这个是他尝试的时候写的,然后就开始认真写闭源的了
浮生
@FlowerWrong
Jul 04 2016 09:38
😄,可能真是
zhuhaow
@zhuhaow
Jul 04 2016 09:38
分析的对的,因为我觉得只有这一种实现方式
不过给他一画感觉格外复杂
zhuhaow
@zhuhaow
Jul 04 2016 09:45
好吧,所有的DNS请求都没有被劫持,我完全不知道究竟是怎么回事了
浮生
@FlowerWrong
Jul 04 2016 09:46
我也是看到没有劫持,只是转发了
zhuhaow
@zhuhaow
Jul 04 2016 09:46
你在fing里面试试twitter.com,Facebook.com或者其他被污染的地址试试
浮生
@FlowerWrong
Jul 04 2016 09:47
得到的结果是被污染的
zhuhaow
@zhuhaow
Jul 04 2016 09:47
哇,这还能通过tun使用……原理上不通啊
浮生
@FlowerWrong
Jul 04 2016 09:48
确实是被污染的,和我在电脑上host得到的地址一样
ss需要发送域名和端口给他,这域名和端口从哪里来。确定这个应该就可以了
zhuhaow
@zhuhaow
Jul 04 2016 09:49
如果没有劫持DNS的话连到SOCKS5代理的时候会发给他啊,这个没问题的,问题是重建的TCP流是一个污染过的目标IP
根本就没法获取真实域名了
surge的处理是这样的,只有返回IP被污染的时候,或者这个域名明确的在某个规则里的时候
DNS会返回一个虚假的IP
这样就可以反查了
但是没劫持的话就无从知道真实域名了
浮生
@FlowerWrong
Jul 04 2016 09:52
就是建立一个hash,查询域名对应fakeip
zhuhaow
@zhuhaow
Jul 04 2016 09:52
我有点怀疑Twitter已经不再采用自己的SPDY库而是直接调用系统的NSURLConnection之类的东西了
浮生
@FlowerWrong
Jul 04 2016 09:52
但potatso好像没有
zhuhaow
@zhuhaow
Jul 04 2016 09:52
毕竟iOS应该已经支持了
这样就会走代理了
原来Twitter用的自己的那个CocoaSPDY不支持代理设置
自己搞个socket
Potatso好像不能关掉packet功能
浮生
@FlowerWrong
Jul 04 2016 09:53
但如果走tun,发送给ss服务器的domain和端口从哪里来的呢
zhuhaow
@zhuhaow
Jul 04 2016 09:54
永远不知道,但是如果IP是真实的也不是不能连,虽然我在NEKit是一定要反查出域名的
我写的说明你可以看一下https://github.com/zhuhaow/NEKit
浮生
@FlowerWrong
Jul 04 2016 10:02
https://github.com/zhuhaow/NEKit#dnsserver 嗯,这种比较好理解。
但如果不知道,我发的ip是污染的。那么ss服务器也不能返回的。肯定有什么地方我们没发现
zhuhaow
@zhuhaow
Jul 04 2016 10:09
我有99%的把握twitter的不知那个版本开始支持代理了
这个连接是走代理的,所以污染不污染无所谓了
等等,又不确定了
好的,我确定了,twitter并没有走tun接口
可以用mail.app实验,因为这个是只走SOCKS5代理,而iOS是不能设置SOCKS5代理的
浮生
@FlowerWrong
Jul 04 2016 10:13
额,那其实这个tun没用是吧
zhuhaow
@zhuhaow
Jul 04 2016 10:13
获取到的是Unknown,没有连接信息
而twitter的连接居然有http请求头
他偷懒了,这个tun在ip不被污染的情况下是可以用的
当然并不能解释为何google.com上不去
浮生
@FlowerWrong
Jul 04 2016 10:15
google.com他好像说是match domain的问题,我这边全局后可以上
shadowsocks/Potatso-iOS@8e3a51b
这个commit
zhuhaow
@zhuhaow
Jul 04 2016 10:19
这里怎么了
浮生
@FlowerWrong
Jul 04 2016 10:20
google
能上去
zhuhaow
@zhuhaow
Jul 04 2016 10:20
他把规则放到http这里去了?
浮生
@FlowerWrong
Jul 04 2016 10:20
我试了下mail.app,好像真有问题
是的
zhuhaow
@zhuhaow
Jul 04 2016 10:21
奇怪啊。难道tun还要先转成http connect连http代理
严格来说规则放http是对的
因为没有规定http代理中一个socket收到的多个请求连接的是同一个host
浮生
@FlowerWrong
Jul 04 2016 10:22
mail.app可以发邮件,代发,我全局开了vpn
不会吧
zhuhaow
@zhuhaow
Jul 04 2016 10:22
但是chrome和苹果的实现都是保证请求连到同一个host的
gmail么?
不翻墙也可以上的
浮生
@FlowerWrong
Jul 04 2016 10:23
苹果自带的mail
zhuhaow
@zhuhaow
Jul 04 2016 10:23
如果是gmail的imap不用翻墙的
你可以ping一下
慢一点而已
浮生
@FlowerWrong
Jul 04 2016 10:28
看了代码,确定tun没有再转发到http
utun0 -> tun2socks -》Antinat(SOCKS5 proxy) -》shadowsocks-libev
这样走的
privoxy http proxy -> shadowsocks-libev
遵从代理是这么走的
zhuhaow
@zhuhaow
Jul 04 2016 10:30
搞不懂。难道antinat又判断了一遍?
或者他觉得tun的东西反正不多干脆都走代理
浮生
@FlowerWrong
Jul 04 2016 10:32
有什么方法可以测试吗
写个spdy协议的东西?
zhuhaow
@zhuhaow
Jul 04 2016 10:58
测试什么
antinat唯一的作用就是结合tun的
ss以socks5代理的形式运行
http代理由
privoxy翻译为socks5
浮生
@FlowerWrong
Jul 04 2016 11:01
测试tun的作用,确定作者其实没有用tun。只用了http proxy
zhuhaow
@zhuhaow
Jul 04 2016 11:01
antinat把裸的tcp流包了一个socks5
浮生
@FlowerWrong
Jul 04 2016 11:01
tun对于污染的dns没有实际效果
zhuhaow
@zhuhaow
Jul 04 2016 11:02
应该用了吧。不然那个tun2socks干什么的
你如果想试试规则
可以设一个不能连的ss服务器
再看看mail还能不能用
国内的邮箱
浮生
@FlowerWrong
Jul 04 2016 11:07
我开全局,mail可以用,但浏览器就不能用了
zhuhaow
@zhuhaow
Jul 04 2016 11:07
感觉好像tun都变直连了
浮生
@FlowerWrong
Jul 04 2016 11:08
😄
全局mail都还能用,我试了下,本地电脑起ss server,mail没有代理过去
zhuhaow
@zhuhaow
Jul 04 2016 11:09
那这个tun2socks除了占资源没有任何用
而且badvpn这个tun2socks实现的也够复杂的
浮生
@FlowerWrong
Jul 04 2016 11:12
感觉越来越复杂了