软路由极致折腾手册:从底层存储到全能网关

第一阶段:网络环境初始化

刷机后的 R2S 是“白纸”一张,无法下载插件。我们需要利用电脑作为“奶妈”提供初始流量。

1. 利用 Clash Verge 局域网共享(详细步骤)

如果你电脑上有 Clash Verge 且有节点,可以让 R2S “借道”翻墙。

  • 电脑端设置
    1. 打开 Clash Verge,进入 设置 (Settings) -> 系统设置
    2. 找到 允许局域网 (Allow LAN) 开关,将其打开。
    3. 记录下电脑的 局域网 IP 地址(例如 192.168.10.10)和 混合端口 (Mixed Port)(通常是 78907897)。
    4. 注意:如果连接失败,请暂时关闭 Windows 防火墙或允许 Clash 通过防火墙。
  • R2S 端设置 (HomeProxy)
    1. 安装并进入 HomeProxy
    2. 添加一个节点,类型选 手动 (Manual)
    3. 地址 (Address):填写你电脑的 IP(如 192.168.10.10)。
    4. 端口 (Port):填写 Clash 的端口(如 7897)。
    5. 保存并启用,此时 R2S 即可正常下载后续插件。

2. Nikki安装与配置

  • 核心步骤:HomeProxy 稳定后安装 Nikki 并导入配置文件。
  • 【避坑重点】:配置文件中 UI 控制面板相关的几行代码严禁注释,否则初次使用无法打开UI面板!
  • 配置文件 删除QUIC模块: ports: [443, 8443],原因,保留这个模块后,国内淘宝APP卡顿。
  • 保持状态:全程保持翻墙状态,否则 UI 面板数据无法下载,会导致插件空壳运行。

第二阶段:安装Docker 防坑与硬盘锁

R2S 系统闪存极其有限,必须通过“物理手段”防止系统盘爆满。

1. 磁盘分区与逻辑

  • 软件包常规安装 DiskMan
  • 使用 DiskMan 进行分区:
    • Docker 分区:划分 10GB 空间。
    • 剩余存储区:剩余空间格式化为 ext4,并挂载为 /mnt/tf-disk

2. 【核心】chattr +i 系统盘防爆锁

必须在挂载硬盘前,于 SSH 执行:

Bash

# 1. 创建入口文件夹
mkdir -p /opt/docker

# 2. 安装锁定工具
opkg update && opkg install chattr

# 3. 锁定系统盘坑位(防止数据“掉入”系统闪存)
chattr +i /opt/docker

3. 精准挂载与 Docker 安装

  • 路径:系统 -> 挂载点 -> 添加。
  • 设置:将 10GB 分区 挂载到 /opt/docker
  • 自动挂载策略
    • 自动挂载未配置分区取消勾选 (OFF)(防止路径偏移)。
    • 自动挂载已配置分区保持勾选 (ON)(确保重启后硬盘自动就位)。

4.在 SSH 终端中重启路由器:

Bash

reboot

验证锁定与挂载: 重启回来后,请务必执行以下命令验证你的 10G 硬盘 是否已经成功“盖住”了那个锁死的坑位:

Bash

df -h | grep /opt/docker
  • 预期结果:你应该能看到类似 /dev/sda1(你的分区名)挂载在 /opt/docker 下,且容量显示为 10G
  • 如果看到了 10G:恭喜,你可以立即执行 opkg install luci-app-dockerman 开始安装 Docker 了!

5.安装 Docker

重启路由器后,在 SSH 执行:

# 更新并安装 Docker 管理插件及中文语言包
opkg update
opkg install luci-app-dockerman
opkg install luci-i18n-dockerman-zh-cn
  • 由于 /opt/docker 被锁且已被 10G 硬盘覆盖,镜像将直接进入硬盘。

6.核心避坑:解决 Docker 端口打不开的问题

问题描述:

你安装了 Docker 插件(如 Jellyfin 8096 或 Navidrome 4533),且在 Docker 管理界面看到端口映射 0.0.0.0:xxxx 已经生效,但使用浏览器访问 路由器IP:端口 却提示“连接超时”或“无法访问”。

原因分析:

ImmortalWrt 默认的防火墙规则出于安全考虑,将**“默认转发(Forward)”**设置为了“拒绝(Reject)”。由于 Docker 容器运行在虚拟网桥(docker0)上,访问容器属于跨区域流量,会被防火墙直接拦截。

解决方案:

  1. 登录 Web 管理后台。
  2. 进入 网络 -> 防火墙 -> 常规设置
  3. 找到 “默认转发” 选项,将其从 “拒绝” 修改为 “接受 (Accept)”
  4. 点击底部的 “保存并应用”

第三阶段:安装文件分享Samba

针对 Win11 访问需要用户名密码的情况,手动创建 xxx 用户。

1.软件包常规安装Samba

2. SSH 创建用户

Bash

# 1. 安装工具
opkg update && opkg install shadow-useradd
# 2. 创建用户(不创建家目录,禁止 shell 登录)
useradd -M -s /bin/false sirenyan
# 3. 设置 Samba 密码(输入 sirenyan)
smbpasswd -a sirenyan

3.创建剩余磁盘空间

在磁盘管理中,把当前系统存储卡的剩余空间创建并格式化为ext4

并在挂载点中创建一个挂载点:/mnt/tf-disk

4. 网页端配置 (Samba)

进入:服务 -> 网络共享 (Samba) -> 共享目录 (针对 tf-disk)。

  • 允许用户 (Allowed users):填入 sirenyan
  • 允许访客:可以取消勾选或保留。
  • 强制 Root:取消勾选(使用 sirenyan权限)。

4. 权限修正

若无权限读写,勾选强制 Root即可,但不推荐,推荐以下方案,执行:

Bash

# 将文件夹及其内部所有文件的“所有者”改为 sirenyan
chown -R sirenyan:sirenyan /mnt/tf-disk
chmod -R 755 /mnt/tf-disk

第四阶段:安装iStore 和首页

1. iStoreOS 商店核心安装方案

在原生 ImmortalWrt 终端中执行以下脚本。该方案利用 /tmp 内存目录作为中转,安全且高效。

Bash

opkg update || exit 1
cd /tmp
wget https://github.com/linkease/openwrt-app-actions/raw/main/applications/luci-app-systools/root/usr/share/systools/istore-reinstall.run
chmod 755 istore-reinstall.run && ./istore-reinstall.run

关键点解析:

  • opkg update || exit 1:这是脚本的“保险开关”。opkg update 负责更新软件列表,如果更新失败(例如网络不通),exit 1 会立即停止后续操作,防止在错误的环境下继续安装。
  • /tmp 目录:在内存中运行安装包,保护路由器的闪存(Flash)寿命。

2.安装网络向导与首页 (ARM64 & x86-64 通用)

安装完商店核心后,为了获得更好的交互体验和类似 iStoreOS 的首页外观,需要手动安装中文语言包和快速启动插件:

执行指令:

is-opkg install luci-i18n-quickstart-zh-cn

作用说明:

  • is-opkg:这是 iStore 专用的包管理命令。
  • 首页功能:安装后,你的路由器后台会多出一个“首页”菜单,提供直观的设备状态监控、网络状态展示以及应用快捷入口。

第五部分:安装Tailscale

1. 准备工作

访问 asvow/luci-app-tailscale 下载以下适用于 R2S 的特定版本文件:

  • 主程序:luci-app-tailscale_1.2.6_all.ipk
  • 简体中文包:luci-i18n-tailscale-zh-cn_250509.33792_all.ipk

2. 安装核心依赖

首先,我们需要安装 Tailscale 程序本身和 SSL 证书支持。

opkg update
opkg install tailscale ca-bundle

3. 上传并覆盖安装插件

将下载好的两个 .ipk 文件通过 WinSCP 上传到路由器的 /tmp 目录。

注意:由于该插件会替换系统原有的启动脚本,必须使用 --force-overwrite 参数,否则会提示文件冲突。

cd /tmp
opkg install --force-overwrite luci-app-tailscale_1.2.6_all.ipk luci-i18n-tailscale-zh-cn_250509.33792_all.ipk

4. 清理缓存与启动

执行以下命令清理界面缓存并启动服务:

rm -rf /tmp/luci-indexcache
/etc/init.d/tailscale enable
/etc/init.d/tailscale start

5. 账号绑定与初始化

  • 进入后台:刷新路由器网页,在 “服务” -> “Tailscale” 即可看到控制界面。

第六部分:Tailscale直连优化与避坑

如果你希望手机在外面能通过 Tailscale 使用家里的 R2S 旁路由代理上网,并能像在家里一样管理主路由和 Docker 服务,以下设置是成功的关键。

1. 联动 Nikki/Clash 翻墙与 MTU 优化

在旁路由环境下,让代理插件感知并处理来自 Tailscale 的流量是第一步。由于 Tailscale 的流量经过加密封装,如果不将其接口告知代理插件,流量会绕过代理直接流出。

在 Nikki 插件中进行如下设置:

  • Nikki 设置:进入“代理配置” -> “局域网代理”中,将 tailscale0 添加到入站接口(Inbound Interfaces)。这确保了手机传回 R2S 的流量在解密后能立即进入代理分流逻辑。

为了防止因 MTU 大小不匹配导致的数据包分片丢失,建议在防火墙规则中添加以下 MSS 钳制命令。这能显著提升网页加载的顺滑度,防止因 5G 或公共 WiFi 环境导致的卡顿(可选):

nft add rule inet fw4 forward oifname "eth0" tcp flags syn tcp option maxseg size set rt mtu

2. 禁止Tailscale接管系统DNS(必做)

Tailscale 默认接管了系统的 DNS 设置。 当它启动时,会尝试将系统的 DNS 修改为它自己的服务器(通常是 100.100.100.100),或者强制推送到 /etc/resolv.conf。在旁路由模式下,这往往会破坏原本指向主路由或 SmartDNS 的解析路径,导致系统无法解析外部域名,因此必须执行禁用。

请在 SSH 终端执行以下命令:

tailscale up --accept-dns=false --reset 

--accept-dns=false:拒绝接受官方 DNS 设置。这是旁路由环境的“救命参数”,防止 Tailscale 修改系统 DNS 导致与 Nikki/Clash 产生死锁,确保 DNS 解析权掌握在 R2S 代理手上。

下面的完整命令,包括:DNS 处理方式、路由宣告、出口节点能力,可在插件界面设置中设置路由宣告、出口节点(可选):

tailscale up --reset --advertise-exit-node --advertise-routes=192.168.10.0/24 --accept-dns=false

上述命令中参数的详细设置要点如下:

  • --advertise-exit-node:宣称自己为“出口节点”。它是实现“异地借线翻墙”的核心,允许其他设备将全局流量发给 R2S 转发。
  • --advertise-routes=192.168.10.0/24:宣称内网网段路由。让手机在外网也能像在家里一样,通过 192.168.10.x 访问 NAS 或管理主路由。

3. 插件界面设置与官网后台“放行”

在完成 SSH 命令后,还需要通过图形界面确认状态,并去 Tailscale 云端控制台手动授予转发权限。

在 R2S 的 Tailscale 插件高级设置中确认以下项:

  • 启用路由:勾选(允许接受其他节点广播的子网)。
  • 允许 DNS:勾选(使用管理控制台的 DNS 配置)。
  • 出口节点:勾选(确认为 Tailscale 广域网出口)。
  • 公开网段:确保列表中已添加 192.168.10.0/24

随后登录 Tailscale 官网后台进行 Edit route settings 操作:

  • 登录 Tailscale Admin Console
  • 找到 R2S 设备,点击右侧三个点,选择 Edit route settings
  • 必须勾选 Use as exit node:确认该设备可以作为全网出口。
  • 必须勾选 192.168.10.0/24:确认允许该设备转发此内网网段的流量。

4. 解决“无法管理主路由 (10.1)”:NAT 规则配置

即便开启了子网路由,由于主路由(如高恪)默认不认识 Tailscale 的 100.x 网段,回程包会发往 WAN 口导致丢失。我们需要在 R2S 的防火墙中配置 MASQUERADE(IP 伪装),让主路由以为是 R2S 本身在访问它,才可以在外网打开192.168.10.1主路由地址(最新测试,可选,没做也可以访问)。

在“网络” -> “防火墙” -> “NAT 规则”中新建如下参数:

  • 名称Tailscale-MASQ
  • 地址族限制:选择 仅 IPv4
  • 协议:选择 任意
  • 出站区域:选择 lan (对应 R2S 连接主路由的物理接口 br-lan)。
  • 源地址:选择 任意
  • 目标地址:选择 任意
  • 操作 (Action):选择 MASQUERADE - 自动重写源地址为出站接口 IP

5. 解决“打不开 Google.com”:DNS 覆盖(必做)

这是最容易被忽视的坑:手机开启出口节点后,如果解析不到真实国外 IP,翻墙就会失败。

操作路径:Tailscale 官网后台 -> DNS -> Nameservers -> Add nameserver。

添加 Nameservers

  • 添加 1.1.1.1 (Cloudflare):点击设置,开启 Use with exit node。确保手机拿到真实国际 IP 以触发代理。
  • 添加 223.5.5.5 (阿里):点击设置,开启 Use with exit node。保证国内 App 访问速度。
  • 开启覆盖:确保 Override local DNS 开关为 开启 (蓝色)

6. Docker 访问配置:打通虚拟网卡权限(必做)

如果你在 Docker 中运行了服务(如 Navidrome 音乐服务器、Jellyfin 等),默认情况下 Tailscale 流量无法进入 Docker 虚拟网络。

请在 R2S 后台的“Docker” -> “配置”中执行以下操作:

  • 找到 “允许的访问接口” 选项。
  • 在列表中手动勾选或填入 tailscale0
  • 点击“保存并应用”。这一步能确保来自 Tailscale 隧道的流量可以穿透 Docker 的虚拟防火墙。

7. 高恪 (GoCloud) 主路由映射与状态验证

最后,需要在高恪主路由上为 Tailscale 开启“直连快车道”,以确保异地组网的低延迟体验。

在高恪主路由中按以下路径和参数进行配置:

  • 路径:网络设置 -> 端口映射 -> 端口映射。点击“新建”:
  • 名称Tailscale-Direct
  • 协议UDP
  • 外部端口41641
  • 内部 IP 地址:填写 R2S 的内网 IP(如 192.168.10.3
  • 内部端口41641
  • 端口回流:禁用(保持默认即可)。
  • 关闭 UPnP:建议在高恪中关闭 UPnP 功能,避免随机端口抢占导致手动映射失效。

为了保证打洞成功率,请在 R2S 的防火墙常规设置中,将 入站数据、出站数据、转发 全部改为 “接受 (Accept)”。最后在 SSH 中输入以下命令验证是否成功直连:

tailscale status --active

判定标准:若显示 active; direct,说明 UDP 打洞成功,延迟最低。若显示 relay,则说明正在走服务器中转,请检查高恪端口映射是否生效。

第六阶段:安装Cloudflare Tunnel

  • 软件安装:iStore 中常规安装 Cloudflare。
  • 令牌 (Token):直接粘贴以 ey... 开头的超长令牌。
  • 证书上传:在 Cloudflare 官网选择域名后,系统会自动下载 cert.pem,需在路由器插件界面对应的“源站证书”位置上传。

第七阶段:媒体中心——Navidrome 防火墙神坑

  • 安装:Docker 部署 Navidrome 镜像。
  • 故障现象:服务正常但 http://192.168.10.3:4533 无法打开。
  • 解决方案:进入 网络 -> 防火墙 -> 常规设置,将 转发 (Forward) 设为 接受 (ACCEPT)
  • 原理:这是为了打通 LAN 区域到 Docker 区域(172.17.x.x)的“跨区”传送门。

其它操作

GoWebDav:将剩余空间映射到 /mnt/tf-disk 后,在此插件中开启共享,方便网页端文件存取。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注