EasePi R2 基于iStoreNext系统的LXC原版openwrt配置手册(四网口直通)

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 基本可用。


十一、注意事项

  1. 执行脚本前,建议先备份重要配置。
  2. 操作过程中会调整网口归属,不建议通过有线 LAN SSH 执行。
  3. 推荐使用无线 wan2 或本机显示器键盘执行。
  4. 如果脚本上传自 Windows,建议确认文件换行符为 LF。
  5. 如果 lxc-ls -f 里看到的容器名称不是 openwrt,后续命令要替换成实际容器名。
  6. lxcop.firstset.sh 需要在 OpenWrt 容器内部执行,不是在 iStoreNext 宿主机直接执行。
  7. 不建议把 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、软件源和个人网络环境可能会有差异,大家操作前还是建议做好备份。
如果有更好的优化方案,也欢迎一起交流。

附图:

1 个赞