uku / Unblock-Youku

A Chrome extension helping users access their web services while traveling outside mainland China
https://uku.im
GNU Affero General Public License v3.0
3.18k stars 650 forks source link

代理服务器的备案提示 #320

Closed zhuzhuor closed 10 years ago

zhuzhuor commented 10 years ago

访问服务器有时候会出现截图这样的提示 会导致代理运行不正常

screen shot 2014-06-22 at 8 35 51 pm

猜测只对某些类型的请求返回这样的数据

whuhacker commented 10 years ago

哪个端口?好像只是80端口会提示备案

zhuzhuor commented 10 years ago

8888 看起来只能早点上 spdy 了 然后 firefox 和别的 ipad 什么的用 socks5? 或者我们早点去备个案?但是不在国内不太方便呢

sequoiar commented 10 years ago

@zhuzhuor 试试让代理服务器入口流量走 UDP。技术细节可以联系我:iwebpp@gmail.com

zhuzhuor commented 10 years ago

@sequoiar 现在 chrome 就支持这么几种代理,如果你想说的是 quic 的话,貌似还没支持代理功能,而且需要手动开启呀

zhuzhuor commented 10 years ago

@sequoiar 哦~还是你想说你的这个 project 呢 https://github.com/InstantWebP2P/iwebpp.io 但是 client 肯定需要运行特殊的软件呢,或者我们得在海外再运行个同等数量的服务器来转换协议呢

whuhacker commented 10 years ago

@zhuzhuor 备案不现实吧,难道我们能为 youku.com 在 aliyun 上备案么?

zhuzhuor commented 10 years ago

@whuhacker 不是,我们应该只要备案我们自己的域名就行吧?

sequoiar commented 10 years ago

@zhuzhuor 现在你的代理路径是: browser with plugin -> tcp -> proxy server in ali yun -> dest site

我想说的是: browser with proxy setting -> local p2p proxy client -> udp -> proxy server in ali yun -> dest site

如果有时间,可以把 local p2p proxy client 集成 作为 browser 插件的一个部分。

whuhacker commented 10 years ago

@zhuzhuor 阿里云是在 VPS 前端还有个白名单,未备案域名会被拦截。 所以我猜可以排查一下我们代理的域名里,有哪些是没有备案的

zhuzhuor commented 10 years ago

@sequoiar 之前就想过类似的,chrome extension 没有办法监听端口的 如果让用户装个 local proxy client 感觉就非常不 user-friendly

@whuhacker 哦~ 你说阿里云还会监测一下 inbound 的 http 请求中的 url 吗 像最近新加的这个域名 http://serv.vip.iqiyi.com/services/ck.action 就经常出这个错误提示

whuhacker commented 10 years ago

@zhuzhuor 是的,不过他们非 80 端口都监测太过分了,其他运营商一般都只看 80 端口的 iqiyi 肯定是备案过了的呀,这个怎么会出提示呢。。

zhuzhuor commented 10 years ago

@whuhacker 看看回头不用 http 协议会不会还有问题... 国内这网络政策环境真折腾呀

whuhacker commented 10 years ago

@zhuzhuor 你之前说的是 Google 的 SPDY Proxy 吗? 看这个例子,好像实现起来不是很容易,不知道有没有什么现成的代码可以参考的

zhuzhuor commented 10 years ago

@whuhacker 恩,Nginx 貌似已经支持了 SPDY 了 不知道 apt 源里面的有没有默认支持,不行的话只能自己带参数编译了

我的想法是先用 Nginx 把 spdy 去掉,然后再经过 squid 代理 不过也只能试了才知道

karlcheong commented 10 years ago

除了那個特定的域名外好像 其他域名就沒問題的樣子

spdy proxy的話只有chrome支持.... 用firefox/手機作業系統的就直接不能用.

我的想法是 跑socks代理 再把socks代理的連接再用IPTABLES 轉到 squid 代理

tywtyw2002 commented 10 years ago

感觉是iptables之类或者squid配置的问题。

zhuzhuor commented 10 years ago

我昨天今天阅读+尝试了下

Nginx 运行 SPDY 的时候也是支持普通 HTTPS 的,因为先是 HTTPS 连接,如果支持 SPDY 再用 SPDY。但是难处是,Nginx 特别不好和后端的 Squid 配合,尝试了很多也不知道怎么把完整的 URL 当做 GET/POST 后面的字符串,只有 path 在 GET/POST 后面。可能的办法就是把 URL 放在 header 里,让后端的 Squid 想办法取出来替换掉,或者拿 Host header 拼 URL 出来。总之就是很折腾

另外发现 Squid 本身居然也支持 HTTPS,但是 Ubuntu 上的貌似需要带 ssl 参数重新编译 HTTPS 的部分才能正常工作,回头折腾折腾编译一个试试看

还有别的办法例如 stunnel 之类的,但是稳定性怕没有保障

HTTPS 的代理貌似 Firefox 和 Android 都支持,但是可能需要扩展来设置 我们可以先弄个 HTTPS 的代理,有机会再升级成 SPDY

tywtyw2002 commented 10 years ago

存nginx进行header和url操作需要自己写模块,nginx支持正向和反向proxy。

如果是单纯扩展的话用lua写个解析比c写模块简单多了,性能比squid用redirecter处理高很多。

nginx加上后端squid没啥优势,现在不知道加nginx的作用?

另外追求高兴能的话用ats试试cache。cache需要解决的方向是先把url给cache了,我以前做过实验发现cache效率不高,优酷的解析地址总在变,返回的内容不知道变不变。

mozbugbox commented 10 years ago

但是难处是,Nginx 特别不好和后端的 Squid 配合,尝试了很多也不知道怎么把完整的 URL 当做 GET/POST 后面的字符串,只有 path 在 GET/POST 后面。可能的办法就是把 URL 放在 header 里,让后端的 Squid 想办法取出来替换掉,或者拿 Host header 拼 URL 出来。

你是说使用 nginx 作为 proxy? http://nginx.com/blog/nginx-ssl/ ?

GET/POST 后面肯定是 path 了,在 headers 里的 path 可以是 full URL

Oops, HTTP 1.1 是允许 request 是 absolute URI 的

whuhacker commented 10 years ago

干脆我们兼容 shadowsocks 协议,不再发明轮子一了百了。。 https://github.com/clowwindy/shadowsocks-chromeapp

也有在实验 SPDY

zhuzhuor commented 10 years ago

@karlcheong Nginx module 回头可以试试看,感觉还挺有趣的 现在想加 Nginx 的出发点是,想给代理服务器弄成跑 HTTPS 或者 SPDY 的协议,这样就能少点 ISP 或者防火墙之类的影响。现在这些比较稳定的服务端软件,貌似只有 Nginx 有比较新的 SPDY 支持

@mozbugbox 对,HTTP 代理基本上就是发个完整的 URL 给代理服务器。但是 Nginx 转发给 Squid 好像不太容易弄成 GET url 的格式,不管怎么配置都只提供 GET path

@whuhacker 用 shadowsocks 得运行一个 client-side socks5 service 才行,因为 shadowsocks 算是攒了个自己的协议。在 chrome extension 里没办法监听本地端口,所以不能跑这样的代码,所以感觉我们只能用内置支持的代理类型,HTTP HTTPS Socks5 这些

whuhacker commented 10 years ago

@zhuzhuor 你看看这个,不需要另外的 client ,直接用 Chrome App 就可以,用到了 Chrome socket API 不过好久没更新了

zhuzhuor commented 10 years ago

@whuhacker socket API 只有 chrome app 能用,chrome extension 不能。。。

mozbugbox commented 10 years ago

我看到有文章说 proxy_pass 的值如果不是完整 URI 的话,应该会使用全部的 URL。所谓不完整 URI 应该就是 http://host:port , 最后面没有 /,path 部分。

而看 Module ngx_http_proxy_module 手册,也有这个意思,进一步用了 rewrite 也应该给出 full url。可以试试。

karlcheong commented 10 years ago

@zhuzhuor 如果真的想使用SPDY Proxy的話 也許可以試試這個 Shrpx + squid https://tatsuhiro-t.github.io/spdylay/package_README.html#spdy-client-and-server-programs

然後在chrome 產生pac 的 return proxy 改為 HTTPS

zhuzhuor commented 10 years ago

@mozbugbox 那个我也看到了,也试过了,Squid 还是只能收到 path 的部分 module document 里面的意思估计是, 如果省略了 /path,就会默认使用 request 里的 /path

@karlcheong 恩,回头可以试试 Shprx

karlcheong commented 10 years ago

@zhuzhuor 在美团云伺服器上試了下, 建了 Shrpx + squid, port 80, self-signed cert.

zhuzhuor commented 10 years ago

@karlcheong 避免用 80 端口,我准备用 9999 用来做 SSL 的服务 80 端口可能回头会有麻烦的手续什么的

我这两天有点忙,没找到时间试试 前两天尝试编译 Squid3 自己的 HTTPS 支持,但是没弄成

karlcheong commented 10 years ago

@zhuzhuor 剛換成了 993 (IMAPS)

我是想測一下即使是80 端口, 也能穿透白名單(?), 而不會給干擾.. 另外..考慮一下port的使用, 不然有些firewall就會給擋掉了... 試過一個學校的WIFI, 只開放了 FTP,HTTP(S),IMAP,POP3,SMTP...

zhuzhuor commented 10 years ago

@karlcheong 有道理,回头可以都用 993

zhuzhuor commented 10 years ago

我已经把 proxy.mainland 上的 squid 都重新带 ssl 参数编译了一遍,现在 https 的代理理应正常工作了 chrome 扩展也更新了新版本,来使用 https 代理

如果这两天使用上有什么问题,可以来反馈

现在是 https 代理用 993 端口,http 代理用 8888 端口 两个端口都可以用,过两个礼拜看情况再把 http 的端口关掉吧

@karlcheong 美团那个服务器可能管得没有阿里云这么严格,所以用 8888 端口不会出备案的提示 你看看有什么办法可以弄个 socks5 转 http 的办法,这样不用 tls 证书也行 如果 socks5 的代理技术稳定的话,我们回头也多一种备选方案

另外我发现 chrome 已经开始支持 QUIC 协议的代理了,但是 QUIC 协议本身貌似还没有被 chrome 默认开启。QUIC 是基于 udp 的 http 协议,等到稳定一些我们可以试试,如果能用来做代理服务器,就不怕过滤了 可以在这个页面上搜 quic https://developer.chrome.com/extensions/proxy

tywtyw2002 commented 10 years ago

阿里云是有监控http协议的东西,运行在网关上面,所以只要是http协议肯定能被抓到。 美团只要不是80,别的啥也不管,但是美团的带宽贵的要死。

karlcheong commented 10 years ago

@zhuzhuor 一個簡單的方法 socks5->http 1 squid3 的 http_port portnumber 加上 intercept http_port portnumber intercept 2 先建一個新 user useradd -M -s /bin/false socksuser 3 運行 iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner socksuser -j REDIRECT --to-ports squidport 4 用其他user運行 ssh -TnNfqg -p sshport -D socksport socksuser@localhost

然後把 pac 里的 PROXY換成SOCKS, 就可以用了

whuhacker commented 10 years ago

今天我又在阿里云上试了一下,发现原来是用 IP 访问就不会出备案提示,而如果是域名访问则不论什么端口都提示备案。。

阿里云太变态了。其他 VPS 提供商可能会宽松些

karlcheong commented 10 years ago

話說大陸雲平台的服務越來越多了, 最近看到的360靠谱云 1G RAM+ 5Mbps 福州聯通 = RMB54/mo Win03-08 / CentOS5-6 ref: http://wangzhan.360.cn/news/shuqi