使用无线自组网共享互联网接入

在这个互联网已经渗透入每个角落的时代,GUCAS 的网络接入收费显得非常不合时宜:(二年级以上同学)每个月 25 元套餐,其中包括5G国内流量、2G 国际流量,国内流量超出部分按 10元/G 收费,国际超出部分按 1元/M 收费。幸好有了 IPv6 BT(IPv6 流量不计入收费流量),不然 GUCAS 的网络就是一个悲剧。

对于高年级同学来说稍微好一点的是,某些实验室会有免费的网络,还可稍解流量窘迫。但如果不下 BT、不看视频、不视频聊天的话,5G 每月也是用不完的,而且 25 元的价钱也并不便宜,所以很多高年级同学都是宿舍共用一个上网帐号。

共用上网帐号有几种方式:1> 使用路由器,这是比较简洁的方式,但是这样就无法使用 IPv6——目前的路由器一般不支持 IPv6 路由功能,因此需要使用特别的配置才能同时支持 IPv6;2> 使用代理,一台电脑作为主机,为另一台电脑开一个代理,这种方式可以使用 IPv6,但缺点是主机分配的 IP 可能变化,需要手动更新代理地址,而且部分软件并不能完美支持代理。

我这里尝试了另外一种方式,使用无线自组网共享互联网接入,只适用于两台都带无线网卡的电脑共享上网。简单点儿来说,就是让两台电脑无线网卡相连,其中一台(主机)将有线的互联网接入通过无线链路共享给另外一台(从机)。这种方案同样适用于那些家里有两台笔记本却只有一个网口的家庭,省了买路由器的钱。

注:下文使用操作系统平台为 Windows XP SP3。

首先,需要将主机的有线连接即“本地连接”设为可共享。具体方法是,在主机上右击“本地连接”,选择“属性”,进入“高级”选项卡,“选中 Internet 连接共享”中的两个复选框,即“允许其他网络用户通过此计算机的 Internet 连接来连接”和“允许其他网络用户控制或禁用共享的 Internet 连接”。

其次,将两台电脑进行无线自组网。无线自组网的建立方式根据网卡管理软件的不同可能有不同的方法,简单的来说就是建立一个两台笔记本之间的一个点到点的(不需要接入点的)无线连接。一个典型的配置是:

主机:
Ethernet adapter 无线网络连接:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.1
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :
从机:
Ethernet adapter 无线网络连接:

        Connection-specific DNS Suffix  . : mshome.net
        IP Address. . . . . . . . . . . . : 192.168.0.27
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1

需要注意的一点是,两台电脑需要在同一个 Windows 工作组中,这里两台电脑的工作组都是 MSHOME。

如果对无线自组网不是很了解,以上两步可以通过软件来进行设定。联想有一款叫做“闪联任意通”的软件,配置起来相对简单好用,用它的“共享网络”功能即可做到以上两步。但是闪联任意通有一些BUG,会造成服务占用 CPU 过高。一旦配置成功之后,记住建立的点到点网络 SSID(一般以 PAN_ 开头),以后每次两台电脑都连接至该网络即可。不再需要闪联任意通的运行。

最后,将从机有线接口的 IPv4 功能禁用,将从机无线接口的 IPv6 功能禁用。具体方法是,在从机上右击“本地连接”,选择“属性”,在“常规”选项卡中的“此连接使用下列项目”选择框中的“Internet 协议 (TCP/IP)”前的复选框去掉,确定退出;在从机上右击“无线网络连接”(也可能是其它名称),在类似于上面的位置找到“Microsoft TCP/IP 版本 6”,去掉前面的复选框。

经过上面三步之后,就可以保证从机的 IPv4 的流量会走无线接口,使用主机共享的 IPv4 互联网接入;而 IPv6 的流量会走有线接口,使用本地交换机提供的 IPv6 互联网接入。第二步建立的点到点网络会保存到无线网络配置中,两台电脑开机只要打开无线,一般就会自动连接到该点到点网络,无需再进行额外的手动修改。(即便是使用代理的同学,由于无线的 IP 不会变化,这样做也能带来不用修改代理地址的好处。)

综上,这种方式可以完美地实现共享 IPv4 接入而又不影响 IPv6 连接。

几种不得已时的上网办法

由于小弟最近上网受到诸多限制,在校时帐号爆掉,回家又没有网络可上,所以尝试了各种上网方法,也许对大家有用呢,所以下面分享及记录一下:

1. 手机作为 modem,使用 GPRS 拨号上网

这个一般受到手机版本影响,三星这方面做得非常不错。将手机使用数据线连接到电脑,打开 Samsung PC studio,选择 Network Wizard(网络向导?),创建连接,连接名称随便写,比如“中国移动”,下一步调制解调器选择“Samsun Mobile USB Modem”,下一步国家选择中国,网络供应商选择“China Mobile(Beijing)”(其实选择哪个好像无所谓),用户ID选择“cmnet”,密码也是“cmnet”,创建完成后就可以拨号了。因网络状况或者 GPRS 版本不同,连接速度可能是 153.5 kbps,或者 460 kbps。

GPRS 资费是非常贵的,不在不得已或者包月流量用不完时,最好不要用 GPRS 上网;即使用 GPRS 拨号上网时,也要切记关掉所有自动联网的软件,比如禁用杀毒软件和操作系统的自动更新,禁用浏览器插件等等,这样才能将有限的网速使用在优先的程序上。

2. 使用 201 卡进行古老的 modem 拨号上网

使用 201 卡拨号上网可能会受到运营商的限制。经过我多次咨询 10010 和动手尝试,北京网通(联通)的“阳光心语普通快捷卡”拨号上网方式是这样的:首先将电话线插到笔记本的 modem 口(一般台式机已经没有这个口了)。创建一个新的连接,“连接到 Internet”->“手动设置我的连接”->“用拨号调制解调器连接”->选择笔记本电脑自带的调制解调器(我从来没想过我会有使用它的一天...)->ISP 名称,随便填,比如“201”->电话号码:“2012,语言种类,卡号#,密码#,16911#”,语言种类为打201电话时选择的数字->用户名:169,密码:169。设置完后就可以拨号了,刚开始会听到愉悦的 201 拨号机器回复,最后就要忍受一会儿嘈杂的拨号音了。201 拨号上网的速度大概为 46.6 kpbs...

使用 16911 拨号上网资费大概是 0.07 元一分钟,所以也是相当贵的,只是在 201 卡快过期或者不得已时才能为之。

3. 借用 IPv6 上的 Google App Engine 上网

这个大概只适用于高校使用教育网的学生了。Google,作为一间牛逼闪闪的公司,当其他互联网公司还在 IPv4 上晃悠时,Google 已经将其几乎所有服务部署在 IPv6 互联网上了。作为 IPv6 网络用户,您只需要将所有 Google 相关的域名在 hosts 文件(C:\WINDOWS\system32\drivers\etc, /etc/hosts)中映射到 2001:4860:c004::68 这个 IPv6 地址即可,格式例如:

2001:4860:c004::68 www.google.com mail.google.com clients1.google.com talk.google.com ssl.goo飞gle-analytics.com

就可以使用浏览器访问 IPv6 上的 Google 服务了。目前中国的 IPv6 网络上是没有审查制度的,所以在 Google 搜索时,您可以放心地搜索任意关键词,以及查看网页快照了。

但是目前只解决了访问 Google 的问题,如何访问其它网站呢?就不得不提到我前段时间发布的 Tohr 项目了。Tohr router 可以运行在 Google App Engine 上,所以您只需要将您的 Google App Engine 的域名,比如 example.appspot.com 照上面格式添加到 hosts 文件中,就可以利用 Tohr 结合 GAE 作为一个 IPv4 over IPv6 通道来上网了。当然,GAE 有很多限制,所以有些网站是铁定上不了的。为了实现浏览器自动选择直连 IPv6 的 Google 服务和使用 Tohr 代理访问其他网站,强烈推荐您阅读一下我的这篇博客文章《浏览器自动选择 Proxy 配置案例》。

使用这种方法起码在访问只需要阅读的网站还是 OK 的,Twitter 也可以直接登陆。部分在登录时检查 HTTP 请求 Referer 的网站是无法登录的,比如豆瓣、开心网、Facebook 等,这些时候不要责怪我,因为这是 GAE 的限制,不许用户自定义 Referer;或者 gmail, google reader 等,这也可能是 GAE 限制访问的网站。

但比较遗憾的是,除了第3种方法在 Linux 一样好用以外,前两种方法我都不知道如何在 Linux 上使用。

浏览器自动选择 Proxy 配置案例

本文主要讨论的是浏览器代理服务器设置技术,文中出现的人名、公司名或者域名均为化名,如有雷同,纯属巧合。

在某些地方上网时,比如南京大学的校园网中,某些公司的局域网中,我们可能需要用到代理服务器。代理服务器的切换一直是一个让人头痛的话题,IE 浏览器有一个 ProxySwither Lite 软件可以用来切换代理,Firefox 有一批插件可以用来切换代理,但是,很难用它们来解决全局性的问题,使用前的配置也是比较麻烦的事情。那么,有没有一种方法可以一劳永逸地解决这个问题呢?答案是有的,那就是 PAC(Proxy Auto-Config) 文件。

使用 PAC 文件我们可以做到:1. IE、Firefox、Opera...浏览器使用同一个代理配置方案,Windows、Linux多系统使用同一个代理配置方案;2. 针对特定的域名,使用特定的代理;3. 针对特定的 IP 范围,使用特定的代理;4. 针对特定的 URL 模式,使用特定的代理。

下面我们来看一个案例:

假设小明的电脑位于 C 公司的局域网中,C 公司为了某些需要禁止员工访问某些站点,例如: alogspot.com 和 bwitter.com ,但是小明的工作和学习需要经常访问这些站点,公司的网管给小明带来了很大不便。不过小明很聪明,他找到了一个可以访问被禁那些站点的一个代理 127.0.0.1:8000。虽然通过该代理小明可以访问这些站点,但是切换代理和浏览器设置始终是麻烦;特别是在用 doogle.com 搜索到的某些文章位于 alogspot.com 时,一不小心点了搜索结果,到搜索引擎 doogle.com 的连接就会有很大一会儿被重置。因为小明的代理速度比较慢,总不能用代理上所有网站吧?这真是件麻烦事,小明该怎么办呢?

虽然很头痛,但是互联网的开拓者们给我们留下了那么多遗产,怎么能不好好利用呢?小明翻出了一个尘封已久的 Wiki 页面,缓缓回忆起那古老的 Javascript 语言,顿时有了主意,于是他写出了下面这个 PAC 脚本:

// 看看域名是不是本地站点
function isLocalHost(host)
{
  if( dnsDomainIs(host, "localhost") )
    return true;
  return false;
}
// 看看域名是不是禁止访问的站点
function isBlockedHost(host)
{
  if( dnsDomainIs(host, "alogspot.com") ||
      dnsDomainIs(host, "bwitter.com") )
    return true;
  return false;
}
// 看看搜索结果 URL 中是不是包含被禁止访问的关键字
function isBlockedURL(url, host)
{
  if( dnsDomainIs(host, "doogle.com") ) {
    if ( shExpMatch(url, "*alogspot.com*") ||
         shExpMatch(url, "*bwitter.com*") )
      return true;
  }
  return false;
}
// 看看 IP 在不在本地 IP 范围内
function isLocalIP(addr)
{
  if( isInNet(addr,"127.0.0.0","255.0.0.0") ||
      isInNet(addr,"10.0.0.0","255.0.0.0") ||
      isInNet(addr,"192.168.0.0","255.255.0.0") ||
      isInNet(addr,"172.16.0.0","255.255.0.0") )
    return true;
  return false;
}
// 看看 IP 在不在被禁止访问的 IP 范围内
function isBlockedIP(addr)
{
  return false;
}
// 看看 IP 地址是不是 IPv6 地址
function isIPV6(addr)
{
  if( shExpMatch(addr, "*:*") )
    return true;
  return false;
}
// 这是浏览器默认调用的函数接口
function FindProxyForURL(url, host)
{
  var direct      = "DIRECT";
  var httpProxy   = "PROXY localhost:8000";
  var socksProxy  = "SOCKS localhost:9050"// 留着做个参考
 
  if(isLocalHost(host)) {
    // 如果是本地域名,那就直连
    return direct;
  } else if(isBlockedURL(url, host) || isBlockedHost(host)) {
    // 如果是被禁止访问的域名,或者搜索结果 URL 中含有被禁止访问的关键词,那就走代理
    return httpProxy;
  }

  if(!isResolvable(host)) {
    // 如果域名不能解析,那就直连
    return direct;
  }
  // 解析域名到 IP 地址
  var IpAddr = dnsResolve(host);

  if(isLocalIP(IpAddr) || isIPV6(IpAddr)) {
    // 如果是本地 IP 或者 IPv6 地址,那就直连
    return direct;
  } else if(isBlockedIP(IpAddr)) {
    // 如果是被禁止访问的地址,那就走代理
    return httpProxy;
  } else {
    // 剩下的,唉,就直连吧
    return direct;
  }
}

小明将以上内容保存为 C:proxy.pac(~/proxy.pac),然后到

Firefox 中,选择 工具->选项->高级->网络->设置(Edit->Preferences->Advanced->Network->Settings),将 file:///c:/proxy.pac(file:///home/username/proxy.pac)填入“自动代理配置 URL”(Automatic proxy configuration URL)文本框中;

再到

IE 中,选择 工具->Internet 选项->连接->局域网设置,勾选使用自动配置脚本,填入 file://c:/proxy.pac;

再到

Opera 中,选择 Tools->Preferences->Advanced->Network->Proxy Servers,勾选上 Use automatic proxy configuration,填入 file://c:/proxy.pac。

从此,小明就开始了自己幸福的互联网冲浪生活,再也没有看到那曾经熟悉的“到该网站的连接已被重置”消息了。

PS:若要 Firefox 和 Chrome 支持远端 DNS 解析,需使用 SOCKS5 作为代理的前缀。

电脑宅男

周杰伦出的新专辑“我很忙”中有一首“阳光宅男”,我就此歌名咨询了某资深动漫迷,得到的答案是:“宅男”,痴迷于某种东西而与他人隔离的族群,宅就是家的意思,指老呆在家中不出门。于是我回到宿舍,对着坐在电脑前的室友说:“电脑宅男同志,你好!”

在网上随便搜索了一下和自己有关的关键字,点点那些知道或不知道的链接,看看那些文字,有些是感动,有些是惊讶,总之都很有意思。比如我早先对龙芯的几句闲话被一个龙芯爱好者编辑的电子杂志“龙讯“作为评论引用上去,还有一些技术文章被别的网站或者博客引用,看到别人引用我的文章我是很开心的,因为那说明自己的文字没有白写。但是还有更好玩的是有人会从我的博客文章中截取一部分,然后换个标题作为自己的文章,这充分说明了我通常博客标题的辞不达意 :-)。无意中还搜索到了于洋师兄以前送我的几句话:

老弟此去京城,鹏鹤万里。京畿高朋如云,藏龙卧虎,胜江南一隅百倍,然旧友故人,心随君万里,亲切切而意期期,愿吾弟居京城得演天下,处翰院以震寰宇。此情依依,折柳依依,善自珍重。

这些值得纪念的文字,有趣的或者感动的,平时隐藏在互联网的某些角落里,搜索引擎就像考古学家一样,把它们翻出来放在博物馆里,当无意间走过那橱窗前时,会看到那闪光的历史。它告诉路过的人们,你已经陷进互联网很深了。

我在小百合的签名档里写:“珍惜时间,远离百合”,就是想告诫自己要远离网络。有那么容易吗?一个儿子,可能同时也是一个父亲;一个现实生活中的人,也有在网络中的身份。而且现实和虚拟的两种身份可能变得重合,或者同等重要。互联网上有很多我很欣赏的人,对我来说只是一个 ID 而已,我对他们的了解只是一篇篇漂亮的文字;而同样我相信,对于某些人来说,Solrex 比“杨文博”更具有明确的意义。

互联网本来应该只是人类社会活动的延续,但是它有太多的内容让人沉浸其中,反而忽略了真实的社会活动。那么以后打招呼的时候就需要说:电脑宅男们,你们好!