翻牆網 ATGFW.ORG
Across The Great FireWall, We Can Reach Every Corner In The World.
Latest Post

开源翻墙工具:萤火虫 FireFly Proxy

Written By Guests Zhen on 2014/11/22 | 22.11.14

内置TOR的meek流量混淆技术,可通过默认浏览器直接翻墙,支持HTTP(s)和SOCKS5协议,可自定goagent等http代理、SSH和Shadowsocks账号(需要自备)。

支持黑名单/白名单(自动更新),墙内直通,墙外自动翻墙,浏览器建议使用FireFox或Chrome,无需安装翻墙插件。

支持Windows系统,操作说明和设置界面为中文,自动解压缩到桌面并生成快捷方式,纯绿色,删除文件即卸载。
A proxy software specifically designed to help circumventing the Great Firewall.

项目页:https://github.com/yinghuocho/firefly-proxy

下载地址:https://github.com/yinghuocho/firefly-proxy/archive/master.zip

轉載來源:http://www.chinagfw.org/2014/11/firefly-proxy.html

不懂代码也会写HOST!(二)如何找出WINDOWS和ANDROID应用程序所使用的域名

  • Windows
对于一般的Windows应用程序来说,Chrome的方法自然是没用。说到底,找域名的终极方法就是想办法把网络访问日志抓出来,那么我们就可以想想,Windows下有什么可以抓日志的软件呢?不少防火墙都有日志功能,但还得再装个软件……这里有个更简单的方法,而且不少经常翻墙的朋友都有安装,我们可以马上拿来用,就是GoAgent。
首先想办法让你的GoAgent能够正常使用,不管是改配置文件甚至是在VPN后跑GoAgent都可以。
然后就是想办法让你的目标应用程序跑在GoAgent下。大多数Windows应用程序都支持设定代理服务器,或者干脆使用IE代理:
然后让你的目标应用程序跑起来,GoAgent就会输出日志:

(屏蔽了一些可能泄露隐私的东西。)
从日志中可以清楚地看到应用程序所使用的域名,记录下来——可能需要手打。若日志跑得太快,请配合截图。
  • Android
早些时候我都是靠抓包来出Android域名表的,后来实在受不了了,便公开征求了一下方案,有人推荐了“AdAway”,中文名叫“广告走开”——很多朋友也使用它同步Host文件。
那么首先在你的Android设备上安装AdAway:GitHub(源码)F-droid(应用市场)酷安(应用市场)。记住,这货需要ROOT。
以下使用民间汉化版作介绍,英文版请自己对照。首先打开AdAway,在菜单里选择“记录DNS请求”:
然后启动TCPdump:
启动完毕后,便可以让它在后台默默运行了。这时我们回到启动器,随便启动一个被墙的APP比如FaceBook或者Twitter之类。当然,如果你没有翻墙的话,是运行不起来的。这时我们回到AdAway,打开日志文件:
域名出来了。
需要注意的是:1,这里只会记录DNS请求,如果一个域名已经在host里有对应的IP,那么系统是不会进行DNS请求的,TCPdump也不会记录。2,过程虽然简单,但收集一个APP完整的所需域名的清单,可能需要你多次重启手机,请务必保持耐心
  • 拾遗
一些收集域名中可能用到的小技巧会写在这里,未来可能会有更新:
当你看到一个域名,比如clients2.google.com,那么你应该会想到还有clients1.google.com或者clients3.google.com,在墙外Ping一下试试能不能解析。
两个监控网络的小工具,我一直在用,功能值得大家探索:Windows上的IP雷达,Android上的OS Monitor。虽然同类软件有很多,但这两个免费,小巧,不流氓。

原始地址:http://wp.me/p3p7E3-Js

利用goagent更新Chrome简单方法

Written By Guests Zhen on 2014/11/20 | 20.11.14

Chrome自动更新的网址目前被墙,正常情况下无法更新版本。Chrome更新时系统后台运行GoogleUpdate程序进行版本检测和在线更新,此程序无法识别我们通常在Chrome代理扩展中设置的代理,但可正常识别系统中的IE代理。需要更新Chrome时,右键托盘中goagent图标,将IE代理设置为8086端口或8087端口的goagent代理即可。

最新版本的goagent已修复拨号网络无法设置IE代理的BUG,拨号网络和局域网两种方式均可正常设置IE代理。

來源:http://www.faith.ga/3116.html

朴素VPN:一个纯内核级静态隧道 一种VPN新玩法

由于路由管控系统的建立,实时动态黑洞路由已成为最有效的封锁手段,TCP连接重置和DNS污染成为次要手段,利用漏洞的穿墙方法已不再具有普遍意义。对此应对方法是多样化协议的VPN来抵抗识别。这里介绍一种太简单、有时很朴素的“穷人VPN”。

朴素VPN只需要一次内核配置(Linux内核),即可永久稳定运行,不需要任何用户态守护进程。所有流量转换和加密全部由内核完成,原生性能,开销几乎没有。静态配置,避免动态握手和参数协商产生指纹特征导致被识别。并且支持NAT,移动的内网用户可以使用此方法。支持广泛,基于L2TPv3标准,Linux内核3.2+都有支持,其他操作系统原则上也能支持。但有两个局限:需要root权限;一个隧道只支持一个用户。

朴素VPN利用UDP封装的静态L2TP隧道实现VPN,内核XFRM实现静态IPsec。实际上IP-in-IP隧道即可实现VPN,但是这种协议无法穿越NAT,因此必须利用UDP封装。内核3.18将支持Foo-over-UDP,在UDP里面直接封装IP,与静态的L2TP-over-UDP很类似。

创建一个朴素VPN

公共设置

modprobe l2tp_eth
SERVER_IP=xxx.xxx.xxx.xxx SERVER_IF=eth0 CLIENT_IP=192.168.1.2 SESSION=0xdeadbeef COOKIE=baadc0defaceb00c
服务器

iptables -t nat -A INPUT -i $SERVER_IF -p udp --dport 5353 -m u32 --u32 '0>>22&0x3C@12 = 0xdeadbeef && 0>>22&0x3C@16 = 0xbaadc0de && 0>>22&0x3C@20 = 0xfaceb00c' -j SNAT --to-source 10.53.0.255:6464
ip l2tp add tunnel local $SERVER_IP remote 10.53.0.255 tunnel_id 1 peer_tunnel_id 1 encap udp udp_sport 5353 udp_dport 6464
ip l2tp add session tunnel_id 1 session_id $SESSION peer_session_id $SESSION cookie $COOKIE peer_cookie $COOKIE
ip addr add 10.53.0.1 peer 10.53.0.2 dev l2tpeth0
ip link set l2tpeth0 up mtu 1480
iptables -t nat -A POSTROUTING -o $SERVER_IF -s 10.53.0.2 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
客户端

ip l2tp add tunnel local $CLIENT_IP remote $SERVER_IP tunnel_id 1 peer_tunnel_id 1 encap udp udp_sport 6464 udp_dport 5353
ip l2tp add session tunnel_id 1 session_id $SESSION peer_session_id $SESSION cookie $COOKIE peer_cookie $COOKIE
ip addr add 10.53.0.2 peer 10.53.0.1 dev l2tpeth0
ip link set l2tpeth0 up mtu 1480
ip route add 8.8.8.8 via 10.53.0.1
完成了!测试:(创建隧道后ARP启动也许会等几秒。)

user@client$ ping 10.53.0.1
PING 10.53.0.1 (10.53.0.1) 56(84) bytes of data.
64 bytes from 10.53.0.1: icmp_seq=1 ttl=64 time=154 ms
[...]
user@client$ dig twitter.com @8.8.8.8 +short
199.59.148.82
199.59.150.7
199.59.148.10
199.59.150.39
链路无污染!分步解释:

端口5353、6464可自定义成比如端口53。服务器端口必须公网可访问,客户端可以在NAT内网里。服务端VPN内地址为10.53.0.1,客户端为.2。SESSION和COOKIE一起组成一个32+64位的密码。
服务端验证这个密码然后设置SNAT。因此,同时只能有一个用户使用这个VPN。
服务端创建静态L2TP隧道l2tpeth0
服务端设置转发
客户端创建静态L2TP隧道l2tpeth0(NAT内网可)
客户端设置路由(全局路由见下)
安全性

关于协议识别,由于自定义的端口,静态的配置,没有任何动态的握手和参数协商过程,基于指纹的协议识别很难获得任何结果。(见下面附录的封包结构。)流量分析仍然有可能识别出某种特征,但是这种小众协议应该不容易成为目标。

关于加密,目前这个隧道未采用加密。我相信不太可能对任意端口的UDP都做深度检测。如果需要的话,可以看下面在隧道内进行IPsec加密的方法。

内核的L2TP隧道需要固定一个唯一的远程地址和端口,导致一个VPN只能有一个用户(多用户VPN的都是用户态实现的)。因此我们需要把NAT后的移动IP地址翻译回成固定地址和端口(10.53.0.255:6464)。为了防止拒绝服务,需要在SNAT的时候进行一个简易的认证,使用了L2TP的session id和cookie作为96位的密码。conntrack -L -p udp可以查看是哪个IP地址连接上了。如果用户的地址变了,要等到老SNAT连接记录超时注销(默认是三分钟)才能从新的地址连接,加速这个过程可以ssh登录然后conntrack -D -p udp -s $OLD_CLIENT_IP清除老地址。Foo-over-UDP没有这96位的字段可以用来当作密码,所以认证需要使用另外的状态会略麻烦一些。

客户端路由问题

可以设置全局VPN,如:

ip route add `ip route | sed -n "s/^default/$SERVER_IP/p"`
ip route add 0.0.0.0/1 via 10.53.0.1
ip route add 128.0.0.0/1 via 10.53.0.1
也可以使用chnroutes这类精细方案。

加密的朴素VPN(可选)

接着上面的设置,运行如下命令配置内核XFRM框架,实现一个朴素的静态IPsec隧道。

加密内网服务端地址为10.53.1.1,客户端为.2。安全关联参数spi 102及其静态密钥0xc0de0102和另外一组参数都可改。

服务端创建加密隧道ipsec0

ip tunnel add ipsec0 mode ipip local 10.53.0.1 remote 10.53.0.2 dev l2tpeth0
ip addr add 10.53.1.1 peer 10.53.1.2 dev ipsec0
ip link set ipsec0 up
ip xfrm state add src 10.53.0.1 dst 10.53.0.2 proto esp spi 102 enc blowfish 0xc0de0102
ip xfrm state add src 10.53.0.2 dst 10.53.0.1 proto esp spi 201 enc blowfish 0xc0de0201
ip xfrm policy add dev l2tpeth0 dir out tmpl proto esp spi 102
ip xfrm policy add dev l2tpeth0 dir in tmpl proto esp spi 201
iptables -t nat -A POSTROUTING -o eth1 -s 10.53.1.2 -j MASQUERADE
客户端创建加密隧道ipsec0

ip tunnel add ipsec0 mode ipip local 10.53.0.2 remote 10.53.0.1 dev l2tpeth0
ip addr add 10.53.1.2 peer 10.53.1.1 dev ipsec0
ip link set ipsec0 up
ip xfrm state add src 10.53.0.2 dst 10.53.0.1 proto esp spi 201 enc blowfish 0xc0de0201
ip xfrm state add src 10.53.0.1 dst 10.53.0.2 proto esp spi 102 enc blowfish 0xc0de0102
ip xfrm policy add dev l2tpeth0 dir out tmpl proto esp spi 201
ip xfrm policy add dev l2tpeth0 dir in tmpl proto esp spi 102
ip route del 8.8.8.8
ip route add 8.8.8.8 10.53.1.1
关闭VPN

如果没有设置IPsec,可以忽略#ipsec之后的命令。

服务端

iptables -t nat -D INPUT -i eth1 -p udp --dport 5353 -m u32 --u32 '0>>22&0x3C@12 = 0xdeadbeef && 0>>22&0x3C@16 = 0xbaadc0de && 0>>22&0x3C@20 = 0xfaceb00c' -j SNAT --to-source $DUMMY_IP:6464
iptables -t nat -D POSTROUTING -o $SERVER_IF -s 10.53.0.2 -j MASQUERADE
#ipsec
ip xfrm state del src 10.53.0.1 dst 10.53.0.2 proto esp spi 102
ip xfrm state del src 10.53.0.2 dst 10.53.0.1 proto esp spi 201
ip xfrm policy del dev l2tpeth0 dir out
ip xfrm policy del dev l2tpeth0 dir in
iptables -t nat -D POSTROUTING -o $SERVER_IF -s 10.53.1.2 -j MASQUERADE
客户端

ip route del $SERVER_IP
#ipsec
ip xfrm state del src 10.53.0.2 dst 10.53.0.1 proto esp spi 201
ip xfrm state del src 10.53.0.1 dst 10.53.0.2 proto esp spi 102
ip xfrm policy del dev l2tpeth0 dir out
ip xfrm policy del dev l2tpeth0 dir in
公共

ip tunnel del ipsec0
ip l2tp del tunnel tunnel_id 1
附录

未加密的隧道客户端tcpdump监听curl google.com能看到以下封包结构:

Internet Protocol Version 4, Src: 192.168.1.2, Dst: xxx.xxx.xxx.xxx
User Datagram Protocol, Src Port: 59126, Dst Port: 5353
Layer 2 Tunneling Protocol version 3
    Packet Type: Data    Message Session Id=0xdeadbeef
    Reserved: 0x0000
    Session ID: 0xdeadbeef
    Cookie: baadc0defaceb00c
Default L2-Specific Sublayer
Ethernet II, Src: xx:xx:xx:xx:xx:xx, Dst: xx:xx:xx:xx:xx:xx
Internet Protocol Version 4, Src: 10.53.0.2, Dst: 74.125.226.166 (google.com)
Transmission Control Protocol, Src Port: 39057, Dst Port: 80, Seq: 1, Ack: 1, Len: 74
Hypertext Transfer Protocol
Foo-over-UDP隧道与静态L2TP隧道非常类似,区别只是UDP里面没有封装L2TP包头和以太包头:

modprobe fou
# on the server
ip fou add port 5353 ipproto 4
iptables -t nat -A INPUT -i eth0 -p udp --dport 5353  -j SNAT --to-source 10.53.0.255:6464
ip link add udptun0 type ipip local $SERVER_IP remote 10.53.0.255 encap fou encap-sport 5353 encap-dport 6464
ip addr add 10.53.0.1 peer 10.53.0.2 dev udptun0
ip link set udptun0 up
[...]

# on the client
ip fou add port 6464 ipproto 4
ip link add udptun0 type ipip local $CLIENT_IP remote $SERVER_IP encap fou encap-sport 6464 encap-dport 5353
ip addr add 10.53.0.2 peer 10.53.0.1 dev udptun0
ip link set udptun0 up
[...]
轉載自:http://www.chinagfw.org/2014/11/vpn-vpn.html
原地址:https://gist.github.com/klzgrad/5661b64596d003f61980

不懂代码也会写HOST!(一)利用CHROME找出被屏蔽的网站域名

首先要说的是,本篇文章适用于计算机初学者——有一定基础,但代码苦手。诚然,若是会一点代码,干这些事情会方便很多。但我的目的是希望能够更多的人翻墙——从imouto.host开始到现在,这个想法,始终未变。
一般来说,若是你撞墙了,一般会是这个样子:
或是这个样子:
那么若是想通过Host大法破解,第一步则是需要找到被干掉的域名。当然,你若是会抓包,甚至会架代理服务器之类的,那么不管什么设备,分析出域名访问都轻而易举——当然您也不必往下看了。既然是给计算机初学者的教程,自然就来点简单的。
如果这个网页完全无法打开——就如本篇文章开篇的效果一样,很明显,你知道就是那个域名被干掉了。这个大家都知道。比如你看到了“由于 google.com 响应时间过长……”那么你就会把 google.com加入到你的Host域名表中了。
当你通过Host解决了这一个域名之后,F5刷新,你会发现,页面打开得并不完整,或者速度很慢——这是因为,一个页面中包含了很多元素,但这些元素往往都是放在了不同的域名中,那么如何找出当前页面中所有需要写入Host的域名呢?让我们在Chrome下按下F12键呼出控制台,选择NetWork标签,再按下Ctrl+F5(忽略缓存强制刷新):
你可以看到,被红色高亮的,就是页面中载入错误的元素。复制载入错误的元素的URL,就可以得到被墙的域名。比如这里的两个域名就是 s0.wp.com 和 stats.wp.com 。同时,通过分析Status一栏的错误代码你可以得知载入错误的原因(比如若是404的话其实真的就是服务器反馈页面未找到,若是真被墙了不会有404反馈的),大家可以访问维基百科中HTTP状态码的词条来学习更多的知识。顺便:点击Status标题栏可以排序HTTP状态码,让当前页面载入错误的元素排至最前端。
这个步骤往往在你制作Host的过程中要重复多次,随着页面元素一点一点的被Host修复,另外一些页面元素载入错误也会随之浮出,请保持耐心。
下面讲一个进阶的方法,是我在制作维基百科Host段过程中发现的,希望大家能够做到举一反三。
首先在Chrome下查看某个网站的证书,在点击“证书信息”:








然后点击:详细信息→使用者备用名称:
看到下面那个框了吗?统统复制!这个招数在未来,在分析某个IP承载了哪些域名时,也会用到。
原始地址:https://goo.gl/TxFk8V BY 看海的狐狸









COW:简化穿墙的 HTTP 代理更新至 V0.9.4 新的加密算法“rc4-md5”


COW (Climb Over the Wall) proxy

COW 是一个简化穿墙的 HTTP 代理服务器。它能自动检测被墙网站,仅对这些网站使用二级代理。
当前版本:0.9.4 CHANGELOG Build Status
欢迎在 develop branch 进行开发并发送 pull request :)

功能

COW 的设计目标是自动化,理想情况下用户无需关心哪些网站无法访问,可直连网站也不会因为使用二级代理而降低访问速度。
  • 作为 HTTP 代理,可提供给移动设备使用;若部署在国内服务器上,可作为 APN 代理
  • 支持 HTTP, SOCKS5, shadowsocks 和 cow 自身作为二级代理
    • 可使用多个二级代理,支持简单的负载均衡
  • 自动检测网站是否被墙,仅对被墙网站使用二级代理
  • 自动生成包含直连网站的 PAC,访问这些网站时可绕过 COW

快速开始

安装:
  • OS X, Linux (x86, ARM): 执行以下命令(也可用于更新)
    curl -L git.io/cow | bash
    
    • 环境变量 COW_INSTALLDIR 可以指定安装的路径,若该环境变量不是目录则询问用户
  • Windows: 点此下载
  • 熟悉 Go 的用户可用 go get github.com/cyfdecyf/cow 从源码安装
编辑 ~/.cow/rc (Linux) 或 rc.txt (Windows),简单的配置例子如下:
#开头的行是注释,会被忽略
# 本地 HTTP 代理地址
# 配置 HTTP 和 HTTPS 代理时请填入该地址
# 或者在自动代理配置中填入 http://127.0.0.1:7777/pac
listen = http://127.0.0.1:7777

# SOCKS5 二级代理
proxy = socks5://127.0.0.1:1080
# HTTP 二级代理
proxy = http://127.0.0.1:8080
proxy = http://user:password@127.0.0.1:8080
# shadowsocks 二级代理
proxy = ss://aes-128-cfb:password@1.2.3.4:8388
# cow 二级代理
proxy = cow://aes-128-cfb:password@1.2.3.4:8388
使用 cow 协议的二级代理需要在国外服务器上安装 COW,并使用如下配置:
listen = cow://aes-128-cfb:password@0.0.0.0:8388
完成配置后启动 COW 并配置好代理即可使用。

详细使用说明

配置文件在 Unix 系统上为 ~/.cow/rc,Windows 上为 COW 所在目录的 rc.txt 文件。 样例配置 包含了所有选项以及详细的说明,建议下载然后修改。
启动 COW:
  • Unix 系统在命令行上执行 cow & (若 COW 不在 PATH 所在目录,请执行 ./cow &)
    • Linux 启动脚本,如何使用请参考注释(Debian 测试通过,其他 Linux 发行版应该也可使用)
  • Windows
    • 双击 cow-taskbar.exe,隐藏到托盘执行
    • 双击 cow-hide.exe,隐藏为后台程序执行
    • 以上两者都会启动 cow.exe
PAC url 为 http://<listen address>/pac,也可将浏览器的 HTTP/HTTPS 代理设置为 listen address使所有网站都通过 COW 访问。
使用 PAC 可获得更好的性能,但若 PAC 中某网站从直连变成被封,浏览器会依然尝试直连。遇到这种情况可以暂时不使用 PAC 而总是走 HTTP 代理,让 COW 学习到新的被封网站。
命令行选项可以覆盖部分配置文件中的选项、打开 debug/request/reply 日志,执行 cow -h 来获取更多信息。

手动指定被墙和直连网站

一般情况下无需手工指定被墙和直连网站,该功能只是是为了处理特殊情况和性能优化。
~/.cow/blocked 和 ~/.cow/direct 可指定被墙和直连网站(direct 中的 host 会添加到 PAC):
  • 每行一个域名或者主机名(COW 会先检查主机名是否在列表中,再检查域名)
    • 二级域名如 google.com 相当于 *.google.com
    • com.hkedu.cn 等二级域名下的三级域名,作为二级域名处理。如 google.com.hk 相当于*.google.com.hk
    • 其他三级及以上域名/主机名做精确匹配,例如 plus.google.com

技术细节

访问网站记录

COW 在 ~/.cow/stat json 文件中记录经常访问网站被墙和直连访问的次数。
  • 对未知网站,先尝试直接连接,失败后使用二级代理重试请求,2 分钟后再尝试直接
  • 直连访问成功一定次数后相应的 host 会添加到 PAC
  • host 被墙一定次数后会直接用二级代理访问
    • 为避免误判,会以一定概率再次尝试直连访问
  • host 若一段时间没有访问会自动被删除(避免 stat 文件无限增长)
  • 内置网站列表和用户指定的网站不会出现在统计文件中

COW 如何检测被墙网站

COW 将以下错误认为是墙在作怪:
  • 服务器连接被重置 (connection reset)
  • 创建连接超时
  • 服务器读操作超时
无论是普通的 HTTP GET 等请求还是 CONNECT 请求,失败后 COW 都会自动重试请求。(如果已经有内容发送回 client 则不会重试而是直接断开连接。)
用连接被重置来判断被墙通常来说比较可靠,超时则不可靠。COW 每隔半分钟会尝试估算合适的超时间隔,避免在网络连接差的情况下把直连网站由于超时也当成被墙。 COW 默认配置下检测到被墙后,过两分钟再次尝试直连也是为了避免误判。
如果超时自动重试给你造成了问题,请参考样例配置高级选项中的 readTimeoutdialTimeout 选项。

限制

  • 不提供 cache
  • 不支持 HTTP pipeline(Chrome, Firefox 默认都没开启 pipeline,支持这个功能容易增加问题而好处并不明显)

致谢

贡献代码:
  • @tevino: http parent proxy basic authentication
  • @xupefei: 提供 cow-hide.exe 以在 windows 上在后台执行 cow.exe
  • @sunteya: 改进启动和安装脚本
  • @fzerorubigd: identify blocked site by HTTP error code
Bug reporter:
  • GitHub users: glacjay, trawor, Blaskyy, lucifer9, zellux, xream, hieixu, fantasticfears, perrywky, JayXon, graminc, WingGao, polong, dallascao, luosheng
  • Twitter users: 特别感谢 @shao222 多次帮助测试新版并报告了不少 bug, @xixitalk
@glacjay 对 0.3 版本的 COW 提出了让它更加自动化的建议,使我重新考虑 COW 的设计目标并且改进成 0.5 版本之后的工作方式。

 
Creative Commons License
翻牆網 ATGFW.ORG 收集整理。