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 651 forks source link

ipad 上的代理 #49

Closed whuhacker closed 11 years ago

whuhacker commented 11 years ago

ipad上看视频的需求越来越强劲,如何解决,不知道有没有什么好的想法

zhuzhuor commented 11 years ago

我一直在考虑一个idea,鉴于你问起来,我们可以讨论讨论

我在想咱们可以自己弄个DNS服务器来解封这类网站 普通的域名就照常解析到原IP地址,关键的域名就解析到我们自己的一个转发服务器上去

然后各类用户,不管电脑或者ipad之类的,只需要把系统的DNS设置改成我们服务器,之后自动就可以解封了 这样做应该特别干净,我们也不用给这些所有的网站都写个app了,那样维护起来也麻烦

但主要的问题就是安全考虑 做DNS服务器责任比较重大,如果DNS服务器被人hack了,然后随便一个网站都可能是phishing的 另外一个就是不知道做这个服务器资源消耗有多少,希望维护起来不要太麻烦,而且用户也好纠错

我记得dnspod好像开源了他们的一点服务器代码,我们回头可以试试

batiatus commented 11 years ago

Ipad 可以 用 本地代理服务器的运行和设置示例 在电脑自己建个 要把server.js 里的127.0.0.1 该成原来的ip 像样192.168.1.100 ... 然后填到ipad那 用safari可看 youku 不过那个youku app 本来也可用的 今天开始的不行了 大大能不能研究一下

zhuzhuor commented 11 years ago

@batiatus 牛,多谢反馈,我开始写这个功能的时候也没想到iPad上也能这样用 还以为只有flash浏览器之类的可以这么解决 我今天回去就看看这个youku app的问题

另外一个技术上的tip 你把那个 192.168.1.100 直接写成 0.0.0.0 就会自动绑定本机所有的IP地址 IP地址变化的时候就不用每次都手动更改啦

zhuzhuor commented 11 years ago

@batiatus 我刚更新了一点点代码,估计解决了youku app的问题,你下载个新版的试试看 但是不是很稳定,刚打开的时候经常出现 服务器或网络繁忙 的提示 点了确定,稍微拖动一下又可以正常播放

但是在浏览器里面访问貌似基本上没啥问题,下面是我在iPad上的Chrome的一个截图

我回头看看是不是代码的问题,是不是需要优化一下 另外看看怎么把运行步骤也简化一下

whuhacker commented 11 years ago

还是离不开电脑啊,使用场景局限在家庭wifi了 不过ipad也就在家里用用。。

zhuzhuor commented 11 years ago

@whuhacker 要是把转发服务器稍微改一下,直接可以当个代理服务器用的话也行 我们在公网上运行个代理服务器,然后给用户都设置个PAC文件节省流量 但是感觉这样摊子就铺得有点大。。。和DNS那个idea一样,都很麻烦的样子。。。

batiatus commented 11 years ago

@zhuzhuor 更新了 没发现 服务器或网络繁忙 的提示 :) 可能是我自己还弄了个pac file(哈只对优酷有效 pptv pps之类的话不知如何弄) 感谢z大

zhuzhuor commented 11 years ago

@batiatus 能用就好 回头这两天我也看看别的app

代码里有一点可以自动生成pac文件的部分,我回头看看怎么方便把pac输出出来 https://github.com/zhuzhuor/Unblock-Youku/blob/master/shared/tools.js

haoxian-zhao commented 11 years ago

感谢更新, 现在ipad可以播youku了, 但是...appletv用不了了... 如果要同时也支持appletv的话... 是不是把问题弄得太复杂了呢?

zhuzhuor commented 11 years ago

@haoxian 我手头没有apple tv来做测试,不过我猜测是因为用了代理的缘故,估计用pac文件让特定的网络请求通过代理就好了 稍微等等我想想看怎么方便自动生成这个pac文件

batiatus commented 11 years ago

@zhuzhuor 更新一下 我也有网络繁忙的提示了 hoho 开头看的挺流畅 后面就越来越卡 在电脑上完全不会卡的说 望z大有时间麻烦看看 thx

zhuzhuor commented 11 years ago

@batiatus @haoxian @whuhacker 断断续续折腾了两天,终于在linode上架起来了个公网用的代理服务器 (之前的支持转发功能的后台服务器迁移到heroku上去了,感觉heroku真心不错)

你们试试直接设置 pac 文件为 http://uku.im/proxy.pac 就行了,剩下都不用设置了,iPad和Firefox之类估计都可以用 偶尔会有timeout的错误,我回头想想怎么办法解决 能功能完善之后再写个简单的小教程吧

UPDATE: 这个地址不能用了,看下文中的新地址

whuhacker commented 11 years ago

@zhuzhuor 转发模式的最大问题是我们的转发服务器IP固定,大量用户使用同一个IP转发很容易被侦测到并屏蔽。heroku可以换IP吗?

zhuzhuor commented 11 years ago

@whuhacker heroku貌似新push一下有可能就是不同的ip了 但是这纯代理服务器就不能用这种PaaS的服务,不知道为什么http req过不了前端的load balancer,过去了之后全都给把请求都修正成普通的http请求了,所以暂时只能用自己架设的linode这种VPS

whuhacker commented 11 years ago

@zhuzhuor 不是很了解现在的转发模式网络架构,可以画张图解释一下么?

zhuzhuor commented 11 years ago

@whuhacker 汗。。。回头慢慢说,我先休息去了,现在我们这里凌晨三点了。。。

tywtyw2002 commented 11 years ago

用pac的话就出现了2个问题, 第一个是代理服务器必须是传统的代理服务器,这样就无法使用sogou的代理了,需要自己去建立代理,但是自己代理的安全呢? 二,pac是基于url的,而且需要浏览器支持,这样app就无法使用了,如果浏览器不支持pac也不行了。

前面提到的dns,你的意思是,如果地址是 xxx.com 正常的解析ip是 199.0.0.1 但是我们的dns把它解析成 10。0.0.1,这个ip上面有个反向代理是吗? 自己上服务器就要考虑到一些问题,被ddos怎么办?反向代理虽然可以做acl 但是被cc或者被d 可不是盖的, dns更要考虑安全问题了。
ps:dns服务器没必要玩只能解析,用bind就好了,维护一个list,然后其他转发到google的就好了。 系统需求要求不高 256m的vps 500人同时查询还是没问题的。 就是怕被d。 还有一个问题就是用了自己的dns的话部分网站的cdn就会失效了。

android上面有个叫 proxydroid的软件,基于iptables的,可以劫持所有浏览器的数据,然后通过底层的一个服务去走代理,而且支持pac。 那个软件改改的话完全可以去使用sogou的代理。。。。

zhuzhuor commented 11 years ago

尼玛,服务还没建起来呢就遭人DoS,互联网真是不太平啊 我的域名前端还用了CloudFlare,估计攻击者是直接攻击IP地址。。。

zhuzhuor commented 11 years ago

@tywtyw2002 DNS+反向代理的方法的确不太好,现在我们直接用pac文件估计能好那么一点点...不过还是被D了 iPad我试了下可以给整个wifi设置个PAC文件,估计android也可以用 我尽量避免开发了很多东西,然后自己管不过来的情况...优先能把Chrome的部分尽善尽美就足够了

zhuzhuor commented 11 years ago

我想了个牛逼的办法让HTTP代理在PaaS平台上也能运行了

现在把Linode的那个代理服务器整个迁移到AppFog了,Linode的服务器就整个删掉了 新的PAC文件的地址是 http://yo.uku.im/proxy.pac

问题就是,依我之前的经验,AppFog的instances经常容易挂,莫名奇妙重启,都不用别人去攻击... 但是,AppFog的好处就是省得我去维护Linode服务器,作为一个 side project 应该最好不过了 另外AppFog的免费资源也非常充裕,现在我们跑了一共 7个instances * 256MB内存 * 8个node.js进程,估计作为个代理服务器应该绰绰有余了

最后附上服务器的状态页面,如果down了应该就能看到 http://stats.pingdom.com/7w8lzo3be6k1/700754

tywtyw2002 commented 11 years ago

代理用node js的效率会不会有些差呢? 并发数能支持多少呢。

尽量加一层squid,缓存下性能会高点。 不过squid的话要改源代码 或者在加一层别的代理才能支持sogou的代理

zhuzhuor commented 11 years ago

@tywtyw2002 nodejs貌似并发还可以,感觉比python和php要好一点 不过具体自己没测试过...但是应该是肯定比不过专业的squid之类的代理软件了 之前服务器端用js改写的一个原因是,很多代码都可以和chrome extension共用,并且更新比较方便

squid估计不能在这些PaaS平台上运行,得自己架设个vps之类的 我们这些服务器前端能用cloudflare的都用了cloudflare,就当作一个比较简单的缓存吧...

squid回头可以看看,如果能二次开发或者写个插件就最好了,就算不在这个项目上用的话估计回头也能在很多地方用上

scarlettDiMa commented 11 years ago

我和几个同学想做一个ipad应用,解决这个海外ip地址封锁的问题,做调查的时候发现了zhuzhuor的博客~才发现原来已经有这么完善的产品做出来啦。 刚刚试着用http://yo.uku.im/proxy.pac看了集美剧,速度还不错,也挺稳定的~学习鸟~

zhuzhuor commented 11 years ago

@scarlettDiMa 我猜你搜到的是@whuhacker的博客... 他写的挺好的,帮忙做了很多宣传和也贡献了很多代码 其实一直在完善,还有些许没解决的问题,也欢迎你们来给大家贡献代码

scarlettDiMa commented 11 years ago

啊……囧了……= = 如果有机会,我很乐意帮忙滴,只是在这方面懂得不是很多,还在上课,希望能帮上忙~

zhuzhuor commented 11 years ago

@batiatus 我刚才试了下ipad上的别的视频apps,貌似用那个pac文件都没问题,你可以试试,如果发现不能看的可以来反馈

batiatus commented 11 years ago

@zhuzhuor k 谢谢 FYI 那个pac 安卓用不了的说 (proxydroid) 要把 return direct 改成 return proxy xxxx

zhuzhuor commented 11 years ago

@batiatus 刚准备试试那个proxydroid的,发现需要root... 然后准备去手机网络设置里面找找代理设置,发现居然只能选none或者manual,没有pac文件设置的地方... 估计现在不root的话,只能自己运行本地代理了

那个return direct是指不经过代理直连的意思,你那边pac文件不能用的提示是啥

batiatus commented 11 years ago

@zhuzhuor incorrect or unsupported pac file

zhuzhuor commented 11 years ago

@batiatus 我写了个一行的pac文件,发现proxydroid也是同样的提示incorrect or unsupported pac file 怀疑是app的bug

你试试看这个Autoproxy http://goo.gl/wPDKE

zhuzhuor commented 11 years ago

写了个简单的介绍页面,其中有新的更简单的运行本地服务器的办法

http://ub.uku.im/proxy

tywtyw2002 commented 11 years ago

估计要加端口号吧

batiatus commented 11 years ago

@zhuzhuor autoproxy也不行的说 还有就是那个youku app 又挂了。 nvm 又好了

gstx commented 11 years ago

Date: Sat, 1 Dec 2012 01:05:22 -0800 From: notifications@github.com To: Unblock-Youku@noreply.github.com Subject: Re: [Unblock-Youku] ipad 上的代理 (#49)

@zhuzhuor autoproxy也不行的说

还有就是那个youku app 又挂了。

          —

          Reply to this email directly or view it on GitHub.
zhuzhuor commented 11 years ago

想到Android如果不root可以这样搞

  1. 写个android app,在后台运行个代理服务器
  2. 然后再去网络设置里手动设置一下http代理成app运行的本地的服务器

不过这样也很麻烦,最后一步需要手动设置 但是貌似这些设备都没有能够直接更改代理设置的api,应该是基于安全考虑吧 http://stackoverflow.com/questions/3629644/how-can-you-set-the-http-proxy-programatically

batiatus commented 11 years ago

提问 在安桌 把useragent改为ipad 用代理后来能在 浏览器 上看吗 ? 有安桌的麻烦试试 我不行的说

whuhacker commented 11 years ago

@batiatus 不是UA的问题。貌似在Android上压根不支持PAC

batiatus commented 11 years ago

@whuhacker 不是用pac 直接手动输入代理ip端口 setting中 不改UA的话用flash可看 改ua后就看不了

zhuzhuor commented 11 years ago

@batiatus 我回头在nexus7上试试,现在没放在身边 不过猜测应该不是flash的问题,因为ipad上也没有flash,估计所有的视频都是用html5的播放器

batiatus commented 11 years ago

@zhuzhuor 好的 补充下 改ua后看新闻之类没问题

tywtyw2002 commented 11 years ago

android 国内网站基本都不支持他 html5不会出现 都是flash 但是flash 无比卡 xoom ua搜狐可以播html5 On Dec 9, 2012 7:15 PM, "batiatus" notifications@github.com wrote:

@zhuzhuor https://github.com/zhuzhuor 好的 补充下 改ua后看新闻之类没问题

— Reply to this email directly or view it on GitHubhttps://github.com/zhuzhuor/Unblock-Youku/issues/49#issuecomment-11179785.

batiatus commented 11 years ago

忘了说 firefox for android 支持 pac 不过要进 about:config 手动设置

zhuzhuor commented 11 years ago

@batiatus 好的,感谢,非常有用的信息

zhuzhuor commented 11 years ago

@batiatus 发现android 上的 firefox 里手动设置居然是这么原始...连选项也得自己手动创建额 另外直接用 firefox 打开 youku 会提示需要安装 flash,然后点击安装的链接说不支持 orz 估计你说的改 user-agent 是不是也是需要手动设置呢... 太麻烦了... 不想搞了....

不过我试了下 android 上的 chrome youku 是可以正常播放的,前提是需要在 wifi 里面设置好代理

2012-12-10 23 38 53 2012-12-10 23 42 11

另外吐槽下 android 的代理设置功能,好搓啊,不知道是我自己使用的问题还是本身的 bug 如果连上 wifi 前就把 http 代理设置好,wifi 连接就会卡在 authentication 那一步。只好连上 wifi 之后再设置代理,然后就没有问题了 但是只要用上代理,play store 就彻底不能用了... 一直让 retry connection,但是别的 chrome 浏览器之类的访问网络都没有问题

batiatus commented 11 years ago

Dolphin 可以选useragent Chrome真的能看啊 上次试不行的说,

zhuzhuor commented 11 years ago

@batiatus 精力有限,无力针对这么多的 apps 维护代码了 如果 android 上的 chrome 能用的话,就暂时先用 chrome 吧... 不过欢迎牛人们也来这里汇报下解决办法,如果感兴趣并自行解决了可能的问题

这个 issue 就先这样关闭好了