新路由3 编译 Openwrt 固件

希望有一个包含 ssr plus+ 的 Openwrt 固件,但是这样的固件往往有很多我不需要的功能,而且有被植入后门的风险,所以还是自己编译了一个。

其实一个更重要的理由就是我想要 NAT1,也就是 fullcone NAT,于是只能自己编译。

Update: 目前更推荐 ImmortalWrt,直接使用预编译好的固件,然后根据需求安装其它包就好了(比如 luci-app-openclashluci-app-zerotier)。

目标

为自家的 新路由3 编译一个固件,然后白嫖 GitHub Action 进行编译。

需要的额外功能有:SFE 快速转发,SSR,ZeroTier

最后要求能 Full Cone Nat (Nat 1),主要是用来打游戏啦。

准备环境

按照要求开一个 ubuntu 18.04 的虚拟机或者 Docker(肯定是 Docker 方便,但是不熟悉 Docker 的话还是虚拟机吧)。

配置好代理(白名单或者全局),否则下载可能会很慢。

如果是虚拟机:

  • 记得预留 30G 以上的空间,不然会编译失败(可能是我编译线程数开得太多了,导致临时文件过多)。
  • 内存 5G 以上。

首次编译

按照 https://github.com/coolsnowwolf/lede/ 操作。

注:

  • clone 仓库后,把 lede/feeds.conf.default 的 hello world 那行取消注释,解锁对于国内用户最重要的功能。
  • 对于新路由3,Target 的配置 MediaTek Ralink MIPS - MT7621 base boards - Newifi D2
  • 我额外开启的 luci app 为:sfe, ssr plus, zerotier, unblock-netease-music

开启 NAT 1

按照 https://github.com/LGA1150/openwrt-fullconenat 操作。

  • 对于最新版本的 openwrt (kernel 为 Linux 5.4),编译时会报错,解决方案 issue 里有提到 https://github.com/LGA1150/openwrt-fullconenat/issues/4 。

  • 要让它生效,需要在 iptables 的自定义规则中加入以下两行,网络接口的名字 eth0 可能需要替换。

    1
    2
    iptables -t nat -A POSTROUTING -o eth0 -j FULLCONENAT
    iptables -t nat -A PREROUTING -i eth0 -j FULLCONENAT

测试 NAT 类型可以用这个:https://github.com/HMBSbige/NatTypeTester

集成 GitHub Action

https://github.com/P3TERX/Actions-OpenWrt 有详细的教程,大概就是 clone 出来,把本地 .config 文件传上去,再按需修改 diy part 1 & 2 就好了。

  • 自带的 diy part 1 可以解锁 hello world 以及增加 lienol 源,diy part 2 可以配置初始的 ip 地址。
  • 把 NAT 1 补丁加在 diy part 1 中。

编译时间大概两小时不到,手动触发(所以也不算浪费资源吧),最后贴上仓库地址 https://github.com/zerolfx/openwrt 供参考。