翻墙的原理与实践

Tags: others  network 

目录

摘要

docker、rocket等需要编译时需要下载的一些网址国内无法访问. 需要找翻墙方法,真心无聊…

技术分析

猜测大概有这么几种封锁方式:

域名劫持:
	
	原理: 截获到一个查询被封锁域名的IP地址的DNS报文, 构造一个虚假的DNS回应包, 阻止用户获得正确的IP地址。
	破解: 在本地设置host,直接配置域名对应的IP地址,这样就不会产生dns报文。
	效果: 因为墙会直接封锁IP, 所以需要不断的去找没有墙封锁的IP。

深度包检测DPI:

	原理: 通过深度检测报文, 当发现报文命中了封锁条件后, 直接将连接重置。
	破解: 使用加密协议。
	效果: 被访问的对象需要支持加密访问, 而且它的IP没有被封锁。

IP封锁:

	原理: 直接阻止对特定IP的访问。
	破解: 使用一个没有被封锁的IP做代理。
	效果: OK。

“墙”在封锁的时候是多种手段一起应用,而且功能越来越强大, 上面提到的破解方法如果单一使用很容易失效。

最可靠的方法是在墙上打洞, 只要我们可以访问墙外的一个节点,就可以通过这个节点看到整个墙外的世界。

这个节点可以是你自己搭建的(租赁一台墙外的主机)、免费/收费的sock4/5代理free proxy、VPN服务商的节点。

你自己与节点之间通信毫无疑问必须是加密的才能躲过“深度包检测”。

但是还存在一个问题,如果“墙”的管理员通过某种方式知道被用来翻墙的境外的节点IP,那么他就可以把这个IP封锁。因此节点的选择需要策略:

1. 自建节点,只有自己使用,目标小,不容易被发现。

2. 使用不能封锁的节点, 比如vpn服务商的节点IP, 牵涉面巨大, 不会被轻易封锁。

3. 游击战, 搜集大量的墙外节点,被封锁了,就换一个。

洞的开凿

姿势1 - 免费web代理

百度上搜免费的web代理,耐心的话会找到。但是现在他们已经越来月不厚道了,各种跳转,就是不干事情,而且只能刷网页。

不要跟我谈收费的…

姿势2 - 免费的VPN

Windows上用起来更方便一些,一般没什么问题,所有的程序都可以使用,不过貌似敏感的时候VPN服务商也会被屏蔽….

不要跟我谈收费的…

姿势3 - 免费的sock4/5代理

http://www.socks-proxy.net/。Sock代理真心是个好东西,可是免费又稳定的不好找。

不要跟我谈收费的…

姿势4 - 自建

可以在国外找台机器,搭建个sock服务器或者使用ssh隧道。现在各大云服务商不都是提供免费体验吗。。。

洞的使用

web在线代理、vpn等就不用说了,直接用就可以了。重点是sock代理怎样用。

在Linux上一些应用程序本身就支持代理, 例如wget:

ENVIRONMENT
   Wget supports proxies for both HTTP and FTP retrievals.  The standard way to specify proxy location, which
   Wget recognizes, is using the following environment variables:

   http_proxy
   https_proxy
       If set, the http_proxy and https_proxy variables should contain the URLs of the proxies for HTTP and
       HTTPS connections respectively.

   ftp_proxy
       This variable should contain the URL of the proxy for FTP connections.  It is quite common that
       http_proxy and ftp_proxy are set to the same URL.

   no_proxy
       This variable should contain a comma-separated list of domain extensions proxy should not be used for.
       For instance, if the value of no_proxy is .mit.edu, proxy will not be used to retrieve documents from
       MIT.

设置环境变量http_proxy和https_proxy, 这些程序的通信数据就可以通过代理地址传输。

假设代理服务器地址192.168.1.1, 端口8080, 用户名easwy, 密码123456:
	export http_proxy=http://easwy:[email protected]:8080
	export ftp_proxy=http://easwy:[email protected]:8080

如果应用程序本身就不支持代理,在Linux上可以使用tsocks或者csocks

tsocks使用:

install:

	apt-get install tsocks

manual:

	man 1 tsocks
	man 5 tsocks.conf
	man 8 tsocks

在/etc/tsocks.conf中配置好代理服务器的地址后,使用tsocks启动目标程序:

	tsocks  YourProgram

这时候YourProgram的所有网络通信都会通过配置的代理服务器转发。

自建洞实例

SSH Tunneling

SSH隧道的使用

对于翻墙来说只需要运行下面命令,就在本地设置了一个代理:

ssh -p 节点ssh服务的端口 -C -f -N -g -D 本地的代理端口  root@节点IP

用灵雀云创建SSH隧道翻墙

Go Agent

Ubuntu/Linux下GoAgent翻墙

参考

  1. http://igfw.net/archives/2426 “Linux下翻墙方法汇总”

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球