2009年11月10日星期二

[GFW BLOG] 关于ssh -D翻墙分享的一些遗补(附pac文件的改进探索)

来源:http://honeonet.spaces.live.com/blog/cns!15BAC1A170471DB!15093.entry

我曾在过去的文章中提到过,由于购买的商业ssh服务器大多数只允许一个用户在一个机器上登录,因此如果你家里有超过2个电脑需要翻墙,又或者你的 iPhone或者iPod touch、PSP等和你的电脑位于同一个无线路由器下,你希望你的设备同样能分享主机的ssh -D连接。

前 文中我写到可以把代理服务器指向你已经创建ssh -D代理的主机,这样做在我的VM虚拟机里面是能够分享到宿主机Mac上的ssh -D连接。但是上个星期我购买了一款叫做Simplenote的软件,正当我想要同步Mac上的笔记到iPod touch上的时候发现同步失败。经过研究发现Simplenote同步需要连接Google appspot服务器,然而appspot在我所在的区域已经被“墙歼”了,于是我尝试在iPod touch上分享我Mac上的ssh -D连接,意外地失败了。测试手上的P1i通过wifi分享来自Mac上的ssh -D连接,同样失败。经过一番折腾,发现原来ssh -D默认是不响应来自远程主机发起的连接的,如果确实需要分享,你需要在ssh -D后面再加上一个-g的参数,如:

ssh -D 7070 -g username@ssh.yourdomain.com

用这个参数创建的连接能够顺利把ssh -D的代理分享出去,当然了,你可能还会遇到pac文件的烦恼,毕竟每个人所要求翻墙访问的站点都不同。下面我分享一下我的pac文件的写法:

// Flora AntiGFW PAC
// Version 5.0
// by LeaskH.com
// i@leaskh.com

function FindProxyForURL(url, host)
{
    // AntiGFW
    var arrStrGFWSites = [
        "appspot.com",
        "honeonet.spaces.live.com",
        "blogger.com",
        "blogspot.com",
        "w3schools.com",
        "box.net",
        "bit.ly",
        "j.mp",
        "vimeo.com",
        "mediafire.com",
        "wordpress.com",
        "tistory.com",
        "aol.com",
        "aim.com",
        "bebo.com",
        "cnn.com",
        "hellotxt.com",
        "dougscripts.com",
        "iphone-dev.org",
        "dailymotion.com",
        "yylyyl.co.cc",
        "googlevideo.com",
        "imageshack.us",
        "cafepress.com",
        "twitterfeed.com",
        "hotspotshield.com",
        "youtube.com",
        "twitpic.com",
        "mckaywei.com",
        "mimima.com",
        "no-ip.com",
        "oikos.com.tw",
        "////",
        "ytimg.com",
        "sesawe.net",
        "freemorenews.com",
        "theappleblog.com",
        "chinagfw.org",
        "chinadigitaltimes.net",
        "dropbox.com",
        "facebook.com",
        "s.leaskh.com",
        "sites.weborigin.co.nz",
        "docs.weborigin.co.nz",
        "calendar.weborigin.co.nz",
        "google.com/search?*twitter",
        "google.com/search?*@",
        "google.com/search?*youtube",
        "sites.leaskh.com",
        "docs.leaskh.com",
        "openvpn.net",
        "simplenoteapp.com",
        "code.leaskh.com",
        "moderator.leaskh.com",
        "calendar.leaskh.com",
        "mail.weborigin.co.nz",
        "mail.leaskh.com",
        "yfrog.com",
        "viewmorepics.myspace.com",
        "messaging.myspace.com",
        "
http://*twitter.com"
    ];
    // Block unsafe sites
    var arrStrUNSSites = ["74.55.154.140"];
    var strActProxy = "DIRECT";
    for(var iAS = 0; iAS < arrStrGFWSites.length; iAS++)
    {
        if(shExpMatch(url.toLowerCase(), "*" + arrStrGFWSites[iAS].toLowerCase() + "*"))
        {
            switch (myIpAddress())
            {

                // When I using Virtual Machine
                case "172.16.49.133":   // My Virtual Machine’s IP

                    strActProxy = "PROXY 127.0.0.1:8118";   // My Privoxy Proxy on VM shared from Mac’s ssh -D
                break;
                // When I using iPod touch
                case "10.0.1.253":   // My iPod touch’s IP
                    strActProxy = "SOCKS 10.0.1.254:7070";  // My iPod touch can visit my My by this IP
                break;
                // When I using Mac
                default:
                    strActProxy = "SOCKS 127.0.0.1:7070";  // My real ssh –D
                break;
            };
        };
    };
    for(var iAS = 0; iAS < arrStrUNSSites.length; iAS++)
    {
        if(shExpMatch(url.toLowerCase(), "*" + arrStrUNSSites[iAS].toLowerCase() + "*"))
        {
            strActProxy = "PROXY honeonet.spaces.live.com";  // Input a site which is already blocked by GFW
        };
    };
    return strActProxy;
};

以上就是我的pac脚本,应该说用pac分配代理服务器是非常便利和强大的。pac配合ssh -D简直就是“奔向自由”的两件神器。我的pac主要有如下特点:

  1. 通过单独一个pac文件,管理你所有设备的代理服务器,不再需要为每个不同的设备配置不同的pac文件了;
  2. 把Twitter的适配URL写为:http://*twitter.com,区别于网上的写法,因为Twitter是能够通过https访问的(改host),当我们通过https访问的时候,我们不需要通过代理,对于Tiwtter重度使用者,这样能够节省下很大程度的ssh流量,这样写只有使用普通http协议访问的时候才会通过代理;
  3. 引入 google.com/search?*twitter 的写法,就是当你的Google搜索关键字包含“Twitter”的时候,也通过代理访问Google,这个写法是很有用的,当然了根据实际用途,你要把“Twitter”改为你关心的,被和谐了的关键字哦,例如“六四”等等(不许联想)。
  4. 引入 //// 的写法,就是加入一个网站你突然访问不到,你可以在URL地址后面加////,然后再尝试打开,那么这个地址就会通过代理访问了,那就不需要每次都改pac文件才知道站点是不是被墙了,十分便利哦;
  5. 引 入 google.com/search?*@ 的写法,由于Google出于私隐保护的需要,Email地址中的@符号是不会被Google索引的,所以@在搜索关键字中会被自动忽略,利用这一特性, 我们在搜索一个敏感关键字的时候在关键字中插入一个@符号,那么就会自动通过代理访问Google了,由于Google会自动忽略@,所以并不会影响你的 搜索结果,特别是在屏蔽比较多的图片搜索中,这个方法十分管用;
  6. 出于安全考虑,有一些站点虽然没有被墙但是我们是不愿意访问的,例如 带有病毒的站点或者钓鱼站点等,这些站点也能够利用pac文件来屏蔽,因此,我的pac脚本中带有两个数组,第一个是用来分辨是否被gfw墙的站点的,这 个数组叫做arrStrGFWSites,然而我还引入了另一个数组arrStrUNSSites,用来过滤不安全的站点,你把自己认为不安全的站点写在 里面就行了,脚本将把这个URL指向一个被墙的站点,达到过滤的目的。

本文的pac文件大家是不能直接用在自己的网络环境里的,写出来只是为了抛砖引玉,期待有喜欢折腾的高手写出更加智能的pac文件。

服务于生活,这正是编程的意义所在。今天就写到这里。

// 补充:如果你只需要在iPhone或者iPod touch上翻墙,那么由于iPhone OS基于Unix,是可以直接创建ssh链接的,只需要Cydia安装Openssh、Openssl和Mobile Terminal就可以了。基于Linux的设备也大同小异,例如Google的Android电话。



--
Posted By GFW Blog to GFW BLOG at 11/10/2009 06:57:00 A
--~--~---------~--~----~------------~-------~--~----~
1、请点击www.chinagfw.org访问我们,订阅地址:http://feeds2.feedburner.com/chinagfwblog。2、需要Psiphon2注册邀请的朋友,请向english@sesawe.net发送电子邮件请求,说明 "can I have psiphon2 access" 并告诉您所在的国家。也可以使用Twitter Direct Messages或登陆Psiphon网站直接向Psiphon索取使用邀请。3、GFW Blog现提供最新翻墙工具下载(地址一、二、三),翻墙(突破网络封锁)方法介绍请见本站anti-censorship部分。4、本站热烈欢迎各位朋友投稿或推荐文章,请发邮件至chinagfwblog[at]gmail.com。5、敬请关注、支持、参与Sesawe和黑箱监管集体诉讼。
To unsubscribe from this group, send email to
gfw-blog+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/gfw-blog?hl=zh-CN
-~----------~----~----~----~------~----~------~--~---

没有评论:

发表评论