Closed karlcheong closed 11 years ago
unblock youku路由器進階篇, 區域網絡下所有裝置全自動解鎖!
本文是 簡便unblock youku路由器 的進階應用 Dnsmasq DNS + privoxy 路由器反向代理
通過更改DNS返回的IP 把要解鎖url的域名指向privoxy架設的反向代理IP 反向代理再通過國內PROXY把結果回傳給用戶 區域網絡下所有裝置都不需任何設定就可以unblock youku
以下說明比較簡要, 但我想會一點*UNIX的都應該明白
要求: openwrt系統路由器 本人使用attitude adjustment 12.09
1 SSH進去路由, 然後輸入指令安裝 privoxy
opkg update opkg install privoxy
2 把規則文件及reverseproxysetting設定文件放到 /etc/privoxy
https://github.com/karlcheong/unblock_youku_privoxy_rules
3 輸入指令啟動 privoxy
/etc/init.d/privoxy start
(可選:)輸入指令, 使路由啟動時自動運行 privoxy 代理
/etc/init.d/privoxy enable
4 修改/etc/init.d/dnsmasq Dnsmasq啟動腳本, 在 第518行 done 的下面加上以下2句 令路由系統不使用本機運行的Dnsmasq DNS伺服器
rm -f /tmp/resolv.conf ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
即是修改成這樣子:
service_start /usr/sbin/dnsmasq -C $CONFIGFILE && {
rm -f /tmp/resolv.conf
[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
echo "search $DOMAIN" >> /tmp/resolv.conf
}
DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
for DNS_SERVER in $DNS_SERVERS ; do
echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
done
rm -f /tmp/resolv.conf ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
5 打開 /etc/privoxy/basehosts, 把里面的IP 192... 全部替換成你路由器的區域網IP
6 修改 /etc/dnsmasq.conf Dnsmasq設定文件, 加入一行新的設定 令Dnsmasq 讀取basehosts 文件
addn-hosts=/etc/privoxy/basehosts
7 重啟Dnsmasq 即可
/etc/init.d/dnsmasq reload
PS: 如果想限制privoxy只能代理需要解鎖之域名, 不代理其他網站, 請打開 /etc/privoxy/config 把 trustfile trust 前的註釋去掉即可
PPS: 一個有大量使用者的DNS反向代理應該需要2個dnsmasq緩存運行 一個監聽區域網絡的, 用來把特定域名指向反向代理 另一個監聽本機介面, 用來連接特定域名下的其他資源 不然ISP 的DNS 可能會因你DNS請求太多而暫時封鎖你IP。 (除非把連接特定域名的所有流量導向代理) 當初我只運行1個dnsmasq是我認為因為這樣不用分別管理2個dnsmasq的設定, 對於路由器用戶不多的場合更方便也夠用了。
@karlcheong 我可以给你提供个 digitalocean 的 vps 如果可能的话你在这个 vps 上弄个 dns 怎么样?我们可以试试看,不过要注意安全问题
另外想到有一些域名下面内容并不是全部都通过代理的,而且代理服务器也有权限控制 不知道你这个是怎么处理的
@zhuzhuor
權限管制 privoxy可以把web設定介面所有設定開關全部關掉 也可以把設定檔的 templdir 改掉 使web設定介面完全失效 privoxy 沒有basic密碼驗證(but, who need it in a public proxy) 但可以設定acl,指定黑名單, 也可以設定trustfile列表(白名單)
我用privoxy 重點是因為它夠小巧簡單,沒有什么dependencies, 適合個人家庭使用 架在port80 即可當成正向代理也可當作反向代理
至於用在公共反向代理得好好想想會有什么問題 1 privoxy 的URL/trust列表, DNS紀錄得自行維護, 這個還算小事 2 privoxy 沒有cache功能, 要Cache的話得chain一個帶cache的proxy 3 "有一些域名下面内容并不是全部都通过代理的" 因為DNS的限制, 所以反向代理只能把域名下的所有域名都要代理 不然客戶端的web頁面就什么都看不到/error/顯示不完全了
這對VPS的網速/流量要求比pac正向代理的要求高得多 digitalocean 的vps 我看到流量是metered的.. US$5/只有1TB的樣子
ref: http://www.privoxy.org/user-manual/ Privoxy設定說明
Latest Update: zhuzhuor 跟我 在架一台DNS + 反向代理伺服器 即將完成...
请教一下,其实 /etc/privoxy 是那里?
openwrt的檔案系統中的/etc/privoxy, 放privoxy的設定文件的 linux類型的系統的各種設置文件都放在/etc/那里的
@simonleungs 如果你現在有更多問題問的話, 可以給你的即時通信工具/EMAIL地址/facebook/twitter ..等等
谢谢你~可以怎麽找你
@simonleungs 你有沒有Skype/Facebook/QQ之類的IM號, 有問題問的就給來我加你
skype : simonleungs
你好 請問 在 /etc/privoxy 找不到basehosts的文件. 請問是在那裏
@kevinyang9999 basehosts文件在提供的reverseproxy.7z中 請自行解壓後放到路由中
SORRY,現在看到了
再問一下config中 listen-address [::]:80 -->不需要改ip與port嗎 log中錯誤 2013-10-22 23:59:47.352 77d76000 Fatal error: can't bind to :::80: Address family not support 改成 listen-address 192.168.1.1:80 log中錯誤 2013-10-23 00:15:09.722 775b5000 Fatal error: can't bind to 192.168.1.1:80: There may be another Privoxy or some other proxy running on port 80 最後改成192.168.1.1:8123 -->對嗎? log就沒錯誤了 (把其它設定 proxy:192.168.1.1 port8123)-->對吧? 謝謝囉! (有把basehosts ip改成路由器ip:192.168.1.1)
@kevinyang9999 listen-address [::]:80 是同時監聽所有介面IPv4+v6 沒安裝v6的使用listen-address 0.0.0.0:80 監聽所有介面IPv4
而listen-address 192.168.1.1:80 log中錯誤 2013-10-23 00:15:09.722 775b5000 Fatal error: can't bind to 192.168.1.1:80: There may be another Privoxy or some other proxy running on port 80 原因是路由web管理介面預設佔用了port 80 你需要把web管理介面使用的port改掉 attitude adjustment 12.09 預設使用LUCI 去編輯 /etc/config/uhttpd 把list listen_http 0.0.0.0:80 , 80改掉為其他port
要做反向代理的話,有以下地方注意 1 一定要架在port 80, 不然就成了第一個post的正向代理 2 dnsmasq 有載入我付上的hosts文件 (第5步 addn-hosts) 3 DNSmasq的啟動腳本記得修改好 (第4步 令路由器上運行的privoxy不使用本機dnsmasq), 不然就會造成privoxy不斷連接自己的死循環
(最終反向代理效果= android免root免設定代理即可unblock)
请问可以基于privoxy做一个替换优酷土豆奇艺播放器以达到去广告目的规则吗?目前使用替换方法的都是chrome插件或者油猴脚本,IE或不支持油猴脚本的没办法使用。
@xiozf
你也許可以通過privoxy 的redirect 規則來把swf, xml文件的位置轉向成你自己架設的伺服器
(沒有試過..或許你可以自己試試,
真的要去廣告在windows, linux, mac等桌面系統下還是直接安個firefox/chrome方便)
我用tomato, 没有/etc/init.d/ 怎么弄?
@zhumingvictor tomato沒玩過, 你只好自己研究下了
你好 第六步我不是很明白
6 修改 /etc/dnsmasq.conf Dnsmasq設定文件, 加入一行新的設定 令Dnsmasq 讀取basehosts 文件 addn-hosts=/etc/privoxy//basehosts
请问 addn-hosts=/etc/privoxy/basehosts 这一行加在dnsmasq.conf 哪一行 可否给个实例文件 谢谢
邮件:hihitonizhou@gmail.com
@hihitoni 加在最尾就可以了
谢谢! 因在国外,源于视频地区得限制而不能观看,太苦B了。支持。
tonizhou
在 2013-11-2,4:32,"karlcheong" notifications@github.com 写道:
@hihitoni 加在最尾就可以了
— Reply to this email directly or view it on GitHub.
謝謝!
請問"進階版"我再WIN7上騰訊的偶而會成功,優酷沒成功過一次,安卓上更慘,優酷APP的列表都看不到,想先問是規則太舊要更新嗎? 基礎版下,把路由IP與8123加到IE中當PROXY有錯誤嗎?因為我加進去就根本不能上網 每個步驟都再三確認了,應該不是都沒架起來吧?除了去看片,怎麼看有成功架起privoxy呢? 感謝回復!!!
@karlcheong 今天把路由器刷成 openwrt 試了下你的這個方法,遇到些麻煩,在重啓 DNS 服務的時候有問題,我的手機仍然不能看優酷。
最後加上的那句 addn-hosts=/etc/privoxy/basehosts 提示 not found,但是在 /etc/privoxy/basehosts 是存在的。不知何解……
@whuhacker 看樣子你把那句addn-hosts加在dnsmasq啟動腳本里了 那句是加在 /etc/dnsmasq.conf 里的
@shine12 這幾天dns代理出了點問題, 在調整中, 你急用的可以先找個國內代理放到cnforward.action那里 規則是新的沒問題
@karlcheong 確實搞錯了,我改回了重啓 DNS 沒問題了。不過又有新狀況
訪問其他頁面沒問題,只要是需要代理的頁面就會出現 No such file or directory……
另外我看到你在 cnforward.action 裏寫定了
{+forward-override{forward digito.wlmacao.tk:80}}
是因爲它死掉了嗎?我換成了上面的
{+forward-override{forward h0.edu.bj.ie.sogou.com:80} +sogou-header{Reason}}
也不行
這問題可能得把privoxy以--no-daemon運行 看看有沒有什么error出來
我也出現了端口的問題
已經把 uhttpd 的端口改成別的了,怎麼還是不能用 80 呢?
我也出現 No such file or directory..是否 文件 权限 引起? 或 程式某处 拼写 错误? 笔误?
@vingoleong 你要把uhttpd的port改掉
@whuhacker 我看了下.. 應該是設置檔中我定義的listen address為ipv6的wildcard 地址 [::]:80 而openwrt沒有安裝ipv6 stack造成.. 把listen address 改為0.0.0.0:80或者安上ipv6就可以
安装了ipv6 stack ,修改了config文件 ,filterfile default.filter 这段放到logdir /var/log 下面 ,win7网页视频正常运行,各种app不能运行 。 android电视棒 各种app正常运行, youku没有出现端口错误 ,但不能播放 ,好像连接很慢 。iphone ios6下各种app 不能运行 ,其它没有测试 。
沒裝ipv6 stack ,有改127.0.0.1:80 ,win7網頁youku無法看 ,最後播放時會有1.非中國用戶(有設ISP DNS時) 2.無法連接網頁(沒設ISP DNS時) 。android上youku app 1.沒有端口錯誤 但非中國用戶(有設ISP DNS時) 2.端口錯誤 沒列表(沒設ISP DNS時) 。用這是不是不能設DNS?
ipv6 stack該怎麼裝?http://wiki.openwrt.org/doc/howto/ipv6 跟這一樣嗎? 好難...
@shine12 我的測試結果和你一樣,應該還是 Privoxy 沒設好
DNS 解析 youku 等相關域名的時候,是根據 /etc/privoxy/basehosts 解析到路由器的局域網 IP 192.168.1.1,所以我猜測 /etc/privoxy/config 中的 listen-address [::]:80 應該改成
listen-address 192.168.1.1:80
而不是
listen-address 127.0.0.1:80
然後還是無法連接優酷的播放頁面(其他網站正常)。後來我的 privoxy 就被 kill 了,重啟都出現
There may be another Privoxy or some other proxy running on port 80
uhttp 確定不在 80 端口,已經殺掉了所有 privoxy 進程,可是我的 privoxy 都再也啟動不了了……
sorry, 應該是0.0.0.0或者路由網卡的IP才對
直接把配置写到DNSMASQ里不就得了么?弄这么费劲干什么?
@karlcheong 0.0.0.0 没问题了,之前没杀掉 privoxy 所以启动不了。
我在 --no-daemon 模式下运行,基本上几分钟之内就被系统自动 kill,难道是我的路由器硬件配置太低?我也怀疑是 privoxy 自己陷入了死循环,但是我在 dnsmasq 的启动脚本里面已经加上那两句了
rm -f /tmp/resolv.conf ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
靠,因为写错一个字母…… 终于搞定了!
@karlcheong 我建议建立一个新的 repo,把你在 dropbox 里面的配置文件也进行版本控制,毕竟文件比较零散,也可能会频繁地改动。
@karlcheong sorry, 應該是0.0.0.0或者路由網卡的IP才對。指的是哪個文件??
@vingoleong /etc/privoxy/config 中的
listen-address [::]:80
改成
listen-address 0.0.0.0:80
搞了几天都失败,有谁搞几成功的?
@karlcheong 终于成功了。谢谢。 认真地看了下代码。 有些地方搞不懂: 为什么用 Dnsmasq addn-hosts=/etc/privoxy//basehosts, 而不用 iptables 把 port 80 引向 代理 ,再在proxy 做分流?
@vingoleong 如果验证 IP 的 URL 不是 80 端口呢?
@whuhacker 不太明白你想说什么。。。是说端口改变了要手工改动设置吗?
查了下网上 做成透明代理,大都是 用 IPTABLE --dport 80 -j REDIRECT --to-ports XXX。而 karlcheong 是 代理直接使用80 。 想知道这两种做法的分别。另外 /etc/privoxy//basehosts 起的是分流作用,不在 basehosts 內的 URL 不走代理。privoxy 惯常 是 用 direct=+forward-override{forward . 分流的。惊叹 karlcheong 的创意。
@whuhacker 不在PORT 80 的HTTP流量, 可以讓privoxyr 綁定在目標port, 情況跟port80是一樣的 (privoxy 可一次綁定多個port/IP)
@vingoleong
只做透明代理, 而不做反向和DNS
一來會加重router負擔(PC那就沒所謂了),
二來出了區域網, android就不好使了(除非你打算把所有流量都導回去家中的寬頻線)
再說privoxy做反向代理只需打開一個option就行了
請問 這篇應用我成功在TOMATO實現第一部分 監聽192.168.11.1:80 想要自動解鎖 已把host文件轉成address=/v.youku.com/192.168.11.1放到Dnsmasq 無法成功解鎖 想問Dnsmasq這樣設是錯的嗎?是否一定要另外配 IPTABLE?
@shine12 我架privoxy 不需要 iptables dnsmasq你這樣設置address是可以, 但我會直接指定addn-host 附加host文件
無法成功解鎖 那是出什么問題呢?
privoxy 服務有沒有成功起動呢? 可在browser里先設定proxy 試試privoxy有沒有正常運作
privoxy監聽80接口需要root, 不然不能成功起動,
我再PC上瀏覽器或安卓手機把192.168.11.1:80當PROXY都能成功解鎖 p.p也能看到enable 應該是有成功
你說 指定addn-host 附加host文件 是指把整個從basehosts轉成的address文件全部加進去嗎? 我有這樣做 但是不行解
另外address=/v.youku.com/192.168.11.1 這個192.168.11.1是網外IP 而非網內 是嗎?還有他是走哪個port呢? 是網外的話 感覺還要加個導回的設定 曾亂加個server=192.168.11.1到Dnsmasq 結果網路整個當了XD
第4步 令路由器上運行的privoxy不使用本機dnsmasq 這個你有做好嗎? 我給的是openwrt的例子 因為tomato我也沒用過, 方式可能有點差異
你看看你路由系統resolv.conf里使用的DNS伺服器是什么呢? 或者你使用dig 也能知道目前使用的DNS伺服器
我剛剛根據 karlcheong 兄的文檔做了一遍,成功於 openwrt 上架好 privoxy + dnsmasq,測試過沒問題,特來謝謝! 希望這個 repos 可以持續更新,感激感激!
原始的resolv.conf 只有nameserver 127.0.0.1 是不是要加個192.168.11.1進去?
dnsmasq[489]: reading /cifs2/optware/resolv.conf dnsmasq[489]: using nameserver 168.95.1.1#53 dnsmasq[489]: using nameserver 8.8.8.8#53 dnsmasq[489]: using nameserver 192.168.1.1#53 dnsmasq[489]: using nameserver 2001:b000:168::1#53 dnsmasq[489]: using nameserver 2001:4860:4860::8888#53 dnsmasq[489]: using nameserver 2001:470:1f04:c8b::2#53 dnsmasq[489]: ignoring nameserver 192.168.11.1 - local interface dnsmasq[489]: ignoring nameserver 127.0.0.1 - local interface dnsmasq[489]: read /etc/hosts - 2 addresses dnsmasq[489]: read /etc/dnsmasq/hosts/hosts - 26 addresses *dnsmasq[489]: read /cifs2/optware/basehosts - 64 addresses dnsmasq-dhcp[489]: read /etc/dnsmasq/dhcp/dhcp-hosts
*開頭的是修改resolv.conf後才多出來的log
ignoring nameserver就是指不能這樣改?
開啟basehosts裡的網址 tomato就卡死了
dig在tomato不知怎麼叫出來 -sh: dig: not found
記得很久前有人就問過 在路由器如何設置Unblock Youku 後來更有一篇教程, 通過squid來達成Unblock Youku功能
對於一般家居用的路由器來說,都是基於MIPS LE(Boardcom)或MIPS BE(Atheros) unblock youku伺服器使用之Node.js對MIPS支援性很差, 很難用來運行轉發代理 而 squid 倒是可以在家用路由器運行, 不過一來squid設定複雜我不會設, 二來 我正好在 #80 中為了給Android也能解鎖, 用privoxy 運行轉發代理 可以直接把設定搬過來用, 所以這個教程使用的軟件為privoxy
要求: 已安裝OpenWRT系統的路由器
1 SSH進去路由, 然後輸入指令安裝 privoxy opkg update opkg install privoxy
2 把規則文件及basicsetting設定文件, 放到 /etc/privoxy
https://github.com/karlcheong/unblock_youku_privoxy_rules
3 輸入指令啟動 privoxy /etc/init.d/privoxy start
(可選:)輸入指令, 使路由啟動時自動運行 privoxy 代理 /etc/init.d/privoxy enable
4 把要解鎖的裝置設定代理為 路由區域網IP:8123