USB ADSL在VMWare中Linux环境下拨号方法

  鉴于北京和山东网通已经提供原生ipv6服务(via newboysyb@newsmth提供了6to4方式的ipv6服务,不过家里的路由器和vmware目前根本就不支持ipv6穿透。为了将ipv6充分利用起来,打算在VMWare中的Linux环境下进行USB ADSL的拨号,这样就跨越了路由器的限制。很繁琐,研究了一个上午才搞定。

1.可行性分析

  网络环境:青岛网通ADSL
  硬件设备:大亚科技ADSL USB Modem,型号DB101-A(Conexant芯片)
  操作系统:VMWare Workstation 6.5.0虚拟机下的Fedora 10(内核版本2.6.27.5)

  整个过程之所以繁琐,最重要的原因是这个ADSL是USB接口的,要像学校里武汉电信ADSL使用的都是RJ-45接口从而system-independent也就舒服了。所以,首先设备必须被kernel所支持,幸运的是一般比较新的kernel都是没有问题的。然后需要检测一下自己的USB ADSL Modem是否被Conexant  AccessRunner芯片的Linux驱动所支持。简单方法如下图,在Windows的设备管理器中查询该设备的16进制Vendor ID和Product ID,然后看是否在这个网页http://accessrunner.sourceforge.net/modems.shtml所示的列表中。如若不然,奉劝早点收手,后面一些都是白费功夫。

2.让USB ADSL穿透VMWare

  这一步的目的是屏蔽掉VMWare这层马甲的影响,让Linux客户机能够“直接”存取这个USB ADSL设备。方法是在虚拟机客户端的设置页中,将USB Controller的Connections三个选项都打勾,然后重新启动Linux客户机,在VMWare窗口的右下角应该就出现了新的USB设备,指向它时会出现“Conexant ADSL USB Modem”字样的提示,然后点击它选择Connect (Disconnect from Host),这样主机便会失去设备连接,转而让Linux客户机获取。

  这时进行lsusb可以看到,USB设备已经能够被检测到,同时刚才的Vendor ID和Product ID也都被列了出来。

[remote@leon ~]$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 005: ID 0572:cb00 Conexant Systems (Rockwell), Inc. E-Tech ADSL Modem v2
Bus 002 Device 003: ID 0e0f:0002
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
[remote@leon ~]$ 

3.向系统中添加firmware固件支持

  这一步是从Windows的版本的Conexant驱动中提取出USB ADSL Modem的firmware,添加到Linux中。提取工具cxacru-fw在这里http://accessrunner.sourceforge.net/firmware.shtml,目前只提供CVS来下载,下载来后只需要一步make或者gcc就可以编译出来。

  然后自己去找CnxEtU.sys这个Windows下的驱动文件,网上文章说在windows/system32/drivers中寻找就行,可我用它提取时总是提示“firmware start sequence not found”,提取不成功,后来研究了一下那张ADSL驱动光盘,一共找到3个CnxEtU.sys文件,分别是605KB,版本40.1.22.0;632KB,版本32.99.84.0;524KB,版本32.99.56.0。我使用了632KB那个,提取成功,保存为cxacru-fw.bin,如下所示。

[remote@leon cxacru]$ ./cxzcru-fw CnxEtU.sys cxacru-fw.bin
found firmware in `CnxEtU.sys' at offset 0x41c0
[remote@leon cxacru]$

  将这个bin文件移至/lib/firmware/目录下。重新连接USB Modem,使用dmesg命令查看,设备已经被正常驱动,使用lsmod命令查看模块加载的情况,atm和usbatm模块已经能够被usbatm和cxacru所使用。

4.加载设备

  xDSL的Internet链接需要用到的协议如下所示。

  很多ISP使用的是Bridged IP over ATM (RFC1483/RFC2684)桥接进入Internet的,青岛网通就是这样。所以需要br2684ctl和libatm,后者为前者提供依赖,否则编译br2684ctl的时候会提示找不到atm.h头文件。br2684ctl源码的下载地址在http://home.sch.bme.hu/~cell/br2684/dist/。编译过程如下:

$yum install linux-atm
$yum install linux-atm-libs
$yum install linux-atm-libs-devel
$gcc -o br2684ctl br2684ctl.c -latm

  编译完成后可以讲br2684ctl移至/sbin/目录下。然后运行br2684ctl,创建nas0网卡,如下所示:

[root@leon ~]# br2684ctl -b -c 0 -a 8.35
RFC1483/2684 bridge: Interface "nas0" created successfully
RFC1483/2684 bridge: Communicating over ATM 0.8.35, encapsulation: LL
RFC1483/2684 bridge: Interface configured

  其中-b参数是让程序在后台运行,-c参数值0用于创建网卡nas0,-a参数值8.35来源于ISP的VPI和VCI,另外如果需要,还有LLC/VCmux,Routed/Bridged等参数的选择。具体可以咨询ISP,青岛网通的可以在windows下打开ADSL控制,按Alt+P通过下图看到。

  搭好桥后,进行ifconfig nas0 up,启用网卡nas0

5.拨号

  拨号软件可以使用rp-pppoe,下载地址在这http://www.roaringpenguin.com/products/pppoe,安装好后,按照提示填写ISP给的账号、密码、DNS、网卡nas0,然后pppoe-start,就终于可以Connected到Internet了!

Leave a Reply

4 Comments on "USB ADSL在VMWare中Linux环境下拨号方法"

avatar
newest oldest
ydys
ydys

我的本意是来回200ms正好是中美2万公里光缆的信号速度,6to4中继在美国,拆包花10ms路由器就该down了。
电信网通似乎在没有让用户连接CNGI而是在自己都不一定知晓的情况下不小心让美国为其用户提供了v6接入。
我说由微软接入看来是错误的,全球tracert 192.88.99.1的结果都不太一样,通过he.net的有但不多。
我的专业与IT无关,从Google查找IPv6到你的博客,目前国内讨论IPv6技术的并不多,感谢你的博文,我很收益。

ydys
ydys

你有没有觉得ping ipv6.google.com的delay太长了?(300ms)?
我是电信用户,ADSL拨号以后也可以通过6to4连上v6网,我tracert ipv6.google.com第一跳就有220ms,你也差不多。
通过v4 tracert 192.88.99.1延时相同,最后一跳的72.52.92.109在美国弗罗里达,he.net。
从今年1月份就陆续有报道电信网通ADSL能够通过的6to4连上v6,但我认为这是微软提供的接入,而不是国内的ISP。