EasyPi R2 基于 iStoreNext 的 LXC 原版 OpenWrt 配置手册(四网口直通)
这两天一直在折腾 EasyPi R2。ARM 设备本身稳定性不错,但目前内测版 iStoreNext 的路由功能还不算完善;如果直接刷 iStoreOS,又感觉有点浪费这台机器的 Debian 能力。
所以我研究了一套在 iStoreNext 上通过 LXC 运行原版 OpenWrt 的方案,并整理成了脚本。
本方案的目标是:
- iStoreNext 保留 Debian 系统能力;
- LXC 内运行原版 OpenWrt 24.10;
- 四个有线网口直通给 OpenWrt 使用;
- OpenWrt 负责完整路由功能;
- iStoreNext 作为宿主系统保留轻量后台能力;
- 解决 LXC 环境下 TUN、nftables 等兼容性问题。
整体效果是:
完整路由功能进 OpenWrt,完整 Debian 功能进 iStoreNext,多少算是把 EasyPi R2 的能力多榨出来了一点。
一、脚本下载
本次一共整理了两个脚本:
| 脚本名称 | 用途 | 下载 |
|---|---|---|
lxc.openwrt.sh |
宿主机初始化脚本,用于创建 LXC OpenWrt、配置网口直通等 | 点击下载 |
lxcop.firstset.sh |
OpenWrt 首次初始化脚本,用于配置网络、软件源、基础环境等 | 点击下载 |
二、最终网络结构
脚本执行完成后,会安装并配置原版 OpenWrt 24.10。
默认网络规划如下:
| 项目 | 配置 |
|---|---|
| OpenWrt 版本 | 原版 OpenWrt 24.10 |
eth0 |
WAN |
eth1 / eth2 / eth3 |
LAN |
| LAN 网段 | 192.168.10.0/24 |
| OpenWrt 管理地址 | 192.168.10.1 |
| iStoreNext 宿主机地址 | 192.168.10.2 |
也就是说:
- 需要配置路由、插件、分流、防火墙等功能,进入:
192.168.10.1 - 需要使用 iStoreNext / Debian 宿主系统,进入:
192.168.10.2
LAN 口接入设备后,会自动获取 192.168.10.0/24 网段的 IP。
三、已测试功能
目前实测情况如下:
- LXC OpenWrt 正常启动;
- 四个有线网口可正常直通;
eth0作为 WAN,eth1-3作为 LAN;- TUN 兼容性问题已处理;
- nftables 兼容性问题已处理;
- EasyTier 可正常安装和运行;
- PA****LL 等插件可正常安装和使用;
- 内网测速可跑满 2.5G 带宽;
- 原 iStoreNext 宿主系统资源占用很小。
四、使用前准备
在执行脚本前,建议先确认以下条件:
- iStoreNext 已经完成正常初始化;
- 可以通过 SSH 登录 iStoreNext;
- 已准备好两个脚本文件;
- 最好准备一个无线网络作为临时管理入口;
- 或者准备显示器和键盘,直接在本机操作。
重要提醒:
脚本执行过程中会把eth0-eth3直通给 LXC OpenWrt。
因此如果你当前是通过有线网口 SSH 进 iStoreNext,执行过程中可能会断开连接。
五、推荐操作方式
1. 正常初始化 iStoreNext
先按官方流程完成 iStoreNext 的基础初始化。
2. 上传脚本到宿主机
通过 SSH把两个脚本上传到 iStoreNext 宿主机的 /root/ 目录。
推荐路径如下:
/root/lxc.openwrt.sh
/root/lxcop.firstset.sh
如果你是从 Windows 电脑上传脚本,建议先处理一下换行符,避免因为 CRLF 导致脚本执行异常:
sed -i 's/\r$//' /root/lxc.openwrt.sh
sed -i 's/\r$//' /root/lxcop.firstset.sh
3. 配置无线网卡作为临时入口
建议把无线网卡设置为 wan2,并连接一个可用的无线网络,作为临时网络出口和 SSH 管理入口。
这样做的原因是:
后续脚本会操作并直通 eth0-eth3,如果你从有线网口 SSH 进去执行脚本,很可能会中途断开。
4. 从 wan2 入口 SSH 登录 iStoreNext
通过无线网络对应的 IP 地址 SSH 登录 iStoreNext。
进入后执行:
chmod +x /root/lxc.openwrt.sh
chmod +x /root/lxcop.firstset.sh
bash /root/lxc.openwrt.sh
注意:必须尽量从
wan2入口执行。
因为执行过程中eth0-eth3会被直通给 LXC OpenWrt,有线 SSH 连接可能会中断。
六、没有无线入口怎么办?
如果不方便通过 wan2 入口 SSH 登录,也可以直接接物理显示器和键盘,在 iStoreNext 本机终端执行脚本。
七、执行 lxc.openwrt.sh 后检查 LXC 状态
第一个脚本执行完成后,先检查 OpenWrt 容器是否已经创建并启动:
lxc-ls -f
正常情况下,可以看到类似下面的结果:
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
openwrt RUNNING 1 - - - false
如果容器名称不是 openwrt,后面命令里的 openwrt 需要替换成你实际看到的容器名称。
也可以执行:
lxc-info -n openwrt
如果显示 RUNNING,说明容器已经正常运行。
八、执行 lxcop.firstset.sh 初始化 OpenWrt
lxcop.firstset.sh 是 OpenWrt 容器内的首次初始化脚本,用于配置 OpenWrt 的基础网络、软件源和运行环境。
这里有一个容易踩坑的地方:
通过
lxc-attach进入 OpenWrt 后,看到的是 OpenWrt 容器内部环境,不是 iStoreNext 宿主机环境。
所以不能直接在容器里执行宿主机路径/root/lxcop.firstset.sh。
正确做法是:先把宿主机里的脚本写入 OpenWrt 容器内部,再在容器里执行。
方式一:推荐方式,在宿主机一键写入并执行
在 iStoreNext 宿主机上执行下面命令:
lxc-attach -n openwrt -- sh -c 'cat > /tmp/lxcop.firstset.sh' < /root/lxcop.firstset.sh
lxc-attach -n openwrt -- sh -c "sed -i 's/\r$//' /tmp/lxcop.firstset.sh && chmod +x /tmp/lxcop.firstset.sh && /tmp/lxcop.firstset.sh"
如果你的容器名称不是 openwrt,请把命令里的 openwrt 改成实际容器名称。
方式二:手动进入容器后执行
也可以先进入 OpenWrt 容器:
lxc-attach -n openwrt
进入后可以看到 OpenWrt 的命令行环境。
如果你已经通过其他方式把 lxcop.firstset.sh 放到了容器内,例如 /tmp/lxcop.firstset.sh,则执行:
sed -i 's/\r$//' /tmp/lxcop.firstset.sh
chmod +x /tmp/lxcop.firstset.sh
/tmp/lxcop.firstset.sh
执行完成后输入:
exit
即可回到 iStoreNext 宿主机。
九、执行完成后的访问方式
两个脚本都执行完成后,默认访问方式如下:
| 系统 | 地址 | 用途 |
|---|---|---|
| OpenWrt | 192.168.10.1 |
路由、防火墙、插件、分流等主要功能 |
| iStoreNext | 192.168.10.2 |
Debian 宿主机、LXC 管理、其他服务 |
如果电脑接在 LAN 口上,正常情况下会自动获取 192.168.10.x 地址。
然后浏览器访问:
http://192.168.10.1
即可进入 OpenWrt 后台。
如果要访问宿主机 iStoreNext,则访问:
http://192.168.10.2
十、常用检查命令
1. 检查 LXC 容器状态
lxc-ls -f
lxc-info -n openwrt
2. 进入 OpenWrt 容器
lxc-attach -n openwrt
退出容器:
exit
3. 检查 OpenWrt 网络配置
进入容器后执行:
ip addr
uci show network
也可以重启 OpenWrt 网络:
/etc/init.d/network restart
4. 检查 TUN 是否可用
进入 OpenWrt 容器后执行:
ls -l /dev/net/tun
如果能看到 /dev/net/tun,一般说明 TUN 设备已经正常挂载。
5. 检查 nftables
进入 OpenWrt 容器后执行:
nft list ruleset
如果能正常输出规则集,说明 nftables 基本可用。
十一、注意事项
- 执行脚本前,建议先备份重要配置。
- 操作过程中会调整网口归属,不建议通过有线 LAN SSH 执行。
- 推荐使用无线
wan2或本机显示器键盘执行。 - 如果脚本上传自 Windows,建议确认文件换行符为 LF。
- 如果
lxc-ls -f里看到的容器名称不是openwrt,后续命令要替换成实际容器名。 lxcop.firstset.sh需要在 OpenWrt 容器内部执行,不是在 iStoreNext 宿主机直接执行。- 不建议把 VNC、SSH、LuCI 等管理端口直接暴露到公网,远程管理建议通过 VPN 或内网穿透方案实现。
如果出现脚本无法执行,可以先执行:
sed -i 's/\r$//' /root/lxc.openwrt.sh
sed -i 's/\r$//' /root/lxcop.firstset.sh
chmod +x /root/lxc.openwrt.sh
chmod +x /root/lxcop.firstset.sh
然后再运行:
bash /root/lxc.openwrt.sh
十二、简单故障排查
1. 执行过程中 SSH 断开
大概率是因为你从有线网口 SSH 进入宿主机,而脚本执行过程中把 eth0-eth3 直通给了 OpenWrt。
建议改用以下方式之一:
- 从无线
wan2入口 SSH 登录; - 直接接显示器和键盘本机执行;
- 等脚本执行完成后,从 LAN 口重新接入
192.168.10.0/24网段。
2. 访问不了 192.168.10.1
可以先检查电脑是否获取到了 192.168.10.x 地址。
如果没有获取到,可以尝试:
- 换一个 LAN 口;
- 重新插拔网线;
- 手动给电脑设置一个同网段地址,例如
192.168.10.100; - 进入宿主机检查 OpenWrt 容器是否运行:
lxc-ls -f
lxc-info -n openwrt
3. 第二个脚本执行不了
先确认宿主机上脚本存在:
ls -l /root/lxcop.firstset.sh
再确认容器名称:
lxc-ls -f
然后重新把脚本写入容器并执行:
lxc-attach -n openwrt -- sh -c 'cat > /tmp/lxcop.firstset.sh' < /root/lxcop.firstset.sh
lxc-attach -n openwrt -- sh -c "sed -i 's/\r$//' /tmp/lxcop.firstset.sh && chmod +x /tmp/lxcop.firstset.sh && /tmp/lxcop.firstset.sh"
十三、结语
以上就是这次在 EasyPi R2 / iStoreNext 上折腾 LXC 原版 OpenWrt 的完整思路和操作流程。
这个方案的好处是不用放弃 iStoreNext 的 Debian 能力,同时又能把 OpenWrt 的路由功能完整跑起来。
目前我这边测试 EasyTier、TUN、nftables、常用插件和 2.5G 内网测速都比较正常。
不同版本的 iStoreNext、OpenWrt、软件源和个人网络环境可能会有差异,大家操作前还是建议做好备份。
如果有更好的优化方案,也欢迎一起交流。
附图:
