
说在前面的话:
国内很多高校的电信宽带限制用户使用路由器,具体手段是变态chap验证,因此只能用其客户端拨号。该客户端从驱动层面限制了windows的wifi共享功能,虽然有某豹wifi,但是天翼客户端的不定期更新总会使某豹wiif失效。另外,电信仅提供了Win、OS X、Android等平台的客户端,Linux用户根本无法使用。
本篇博文根据网络上某位大神给出的算法补丁重新编译了ppp程序,实现了 Linux PC 以及 OpenWRT路由器 连接电信宽带的目标。
之前南航有位叫什么fox的同学,他给出了修改过的pppd二进制程序,但是仅提供了2.4.4/2.4.5的版本,也仅支持部分芯片设备,最重要的是没有开放源码,本文则是根据另一位大神给出的源码补丁操作的,原文地址会在最后给出。(后来听说南航小狐狸的代码也扔Github了…)
一、源码准备
1、下载源码
这里我采用的是2.4.7的源代码,因为大神的补丁是针对2.4.7的,同时我的Dreambox上面的pppd也是2.4.7.
| 1 2 3 4 5 6 | $ mkdir openwrt && cd openwrt
$ git clone [email protected]:paulusmack/ppp.git # 从github上clone代码 $ mv ppp ppp-2.4.7 # 重命名为ppp-2.4.7 |
2、打上关键的patch
这里,我将针对chap-md5.c的补丁命名为“TianYi_DSL.patch”,文件路径是 ~/openwrt/TianYi_DSL.patch
| 1 2 | $ cd ppp-2.4.7 $ patch -p1 < ../TianYi_DSL.patch |
3、其他的可选patch
其实如果只是用于桌面Linux 的ppp,下面这些补丁不是必选。
但是如果为OpenWRT交叉编译pppd,那么就必须打下这几个补丁,因为openwrt的拨号脚本里面用到了一些选项。
还是和上面一样,patch路径也是 ~/openwrt/*.patch,这些补丁是从openwrt trunk分支下面直接下载的,对应的也是2.4.7的源码。
| 1 2 3 4 | $ patch -p1 < ../100-debian_ip-ip_option.patch $ patch -p1 < ../110-debian_defaultroute.patch $ patch -p1 < ../120-debian_ipv6_updown_option.patch $ patch -p1 < ../320-custom_iface_names.patch |
二、交叉编译环境准备
1、下载toolchain
直接去openwrt官网下载已经准备好的对应芯片的工具链,这样就不用自己编译工具链了。
但是对于官网没有给出的芯片(可能是我没找到…),比如我的另一个RT5350,mipsel的架构,我就只能自己编译toolchain了。详见另一篇博文:Lenovo R2100刷机以及编译pppd实现连接天翼宽带
下面示例的是brcm63xx,mips架构的芯片。
| 1 2 | $ wget "http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/OpenWrt-Toolchain-brcm63xx-for-mips_mips32-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2" $ tar -jxvf OpenWrt-Toolchain-brcm63xx-for-mips_mips32-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 |
2、配置环境变量
| 1 2 3 4 5 6 7 8 9 10 11 | $ vim ~/.profile # 我一般喜欢配置在这里,其他地方比如/etc/profile、~/.bashrc都一样。 # 添加下面这行内容 export PATH=$PATH:~/openwrt/OpenWrt-Toolchain-brcm63xx-for-mips_mips32-gcc-4.8-linaro_uClibc-0.9.33.2/toolchain-mips_mips32_gcc-4.8-linaro_uClibc-0.9.33.2/bin # 路径名很长,自己可以随意重命名,只有path里面有最关键的bin目录就行。
$ source ~/.profile # 重新加载配置文件
$ mips-openwrt-linux-gcc # 测试是否可用,具体的程序名由你的 toolchain 目标架构决定。 |
三、开始编译
| 1 2 3 4 | $ cd ~/openwrt/ppp-2.4.7 $ ./configure $ make CC=mips-openwrt-linux-gcc LD=mips-openwrt-linux-ld # 为路由器进行交叉编译。 |
如果不加参数,直接运行make,将会根据本机架构编译,之后还可以使用make install安装到当前系统中 。
四、最后的工作
| 1 2 3 4 5 6 | $ mips-openwrt-linux-strip ~/openwrt/ppp-2.4.7/pppd/pppd $ mips-openwrt-linux-strip ~/openwrt/ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe # 上面两个步骤是在移除可执行程序中的符号表,减小体积。
$ scp ppp-2.4.7/pppd root@[IP_addr]:/root/pppd_new $ scp ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe.so root@[IP_addr]:/root/rp-pppoe.so_new |
下面需要登陆进入路由器配置:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ ssh root@[IP_addr] OpenWRT:~# cp /usr/sbin/pppd ./pppd_bak OpenWRT:~# cp /usr/lib/pppd/2.4.5/rp-pppoe.so ./rp-pppoe.so_bak OpenWRT:~# mkdir /usr/lib/pppd/2.4.7 && cp ./rp-pppoe.so /usr/lib/pppd/2.4.7/
(最新更新于20150830) OpenWRT:~# mkdir /usr/local && mkdir /usr/local/lib && mkdir /usr/local/lib/pppd && mkdir /usr/local/lib/pppd/2.4.7 OpenWRT:~# cp ./rp-pppoe.so /usr/local/lib/pppd/2.4.7/ # 因为之前采用建立软连接的方式,导致wan口无法拨号。 # 新建wan口时日志里报错daemon.notice netifd: wan0 (8734): sh: /usr/lib/pppd/2.4.7/rp-pppoe.so: unknown operand # 原因在于不同程序对软连接目标的相对、绝对位置处理不同,所以干脆直接建立新的目录。
(旧的方法,不建议使用,因为软连接的目标定位依赖于程序的当前工作目录,会出各种意想不到的问题) OpenWRT:~# mkdir /usr/local || ln -s /usr/lib /usr/local/lib # 因为编译的时候,默认安装位置是/usr/local,懒得重新编译了,所以就直接建了个软连接 |
然后就可以在Luci界面(web界面)配置ppoe拨号了。
需要注意的是,用户名前需要添加 ^#03 ,比如手机号为 18912345678 ,那么用户名请填写 ^#0318912345678@njxy
五、其他说明
1、上面没有给出桌面系统中ppp的安装,其实不用安装到特定目录就可以直接运行。
Debian系的发行版推荐使用pppoeconf配置拨号脚本,具体过程如下
| 1 2 3 4 5 6 7 8 9 10 | $ sudo ln -s /usr/lib/pppd /usr/local/lib/pppd $ sudo mkdir /usr/local/lib/pppd/2.4.7/ $ sudo cp ~/openwrt/ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe.so /usr/local/lib/pppd/2.4.7/ # 准备好动态链接库文件
$ sudo pppoeconf # 自动生成DSL拨号配置
$ sudo ~/openwrt/ppp-2.4.7/pppd/pppd call dsl-provider # 进行拨号 |
如果安装到了指定目录并替换了原来的pppd,那么NetworkManager之类的程序应该都OK了。
2、这里展示一下strip的效果:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ##### stip之前 ##### $ ls -hl ppp-2.4.7/ppps/pppd ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe.so -rwxrwxr-x 1 king king 67K 7月 6 01:12 plugins/rp-pppoe/rp-pppoe.so -rwxrwxr-x 1 king king 895K 7月 6 01:13 pppd
##### 进行strip操作 ##### $ mips-openwrt-linux-strip ppp-2.4.7/pppd/pppd $ mips-openwrt-linux-strip ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe.so
##### strip之后 ##### $ ls -hl ppp-2.4.7/pppd/pppd ppp-2.4.7/pppd/plugins/rp-pppoe/rp-pppoe.so
-rwxrwxr-x 1 king king 24K 7月 6 01:14 plugins/rp-pppoe/rp-pppoe.so -rwxrwxr-x 1 king king 305K 7月 6 01:14 pppd |
如果需要进一步压缩可执行程序,(我在另一篇博文中会介绍我遇到的情况),可以选择upx压缩或者适当的编译优化选项。
当然,那些编译选项其实并没有什么好优化的,直接上upx吧。
3、在openwrt里面设置pppoe拨号的时候,请关闭该接口的开机启动选项,因为不断地错误重拨会被电信那边禁掉的。
同时在尝试连接的时候,建议您监控系统日志,如果拨号错误请及时停用接口,防止被电信锁定账户什么的。
4、桌面Linux中使用宽带连接设置请见:ADSL(PPPOE) 接入指南
5、大家有什么问题欢迎联系我,但是不保证一定都能解决哈!
六、参考资料
1、算法分析以及代码patch: 电信校园客户端逆向工程
2、OpenWRT官方wiki: Cross Compile
资源下载
ppp-2.4.7 源码:ppp-2.4.7.tar
patch打包:ppp-2.4.7-patch.tar
来自:http://blog.kings-way.info/?p=471
感谢原作者的工作 当然我这里没有这种客户端
电信的闪讯我有详细的介绍和源码 以及编译流程这是我实现过的且有openwrt各cpu固件 详细博客内寻找(当然毕业好久 上次也是14年让学弟测试 不保证算法变更)


相关文章本文地址:https://blog.sxx1314.com/openwrt/427.html
版权声明:若无注明,本文皆为“unix 软硬件 技术宅 ”原创,转载请保留文章出处。百度已收录















