【详细教程】编译openwrt + njit-client 1.3,通过iNode认证

这个教程,简单地说是我一年以来的鼓捣成果,也是我对我baidu/google看过无数教程的一个小总结。我之前在贴吧看了这个帖http://tieba.baidu.com/p/1621858667之后,燃起了我对openwrt路由器的激情。在看了很多很多个教程之后,我把我的心得汇总在这里,希望对各位有所帮助。  PS.20130902更新:njit-client在华工五山校区测试成功。

首先,你需要有一个能刷openwrt的路由器。怎么知道自己的路由支不支持呢?请参看http://wiki.openwrt.org/toh/start,在Supported Hardware – Router type里面就是支持的,如下图。简单地说,对于一个主流硬件的路由器,Flash必须≥4MBRAM必须≥32MB才能正常使用openwrt。

2013-07-14 10_38_16的屏幕截图

怎么刷机?不同的路由刷的方法也是不同的,所以请自行百度。当然你也可以去淘宝直接买一个刷好了的。

刷机的固件怎么来?去openwrt官网下载是最方便的方法,之后要自己安装njit-client及其依赖包。本文末附上我编译的ramipsar7xxx的njit-client 1.3 的ipk下载,自己再去openwrt官网下载其依赖包libpcap装上就好了。(当然这还是比自己从头编译固件方便)也可以去各论坛上下载别人编译的固件。

但是如果你下定决心要编译固件,那么就可以往下看后文讲述的编译openwrt固件和njit-client 1.3的步骤。自己编译固件的优点还是有的:由于squashfs的特性,固化的软件占用的Flash空间更少,于是就可以在有限的空间中安装更多的软件。

13

space

我还装了一些ipv6支持、QoS什么的还剩200多k空间

以下内容有相当一部分参考了这里的教程。

一、准备工作

  • 准备一台运行Linux或者类Unix操作系统的PC,比如Ubuntu,Debian,Fedora,MAC OS,FreeBSD,Suse等。下文所列出命令都Ubuntu下的命令,其他linux发行版请到这里查看相关的命令。
  • 需要大约350MB硬盘空间,用于下载软件包(当然,选择编译的软件越多,需要下载的源代码包就越多,可能需要多达几个G的硬盘空间)。
  • 需要6~8GB可用硬盘空间,用于编译OpenWrt。
  • 一般情况下,我们还需要一个非root用户。
  • 最后是耐心和时间,OpenWrt边下载边编译,编译几个小时那是家常便饭,并且中间还有可能出错。

二、编译openwrt

1.安装 git 以获取源代码:

在终端中运行:

sudo apt-get update
sudo apt-get install git-core

2.安装必要的编译工具:

sudo apt-get install libtool autoconf automake gcc-multilib bison screen gcc g++ binutils patch bzip2 flex make gettext unzip libc6 git-core git build-essential libncurses5-dev zlib1g-dev gawk quilt asciidoc libz-dev subversion

3.下载openwrt源代码,这里我下载的是trunk (main development tree) :

git clone git://git.openwrt.org/openwrt.git

如果想下载Barrier Breaker 14.07 分支,就这样:

git clone git://git.openwrt.org/14.07/openwrt.git

4.更新下载和安装扩展软件包:

假设你的工作目录为openwrt,进入openwrt目录:

cd openwrt

然后把feeds.conf.default复制一份命名为feeds.conf:

cp feeds.conf.default feeds.conf

(添加njit-client的源)打开feeds.conf,在最后加上一行

src-svn njit https://github.com/liuqun/openwrt-clients/trunk/njit

然后是更新下载扩展软件包,并安装它们到package/feeds/目录:

./scripts/feeds update -a
./scripts/feeds install -a

5.配置openwrt

现在开始配置OpenWrt,选择你需要目标平台,以及选择将要编译和添加进固件的软件包。运行命令:

make menuconfig

若回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可。

然后你就来到了这个界面:

2013-07-14 10_39_12的屏幕截图

这个配置界面跟Linux内核的配置界面基本差不多,几乎每一项都有3个选择Y/M/N:

  • Y:选择Y,该软件将被编译,并且加入到你的目标固件里;
  • M:选择M,该软件包将会被编译,但不会被放入固件里。在需要它的时候,可以用OPKG软件包管理器进行安装;
  • N:选择N,该软件包将不会被编译,也不会被安装进固件。
  • /:搜索软件包。
  • 方向键是移动光标
  • 回车键是确认
  • 空格键是选择,可以代替Y/M/N键的使用

 

例如我用的型号是D-LINK DIR-615 D4,到第一幅图Support Hardware那里查询对应的Target和Platform,查到之后选择对应的Target System和Subtarget和Target Profile,我选的是Ralink RT28XX/3XXX和RT305X和对应的Profile。

又例如你是TP-LINK TL-MR3420,就这样选:

Target System ---> (X) Atheros AR71xx/AR7240/AR913x
Target Profile ---> (X) TP-LINK TL-MR3420 v1

之后就是选择扩展软件包,按需要添加。

  • 添加LuCI(这样才自带网页GUI端):LuCI ->Collections -> <*> luci(就是找到luci然后按一下Y)
  • 添加LuCI的中文语言包:LuCI ->Translations -> <*> luci-i18n-chinese
  • 添加UTF8编码:Kernel modules -> Native Language Support -> <*> kmod-nls-utf8
  • 添加njit-client:Network -> <*> njit8021xclient
  • 下面的njit8021xclient-web也顺便选了吧,这个是一个简单的LuCI的配置界面

其他的软件包就按需要添加吧,注意不要太多(我可怜的4M ROM…),不然编译到最后会提示文件太大无法创建。

好了,选完之后回到主菜单,选Exit退出并保存,回到终端。

(不装njit-client可忽略)如果你的系统是Ubuntu,那么在编译之前建议执行此操作

sudo mv /usr/bin/pcap-config /usr/bin/pcap-config.bak

总之就是干掉pcap-config,否则编译会出错,就像这样:

auth.c: In function ‘SendResponseIdentity’:
auth.c:432:11: error: invalid ‘asm’: invalid use of ‘%w’

当时编译出错了真是折腾了好久,最后终于在这里看到了njit-client作者的解答。

 

然后把默认的无线开启,这样刷机之后方便许多。打开package/kernel/mac80211/files/lib/wifi/mac80211.sh,将

option disabled 1

的1改为0,编译出来就默认打开wifi了。

下面的encryption也可以改下,不改就是默认没密码。

要改的话,把none改为psk2,再加一行option key yourpassword即可。

 

之后就是开始编译了:执行

make V=s

其中“V=s”表示输出详细的debug信息,也可以直接执行make。

 

编译完成之后,在 /openwrt/bin/ 下就会生成刷机用的.bin文件,在packages/下有软件包的.ipk文件。刷机方法就请自行百度了。

刷完之后重启路由,把电脑本地连接的ip改为192.168.1.x,然后在浏览器中进入192.168.1.1就进入LuCI了。没有LuCI的就telnet 192.168.1.1自行配置吧。然后在浏览器里设置一些东西,例如刚进去就要改密码、改WAN口的IP(学校给的)、DNS、网关(学校给的)、MAC地址(如果校园网绑定了MAC)、设置DHCP服务(设完之后可以把本地连接的手动ip改回自动获取,DNS好像要用学校给的DNS)什么的,慢慢做吧。

 

测试一下njit-client吧!在putty终端中执行

njit-client [username] [password] [interface] &    #改成自己的用户名和密码,接口必须对应

试试吧!其中[interface]是接口,例如eth0,eth1,总之要对应你的WAN口,在luci里就可以查看,例如我就是eth0.2,ar71xx的多数是eth1。

20130714184945

能连接上之后就做一个开机启动脚本吧~在路由器的 /etc/init.d/ 目录下建立一个自动运行脚本 njitclient,内容如下:

#!/bin/sh /etc/rc.common
#(c) 2010 ivan_wl
START=50

start() {
    njit-client [yourusername] [yourpassword] [interface] &    #这里自己改一下
}

stop() {
    killall njit-client
    killall udhcpc
}

之后运行命令

chmod +x /etc/init.d/njitclient     #加上可执行属性
/etc/init.d/njitclient enable    #开启开机自动运行

 

最后附上ramips的njit-client下载:njit8021xclient_1.3-testing_ramips.zip

ar71xx的:njit8021xclient_1.3-testing_ar71xx.zip

20140309更新ramips_24kec,用较新版本的openwrt应该装这个版本njit8021xclient_1.3-testing_ramips_24kec.zip

 

20131116更新scutclient,华南理工大学翼起来客户端请用这个。scutclient的下载及使用请到群262939451进行反馈,我不在此回答有关scutclient的问题。

20141226更新:scutclient的源码最近已由原作者发布于github,下载及编译方法参见https://github.com/forward619/scutclient


已有30条评论 发表评论

  1. 华工同校 /

    你好,方便加我qq吗,我也是华工学生,有问题望指教

    1. 7forz / 本文作者

      ok

    2. Penfj-zhbit /

      非常感谢你的教程, 真心感谢,njit-client在认证学校 校园网的时候出现一个问题 求指点
      接第一个包为Request Notification,出现auth.c 156行错误
      https://f.cloud.github.com/assets/5555184/1285692/9f001bfc-2fb1-11e3-9501-3a1f56b40401.jpg
      https://f.cloud.github.com/assets/5555184/1285694/a70964a2-2fb1-11e3-8d0a-b9bf60f3c99a.jpg
      第二次验证 要是跳过 Request Notification 直接是【2】Client:Response Identity。 就能成功,
      我应该怎么解决呢? 求指点, 非常感谢!! 邮箱qq389004664

  2. Forward /

    华工路由器需要你这样的人才,群号:262939451

  3. Penfj-zhbit /

    非常感谢你的教程, 真心感谢,njit-client在认证学校 校园网的时候出现一个问题 求指点
    接第一个包为Request Notification,出现auth.c 156行错误
    https://f.cloud.github.com/assets/5555184/1285692/9f001bfc-2fb1-11e3-9501-3a1f56b40401.jpg
    https://f.cloud.github.com/assets/5555184/1285694/a70964a2-2fb1-11e3-8d0a-b9bf60f3c99a.jpg
    第二次验证 要是跳过 Request Notification 直接是【2】Client:Response Identity。 就能成功,
    我应该怎么解决呢? 求指点, 非常感谢!! 邮箱qq389004664

    1. 7forz / 本文作者

      建议加群262939451,那里很多高手,他们可能会让你抓包再分析。
      我这里用njit认证没有Request Notification这一步,可能是位置不同的关系吧?
      还有就是群里面的人改了auth.c,但是从截图看出你用的应该是原版,进群后可以试下改auth.c后编译的版本。

  4. penfj-zhbit /

    多谢你的回复。我自己修改了auth.c 把第一次处理Request Notification 给删掉了,让它直接进入for循环,重新编译了njit802xclient,现在完美解决了。
    我也想进群,不过吧主貌似不欢迎外校的同学,被拒了,希望博主能共享一下群里的好资源,能不能加我QQ38904664,便交流学习,感谢

    1. penfj-zhbit /

      qq389004664

  5. 匿名 /

    博主,那个scutclient下载地址在哪啊。。

    1. 匿名 /

      那个群已经变成验证群,下不了东西了,所以找不到这个下载。原来给群主发过验证信息,但是没回应。。

      1. 7forz / 本文作者

        为了保护知识产权及尽量防止奸商,那个群改成了验证群。
        如果你需要旧版的scutclient,我文中有附带编译的方法。新版的有更多功能,请到验证群通过验证后在正式群内下载。

        1. 匿名 /

          感谢回复,我确实是华工学生,也把学生证什么的照下来按要求发了过去,结果什么回应都没有,也没人验证通过- -无语啊。。

          1. 7forz / 本文作者

            大概是你邮件标题的格式不对吧…?群主还是很经常上线的

        2. 匿名 /

          肯定是按要求来的啊,哎。。

          1. 7forz / 本文作者

            应该已经进去了吧,我也不太了解群里的审核,只知道群主因为别人没按标题的要求吐槽过很多次了

        3. 匿名 /

          嗯, 刚又发了一次,然后给群主发了qq消息,这次终于进去了
          不过没有7260a的ipk呃,我看能不能要到源码,尝试自己编译一下

          1. 7forz / 本文作者

            7620a可以试下用ramips的吧?你看看群共享

        4. 匿名 /

          嗯,但是原来用小度路由刷http://downloads.openwrt.org.cn/PandoraBox/这个lintel的pandorabox之后,尝试安装过http://downloads.openwrt.org/barrier_breaker/14.07-rc2/ramips/mt7620a/packages/这里面的ipk安不上,提示架构不对,可能是他的固件基于12.09的缘故。
          昨天刚抢到一个如意云2,到手了刷openwrt貌似也只有他的pandorabox可以选,到时候估计还是安装不上啊T_T
          刚才问了forward,要求水到lv4才给源码,不过群里都没人说话,我一个人怎么水呃。。

          1. 7forz / 本文作者

            没玩过mt7620,不过pandorabox的内核似乎是比较旧,之前别人hg255d刷的pandorabox就是如此,软件装不上。刷个新的trunk固件是王道。还有就是opkg可以加–force-depends强制装试试。

        5. 匿名 /

          嗯,等如意云2 到手了慢慢折腾吧,感谢博主!

          1. 7forz / 本文作者

            联想的Y1,Y1S已经得到了原生的支持https://dev.openwrt.org/changeset/41961

      2. 匿名 /

        嗯,我自己编译了一个,正在使用

        1. 淡薄king /

          求大神加好友469911292 我们的是h3c inode 我安装不上njitclient 求教

          1. 7forz / 本文作者

            什么叫装不上?

      3. 匿名 /

        求大神加好友~ 419489941

  6. 不要点我头像 /

    为什么编译出来的软件包会安装失败?【Collected errors:
    * pkg_hash_fetch_best_installation_candidate: Packages for njit8021xclient found, but incompatible with the architectures configured】编译过程好多源码不能下载,需要我手动搜索下载,然后放到dl目录,以后都要挂vpn才能make。博主在南校区吗?交流学习。

    1. 7forz / 本文作者

      从出来的信息看,是CPU的架构不对呢..再说了,如果你make menuconfig的时候点Y,出来的njit是会固化在刷机的固件里面的

  7. benwwchen /

    请问华工翼起来是用801.2x还是L2TP VPN方式验证的?我是邻校的加不了群但是似乎翼起来都是用安朗客户端的,就是不知道验证方式一不一样。谢谢

    1. 7forz / 本文作者

      802.1x,相关的实现代码见作者的github: https://github.com/forward619/scutclient

回复给匿名 取消回复