試試看見光了多久死hhhhhh
原理
實驗表明,我國自主研發的高科技防火牆型網絡設備(以下簡稱GFW)具有以下特徵:
- 對所有目標端口上的流量存在字符串過濾,如HTTP和明文的郵件消息
- 對443端口存在主動探測或舉報機制(具體情況不明),表現為具有包括Google、Twitter等的CN在內的證書的ip會在半個月後被牆
- 目前,GFW對非443端口上流經的HTTPS流量不存在第2條所述的措施
註:也可以是用SNI Proxy來隱藏證書,主動探測一般情況下不會使用SNI擴展來探測443端口的證書。可以使用這篇博客中提到的項目lua_resty_sniproxy。
優點
- 省電,和正常上網耗電一致,且移動設備可保持長連接在線
- 不用怕hosts文件被上傳,因為本來裏面的ip都是被牆的
- 可以與socks代理同時使用,無需切換hosts
- 適用於重度Google用戶
局限
- 運行Windows並且直接連接互聯網的設備將無法使用本方法
- 運行未root的Android設備及未越獄的iOS設備在使用移動網絡時無法使用本方法
- 必須能控制路由器或設備的上級網關的iptables設置(如刷了openwrt之類的路由器);如果路由器無法刷第三方ROM,但局域網中存在任意一台*nix設備,請參見使用非443端口轉發https流量扶牆(二)
- 只對HTTPS流量起作用,本文主要介紹Google全線服務以及Twitter的操作實例
- 覆蓋面窄,如果要覆蓋更多網站,需要更複雜的配置
步驟
- 將目標IP根據證書類型合併,即證書具有相同的DNS名稱的服務歸為一類。歸類的作用是接來下可以少寫很多iptables規則。對Google來說,只要具有泛域名為*.google.com, *.googleusercontent.com, *.googleapis.com的證書的三類IP就可以了。此處的IP不需要能夠直連。甚至可以填一個無法路由的地址,只要在接下來的iptables中對應即可;但是這樣的話,使用代理時如果使用本地解析的(無法路由的)IP,將會無法連接。
- 將以上列表填入hosts。文末給出了實例配置。如果未越獄或未root,不具有修改hosts文件的權限,可以在路由器中寫死DNS解析;但是在移動網絡下就沒有辦法了。我們假設hosts中有這樣一些項
1234574.125.224.55 www.google.com74.125.224.55 m.google.com216.58.216.14 accounts.google.com216.58.216.14 accounts.google.com.hk216.58.216.14 accounts.youtube.com - 在VPS上設置端口轉發,可以使用iptables。我使用nginx(編譯stream_module)作轉發,文末有示例配置。Ubuntu/Debian可以這樣安裝:
1$ sudo apt-get install libnginx-mod-stream - 在路由器上設置轉發規則:
12iptables -t nat -A PREROUTING -p tcp -d 74.125.224.55 --dport 443 -j DNAT --to-destination 66.66.66.66:44312iptables -t nat -A PREROUTING -p tcp -d 216.58.216.14 --dport 443 -j DNAT --to-destination 66.66.66.66:44311
其中66.66.66.66是你VPS的IP,並且將44300的入站流量轉發到74.125.224.55:443。如果是直接連接互聯網的設備(如linux的pc或移動網絡下的Android,將PREROUTING鏈改為OUTPUT):
12iptables -t nat -A OUTPUT -p tcp -d 74.125.224.55 --dport 443 -j DNAT --to-destination 66.66.66.66:44312iptables -t nat -A OUTPUT -p tcp -d 216.58.216.14 --dport 443 -j DNAT --to-destination 66.66.66.66:44311
注意如果在Android上使用Shadowsocks的NAT模式,關閉ss後需要重新設置iptables規則。
附件
- 示例hosts配置(見壓縮包或Gists)(本地)
- 示例nginx配置(VPS上)
123456789101112131415161718192021222324252627282930313233343536373839404142stream{server {listen 44310;proxy_pass tw1;}upstream tw1 {server 199.16.158.106:443;}server {listen 44311;proxy_pass gg1;}upstream gg1 {server 216.58.216.14:443;}server {listen 44312;proxy_pass gg2;}upstream gg2 {server 74.125.224.55:443;}server {listen 44313;proxy_pass gg3;}upstream gg3 {server 216.58.216.138:443;}server {listen 44314;proxy_pass gg4;}upstream gg4 {server 216.58.217.193:443;}} - 對應的iptables配置示例(路由器上)
1234567891011iptables -t nat -A OUTPUT -p tcp -d 199.16.158.106 --dport 443 -j DNAT --to-destination 66.66.66.66:44310iptables -t nat -A OUTPUT -p tcp -d 216.58.216.14 --dport 443 -j DNAT --to-destination 66.66.66.66:44311iptables -t nat -A OUTPUT -p tcp -d 74.125.224.55 --dport 443 -j DNAT --to-destination 66.66.66.66:44312iptables -t nat -A OUTPUT -p tcp -d 216.58.216.138 --dport 443 -j DNAT --to-destination 66.66.66.66:44313iptables -t nat -A OUTPUT -p tcp -d 216.58.217.193 --dport 443 -j DNAT --to-destination 66.66.66.66:44314iptables -t nat -A PREROUTING -p tcp -d 199.16.158.106 --dport 443 -j DNAT --to-destination 66.66.66.66:44310iptables -t nat -A PREROUTING -p tcp -d 216.58.216.14 --dport 443 -j DNAT --to-destination 66.66.66.66:44311iptables -t nat -A PREROUTING -p tcp -d 74.125.224.55 --dport 443 -j DNAT --to-destination 66.66.66.66:44312iptables -t nat -A PREROUTING -p tcp -d 216.58.216.138 --dport 443 -j DNAT --to-destination 66.66.66.66:44313iptables -t nat -A PREROUTING -p tcp -d 216.58.217.193 --dport 443 -j DNAT --to-destination 66.66.66.66:44314
沙發然而木有能刷固件的路由器,你覺得網件的4300怎麼樣?
不清楚,看配置還不錯 都可以跑python了hhhhh
from: 使用非443端口轉發https流量扶牆(二) ; 論野生技術&二次元
渣渣FAST FW300R 路過
nginx配置對應的 iptables配置示例,這裡的 iptables是本地路由器的配置吧
是的,我沒寫清楚,改一下