在 GitHub 上有个基于 OpenWrt 的开源闪讯项目,通过这个项目可以为 pppd 添加一个加密用户名的插件,使得路由器可以根据时间随机数动态生成用于拨号的真实用户名。
虽然这个项目在几年前已经没有人维护了,但在目前(2020年)的杭州地区,实测还是可以使用。

下面就是针对这个闪讯插件的编译与使用情况,在网上资料的整合与测试下,进行的相关总结。


闪讯插件编译

- 编译环境搭建

编译所需操作系统

使用Linux进行编译,OpenWrt 官方推荐使用 64 位的 Ubuntu 系统,推荐使用 18.04 的版本进行编译,如需在 Windows 虚拟机下安装,可以参考《言小五系列教程之Win10电脑VirtualBox虚拟机安装Ubuntu18.04.4 LTS上篇》和《言小五系列教程之Win10电脑VirtualBox虚拟机安装Ubuntu18.04.4 LTS下篇》

安装编译所需依赖包
1
2
3
4
5
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y g++ libncurses5-dev zlib1g-dev bison flex unzip autoconf \
gawk make gettext gcc binutils patch bzip2 libz-dev asciidoc subversion \
sphinxsearch libtool sphinx-common git wget
下载交叉编译工具

OpenWrt 官网下载对应自己路由器 CPU 型号及 OpenWrt 系统版本的交叉编译工具,CPU 型号可以在 OpenWrt Wiki 上查找 (例如本人用的 NETGEAT WNDR4300),使用的是 CC 15.05 版本的 OpenWRT,便可以在对应页面下载对应的交叉编译工具 OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2

1
2
3
4
5
6
7
8
9
10
#TODO:填写解压的Toolchain中bin与include所在的目录(根目录),某些奇葩可能用的是glibc,这里可能要替换LIBC
LOCATION=../../sdk/openwrt-sdk-18.06.8-x86-64_gcc-7.3.0_musl.Linux-x86_64/staging_dir/toolchain-x86_64_gcc-7.3.0_musl
#TODO:请注意不同型号(mips/mipsel)路由器此处gcc文件名可能略有不同
CC=$(LOCATION)/bin/x86_64-openwrt-linux-gcc
#TODO:可能需要修改pppd的版本,取决于路由器的/usr/lib/pppd/,目前主流的14.09是2.4.7
PPPD_VER=2.4.8
CFLAGS=-Os -Werror -I$(LOCATION)/include -fPIC -DPPPOE_VER='"${PPPD_VER}"'


all:zhejiang_xiaoyuan_sxplugin zhejiang_qiye_sxplugin

可能会出现ppp相关模块头文件缺失情况,请手动更改相关模块

编译

1
2
make all
mv zhejiang_xiaoyuan_sxplugin.so zhejiang_qiye_sxplugin.so

生成的.so文件就是我们编译的结果

使用

将 .so 文件上传到路由器的 /usr/lib/pppd/2.4.8/ 目录下

创建所需接口,因为我这边的闪讯是走L2TP的,所以选择L2TP

在 /etc/config/network 下查看你这个接口,然后添加 option pppd_options ‘plugin zhejiang_xiaoyuan_sxplugin.so’ ,如下:

1
2
3
4
5
6
7
8
config interface 'ZJWEU_l2tp'
option proto 'l2tp'
option server '220.191.xxx.xxx'
option pppd_options 'plugin zhejiang_xiaoyuan_sxplugin.so'
option username 'xxxxxxxxxx'
option ipv6 'auto'
option mtu '1410'
option password '138541'

然后就可以正常使用了。