闪讯OpenWrt-编译适合自己路由器的pppd闪讯模块

  在GitHub上有个基于OpenWrt的开源闪讯项目,通过这个项目可以为pppd添加一个加密用户名的插件,使得路由器可以根据当前时间生成随机数动态生成用于拨号的真实用户名。这个教程写于2016年,在2022年网络升级更新OpenWrt 21.02.2系统的时候发现:原先基于Netgear WNDR4300/OpenWrt 15.05的教程已经过时,因此基于Netgear R6800/OpenWrt 21.02.2重新编写。

安装编译用系统

  首先得准备好编译环境,安装一个64位的Ubuntu系统(OpenWrt官网上的交叉编译工具不支持32位系统),建议去英文的Ubuntu官网下载长发行版本。

安装编译必要的软件包

1
2
3
4
5
6
7
sudo apt update
sudo apt upgrade
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev

下载交叉编译工具

  在OpenWrt官网下载对应自己路由器CPU型号及OpenWrt系统版本的交叉编译工具,CPU型号可以在OpenWrt Wiki上查找(例如本人用的Netgear R6800),在对应页面下载对应的交叉编译工具openwrt-sdk-21.02.2-ramips-mt7621_gcc-8.4.0_musl.Linux-x86_64.tar.xz

1
2
3
wget https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.2/targets/ramips/mt7621/openwrt-sdk-21.02.2-ramips-mt7621_gcc-8.4.0_musl.Linux-x86_64.tar.xz
tar -xJvf openwrt-sdk-21.02.2-ramips-mt7621_gcc-8.4.0_musl.Linux-x86_64.tar.xz
mv openwrt-sdk-21.02.2-ramips-mt7621_gcc-8.4.0_musl.Linux-x86_64/ sdk/

下载闪讯pppd模块代码

  1. 克隆Github上的项目
1
git clone https://github.com/miao1007/Openwrt-NetKeeper.git
  1. 设置环境变量,此步骤为新版本工具链增加的步骤
1
export STAGING_DIR=/openwrt/sdk/staging_dir
  1. 编辑src目录下的makefile文件
1
2
3
4
5
6
7
# 这里填写sdk套件中交叉编译工具的路径
5 LOCATION=/openwrt/sdk/staging_dir/toolchain-mipsel_24kc_gcc-8.4.0_musl
7 CC=$(LOCATION)/bin/mipsel-openwrt-linux-gcc
# 这里填写OpenWrt系统所使用的pppd版本号
9 PPPD_VER=2.4.8
# 这里仅留下自己地区的参数,不同地区radius不同
35 all:hangzhou_sxplugin
  1. 编辑pppd.h头文件,修改57行头文件的引用
1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/src/pppd.h b/src/pppd.h
index 1f20889..5bdabb0 100644
--- a/src/pppd.h
+++ b/src/pppd.h
@@ -54,7 +54,7 @@
#include <sys/param.h> /* for MAXPATHLEN and BSD4_4, if defined */
#include <sys/types.h> /* for u_int32_t, if defined */
#include <sys/time.h> /* for struct timeval */
-#include <net/ppp_defs.h>
+#include <linux/ppp_defs.h>
#include "patchlevel.h"

#if defined(__STDC__)
  1. 执行编译
1
2
make all
mv zhejiang_xiaoyuan_sxplugin.so sxplugin.so

上传pppd模块至路由器

  此时文件夹内生成的.so文件就可以用于拨号了,这里放一个mt7621平台基于OpenWrt 21.02.2/pppd 2.4.8的编译好的.so文件,点我下载

  将sxplugin.so上传到路由器的/usr/lib/pppd/2.4.8/目录下,并且在/etc/config/networkwan下追加option pppd_options 'plugin sxplugin.so',或执行以下代码,之后便可以使用路由器进行PPPoE拨号了。

1
uci set network.wan.pppd_options='plugin sxplugin.so'

扩展阅读