记录时间:2020 年 1 月 26 日
关键词:Padavan golang 交叉编译 wireguard
注意这是一次失败记录,虽然成功地编译出了wireguard-go和 tools,但是编译出的文件体积太大装不进K2路由器,不能测试其是否可用,也不想搞了,因为OpenWrt体积更小使用也简单,稳定性方面也超出我的预期,所以之后换用OpenWrt了。另外再说一下,wg体积小性能稳,对于家庭的组网来说很好用。
注:本记录仅为学习!关于使用请遵守相关规定!
在Ubuntu编译
- 准备编译环境
编译系统为 Ubuntu 18.04,首先安装必要的软件包
1 | sudo apt update |
- 编译wireguard-tools
1
2
3
4cd ~
git clone https://github.com/WireGuard/wireguard-tools.git
cd wireguard-tools/src/
env CFLAGS=-I/tmp/libmnl/include LDFLAGS=-L/tmp/libmnl/src/.libs make - 安装go
1
2
3
4
5
6#这里安装了golang版本为1.13.7
wget -O /tmp/golang.tar.gz https://dl.google.com/go/go1.13.7.linux-amd64.tar.gz
tar -C /usr/local -xvzf /tmp/golang.tar.gz
export PATH=$PATH:/usr/local/go/bin
#启用阿里云go镜像加速下载
export GOPROXY="https://mirrors.aliyun.com/goproxy/" - 编译wireguard-go
1
2
3
4
5mkdir -p $HOME/gobuild/ && cd $HOME/gobuild/
git clone https://github.com/WireGuard/wireguard-go.git
cd wireguard-go
export GOPATH="$HOME/gobuild/"
env GOOS=linux GOARCH=mipsle go build -v -o "wireguard-go" - 复制wg和wireguard-go到主目录,就可以在主目录中找到了
1
2cp $HOME/wireguard-tools/src/wg $HOME
cp $HOME/gobuild/wireguard-go/wireguard-go $HOME直接用github actions自动编译(特别推荐)
贼省事,不多解释了,直接上脚本。由于没有仔细了解脚本语法,因此这个脚本是简单修改来的可能有不合理的地方,另外要注意一下随着源码的不断更新,脚本可能会在未来失效。关于使用可以参考一下前面的捯饬记录
1 | name: Build wireguard-go for Padavan |
关于wg文件的使用
因为不能测试,也就没有做进一步的了解。官方的简单说明中关于wireguard-tools都是直接编译安装,对单个wg的使用可能需要啃一下官方的文档,或者了解一下make install来手动配置,应该也挺麻烦的吧。
简单记录一下使用docker来编译的过程
在docker容器中编译(前提是安装了docker),因为我的Ubuntu里装了很多乱七八糟的东西,为了保持干净还是选择用docker来编译,但是没有特地做新的镜像,所以容器里的环境是从头开始搭的。
- 启动一个docker ubuntu容器
1
sudo docker run -it --rm ubuntu
- 安装必要的软件,切换软件源加速后续下载
1
2
3
4apt update
apt install -y apt-transport-https ca-certificates
sed -i 's#http://archive.ubuntu.com#https://mirrors.huaweicloud.com#' /etc/apt/sources.list
sed -i 's#http://security.ubuntu.com#https://mirrors.huaweicloud.com#' /etc/apt/sources.list - 中间编译步骤和上边 在ubuntu编译 是一样的
- 编译完成后另开一个终端窗口,执行以下命令复制wg和wireguard-go到本机使用完毕后ctrl + d退出容器,不留痕迹!
1
2sudo docker cp <container>:/root/wireguard-tools/src/wg wg
sudo docker cp <container>:/root/gobuild/wireguard-go/wireguard-go wireguard-goEND
经过这次捯饬才发现Padavan的缺点:Linux版本有点低(3.4),而且模块化程度低,真想捯饬还得是OpenWrt。另外一个wireguard-go体积达到了4M,这K2就很吃力啊,由于这些原因还是转向了OpenWrt。经过短暂的试用感觉官方版OpenWrt 19.07的稳定性表现超出了我的预期,所以Padavan的内容到这里应该就告一段落了,哎希望给能看到这些个记录的带来一点点启发。不说了,IPv6我来了!
参考
Compiling the Kernel Module from Source:https://www.wireguard.com/compilation/
Installing WireGuard on ASUS RT-N56U (Padavan):https://medium.com/@yjwong/installing-wireguard-on-asus-rt-n56u-731c22f1f5bd
Go 语言跨平台路由器编译:https://blog.lutty.me/code/2017-04/golang-cross-compile-openwrt-ddwrt-build.html