[路由器] 红米AX6000 ImmortalWrt 18.06升级到24.10.2,配置npc

原有路由器是红米AX6000最开始图方便直接用了网友的ImmortalWrt18.06,其支持的OpenClash版本太低,不支持http协议。于是这次索性就直接升级一下ImmortalWrt到最新。

升级前

shell 复制代码
系统
主机名	ImmortalWrt
主机型号	Xiaomi Redmi Router AX6000
架构	ARMv8 Processor rev 4 (v8l) x 4 (40.8°C)
温度	CPU:41.0°C, 2.4G:42°C, 5G:46°C
目标平台	mediatek/mt7986
固件版本	ImmortalWrt 18.06-5.4-SNAPSHOT r11928-ae6ff3410 / LuCI openwrt-18.06-k5.4 branch (git-23.178.42687-494cc11)
内核版本	5.4.224
本地时间	Tue Sep 2 20:59:40 2025
运行时间	23h 21m 47s
平均负载	0.00, 0.08, 0.14
CPU 使用率(%)	20%

参考:ImmortalWrt从0到能正常用教程(刷机、安装、mesh组网、插件安装,以及遇到坑)-磊科无线路由器及网络设备-恩山无线论坛 - Powered by Discuz!

升级

软件安装

  • 换源:ImmortalWrt 软件仓库镜像使用帮助 - MirrorZ Help

    执行 opkg update

  • openclash:通过web界面 系统 -> 软件包 界面刷新软件列表后搜索 openclash然后更新。如果刷新失败,可以ssh执行opkg update,安装失败则通过opkg install试试

    如果没有看到 服务 -> openclash 需要退出重新登陆

    给openclash添加配置文件,它会自己下载内核工作应该是正常的

  • upnp: opkg install luci-app-upnp

    然后去打开upnp开关,对bt下载和部分游戏有用

  • npc: 直接通过软件包管理安装npc即可,ssh连接后输入npc按照提示配置即可,需要cd /usr/bin 然后再注册

    如果运行失败,需要修改/etc/init.d/nps*这个脚本内容,完整内容放到最下面了。

  • wifi: 网络 -> 无线

​ 第四个点击编辑,设置wifi名字,加密算法和密码就行了。如果不需要2.4G,就把第二个禁用就行

遇到的断网问题

然后突然发现没有网络了,opkg update不能执行了,经过查找可能是关于opkg update报错无法下载的解决方法(换源无效、源用浏览器可访问时)-OPENWRT专版-恩山无线论坛 - Powered by Discuz! 这个问题。

但是我操作之后不好用,或者再接口中设置一下WAN的DNS,指定一个可用的dns。参考记录 OpenWrt 执行 opkg update 命令报错 Failed to download,但是换源无效且源用浏览器可访问的解决方案 - 余独好修以为常 - 博客园

但是依旧不行,经过排查发现 /etc/resolv.conf 始终是 127.0.0.1,修改之后只要重启dnsmasq就会变回来。nslookup baidu.com后发现解析结果是 198.18.0.4,这是个保留地址,怀疑可能是openclash的问题。经过查询得知如下[Bug] 开启openclash后ping域名变成198.x.x.x · Issue #4047 · vernesong/OpenClash 切换为redir-host即可 需要注意设置完了之后,点击最下面的应用配置才行

实际上经过各种折腾之后,换了个机场就好了。也许上面的方法确实有用,但跟我此次的情况不同

升级之后

shell 复制代码
主机名	ImmortalWrt
型号	Xiaomi Redmi Router AX6000 (stock layout)
架构	ARMv8 Processor rev 4 (v8l) x 4
温度	CPU: 40.0°C, WiFi: 42.0°C 46.0°C
目标平台	mediatek/filogic
固件版本	ImmortalWrt 24.10.2 r33247-467867283bb9 / LuCI openwrt-24.10 branch 25.175.22647~dbf5de0
内核版本	6.6.93
本地时间	2025-09-02 23:11:14
运行时间	0h 14m 21s
平均负载	0.02, 0.08, 0.08
CPU 使用率(%)	3%

NPC服务配置失败

出现,原因是因为is_running函数中使用ps命令检查对应Pid是否运行中,但是openwrt的ps命令参数和正常的不一样

shell 复制代码
root@ImmortalWrt:/etc/init.d# ./nps-client-2e435060b1 start
Starting nps-client-2e435060b1
Unable to start, see /var/log/nps-client-2e435060b1.log and /var/log/nps-client-2e435060b1.err
  • 原来的基础上增加 /etc/rc.commonSTARTSTOP
  • is_running中原先使用ps判断进程是否存在,改为kill -0
shell 复制代码
#!/bin/sh /etc/rc.common
# chkconfig: - 99 01
# description: NPS 内网穿透客户端
# processname: /usr/bin/npc

START=99
STOP=01

cmd="/usr/bin/npc -server=xxxx.com:xxx -vkey=cxxxxxx -debug=false -log_path=/var/log/npc-xxx.log"
name="$(basename $(readlink -f $0))"
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

[ -e "/etc/sysconfig/$name" ] && . "/etc/sysconfig/$name"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && kill -0 "$(get_pid)" >/dev/null 2>&1
}

start() {
    if is_running; then
        echo "Already started"
        return 0
    fi
    echo "Starting $name"
    $cmd >>"$stdout_log" 2>>"$stderr_log" &
    echo $! >"$pid_file"
    sleep 1
    if ! is_running; then
        echo "Unable to start, see $stdout_log and $stderr_log"
        return 1
    fi
}

stop() {
    is_running || { echo "Not running"; return 0; }
    echo -n "Stopping $name"
    kill "$(get_pid)"
    for i in $(seq 1 10); do
        is_running || { echo ""; echo "Stopped"; rm -f "$pid_file"; return 0; }
        echo -n "."
        sleep 1
    done
    echo ""
    if is_running; then
        echo "Not stopped; may still be shutting down"
        return 1
    fi
    rm -f "$pid_file"
}

restart() {
    stop && start
}

status() {
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        return 1
    fi
}

修改完毕之后,执行./nps-client-cxxxxxxxxxx enable 实现开机自启 disable取消开机自启