前情提要可以看 n2n 的简单介绍。显然这个内网穿透应用需要长期在线运行,而为了能远程访问,最常见的能安心放在学校等地 24x7 运行的设备就是路由器或是树莓派了。树莓派用的是 Linux 系统,路由器用的主要是 Openwrt 和 LEDE。本文就将讨论在 Openwrt / LEDE 平台运行的 n2n 的编译。
交叉编译#
在路由器上安装开发工具并编译程序显然不是很合适,毕竟 Flash 存储空间和 CPU 性能都极为有限,所以比较合适的编译方法就是在 Linux 平台上进行交叉编译。下面以 AR71xx 平台上的 Openwrt 为例,使用操作系统为 CentOS x64。
所需代码及依赖#
- Openwrt 的 SDK 或 toolchain,下载地址,请找自己路由器的对应型号。
- OpenSSL,代码网址,目前选择 1.0.2l 版本即可。
- n2n,GitHub 项目页,这里用的是 v2。
编译步骤#
- 创建开发用的目录并进入,这里选择的是用户主目录
- 解压 SDK
1
| $ tar jxvf OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
|
- 提取 Toolchain
1
| $ mv OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/ ~/mips_34kc_gcc
|
- 修改环境变量
vi ~/.bash_profile
,增加如下代码:
1
2
3
4
5
6
| ...
PATH=~/mips_34kc_gcc/bin:$PATH
export PATH
STAGING_DIR=~/mips_34kc_gcc
export STAGING_DIR
...
|
- 引入环境变量
1
| $ source ~/.bash_profile
|
编译 OpenSSL#
- 解压代码并进入项目目录
1
2
| $ tar zxvf openssl-1.0.2l.tar.gz
$ cd openssl-1.0.2l
|
- 执行设置脚本
1
| $ ./config no-asm shared --prefix=~/mips_34kc_gcc
|
- 修改 MakeFile 文件
vi Makefile
,搜索并修改下列部分:
1
2
3
4
5
6
7
| ...
CC= mips-openwrt-linux-gcc
...
AR= mips-openwrt-linux-ar $(ARFLAGS) r
RANLIB= mips-openwrt-linux-ranlib
...
NM= mips-openwrt-linux-nm
|
同时要删除文件里的 `-m64` 后缀(共两处)。
- 编译并安装
编译 n2n#
- 下载代码并进入项目目录
1
2
| $ git clone https://github.com/meyerd/n2n.git
$ cd n2n/n2n-v2
|
- 修改 CMake 配置文件
vi CMakeLists.txt
,在开头添加如下内容:
1
2
3
4
| SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAME_C_COMPILER mips-openwrt-linux-gcc)
SET(CMAKE_CXX_COMPILER mips-openwrt-linux-g++)
SET(CMAKE_FIND_ROOT_PATH ~/mips_34kc_gcc)
|
- 在 CMake 配置文件里添加链接库选项
-ldl
1
| $ sed -i 's/ n2n)/ n2n dl)/g' CMakeLists.txt
|
- 新建 build 文件夹,用来存放编译出来的文件:
1
2
| $ mkdir build
$ cd build
|
- 进行 CMake 设置,进行编译:
- 至此在目录里就生成了
supernode
和 edge
的二进制文件,传到路由器里就可以正常执行了。
https://www.yjblog.net/post/123.html
http://bbs.csdn.net/topics/392137961
http://blog.csdn.net/clirus/article/details/50151427
http://blog.csdn.net/idjoy/article/details/39908437