Palemoons' Archive
Palemoons' Archive

OpenWrt折腾记(三):在OpenWrt系统配置OpenWrt-Nikki

如何配置网关透明代理?
发布于 2026827|遵循CC BY-NC-SA 4.0许可

前两篇文章已经分别介绍了如何将路由器刷为OpenWrt,以及如何为家庭内的主副两台OpenWrt路由器配置网络与无线mesh。到目前为止,家庭已经可以正常上网。

本篇文章介绍如何在OpenWrt系统中安装OpenWrt-Nikki软件包,并进行网关透明代理配置。说明一下,我配置的目的是为了解决家庭中部分不支持安装代理客户端的设备的科学上网问题,如果没有类似的需求,完全可以通过在各终端设备上安装客户端。

Nikki安装

此处步骤参考Nikki仓库中的README

首先添加软件源:

bash
1$ wget -O - https://github.com/nikkinikki-org/OpenWrt-nikki/raw/refs/heads/main/feed.sh | ash

添加软件源后安装nikki:

bash
1$ apk add nikki 2$ apk add luci-app-nikki 3$ apk add luci-i18n-nikki-zh-cn

完成安装后可以看到OpenWrt的菜单栏中看到新的“服务”栏,找到“Nikki”后点击进入。

面板入口

Nikki面板配置

进入面板首页,可以看到Nikki提供了非常多的配置选项。

配置文件

用于上传本地yaml文件或者添加订阅,根据自己的情况选择使用哪一种方式。我个人使用的是自建VPS单节点,使用订阅链接+转换器得到的配置文件过于复杂,因此选择编写yaml文件后本地上传。

混入配置

在设置之后,将加载进mihomo核心的配置中。

我选择的策略是,不在这里做任何额外设置,尽可能将全部需要修改的配置放进yaml文件中,方便统一管理。其中的DNS配置改为“不修改”,因为我倾向于使用redir-host,需要在配置文件中单独配置。

代理配置

管理所在网关的代理行为。启用代理配置之后,路由器代理、局域网代理全部启用并保持默认配置。

绕过选项中,我勾选了绕过中国大陆IP。同时设置代理目标端口为”常用端口,以防家里做种设备误走代理烧我流量。

mihomo配置文件

配置文件没有特别的巧思,在我单节点VPS需求的前提下,尽可能精简了配置,只包含以下内容:

  1. proxies:节点配置,个人使用的是xray reality协议。

  2. geo配置:配置GEOSITE、GEOIP文件的来源以及更新时间,我设置的上游是Loyalsoldier / v2ray-rules-dat

  3. sniffer、tun:我没有深究细节,总之都打开并直接抄了mihomo的快捷配置

  4. dns:现在主推的是fake-ip,然而我在实际使用的时候总是会遇到一些意想不到的小问题,因此还是借鉴了一些Linux Do帖子的配置,使用了redir-host模式。

  5. rule-providers、rules:规则配置,决定了代理工具如何分流。我使用的是大陆白名单模式,配置方式基本照抄Loyalsoldier / clash-rules。为避免steam等游戏文件下载走了代理烧我流量,额外添加了一条geosite:category-games@cn规则。

最终形成的配置文件如下:

yaml
1proxies: 2 - name: PROXY 3 type: vless 4 server: example.com 5 port: 1234 6 uuid: uuid 7 network: tcp 8 tls: true 9 udp: true 10 flow: xtls-rprx-vision 11 client-fingerprint: randomized 12 servername: example.com # REALITY 伪装域名 13 reality-opts: 14 public-key: pubkey 15 short-id: shortid 16 17geodata-mode: true 18geox-url: 19 geoip: "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" 20 geosite: "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat" 21 mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb" 22geo-auto-update: true 23geo-update-interval: 24 # 单位:小时 24 25sniffer: 26 enable: true 27 sniff: 28 HTTP: 29 ports: [80, 8080-8880] 30 override-destination: true 31 TLS: 32 ports: [443, 8443] 33 QUIC: 34 ports: [443, 8443] 35 skip-domain: 36 - "Mijia Cloud" 37 - "+.push.apple.com" 38 39tun: 40 enable: true 41 stack: mixed 42 dns-hijack: 43 - "any:53" 44 - "tcp://any:53" 45 auto-route: true 46 auto-redirect: true 47 auto-detect-interface: true 48 49dns: 50 enable: true 51 listen: 0.0.0.0:1053 # 开启 DNS 服务器监听 52 ipv6: true 53 respect-rules: true 54 enhanced-mode: redir-host 55 # 用于解析 nameserver,fallback 以及其他 DNS 服务器配置的,DNS 服务域名 56 # 只能使用纯 IP 地址,可使用加密 DNS 57 default-nameserver: 58 - tls://223.5.5.5 59 - tls://223.6.6.6 60 # 用于 direct 出口域名解析的 DNS 服务器,如果不填则遵循 nameserver-policy、nameserver 和 fallback 的配置 61 direct-nameserver: 62 - https://223.5.5.5/dns-query 63 # 代理节点域名解析服务器,仅用于解析代理节点的域名,如果不填则遵循 nameserver-policy、nameserver 和 fallback 的配置 64 proxy-server-nameserver: 65 - https://223.5.5.5/dns-query 66 # 配置查询域名使用的 DNS 服务器 67 nameserver-policy: 68 geosite:cn,private: 69 - https://120.53.53.53/dns-query 70 - https://223.5.5.5/dns-query 71 - https://223.6.6.6/dns-query 72 - https://1.12.12.12/dns-query 73 geosite:geolocation-!cn: 74 - https://dns.cloudflare.com/dns-query 75 - https://dns.google/dns-query 76 - https://1.1.1.1/dns-query 77 - https://8.8.8.8/dns-query 78 # nameserver-policy 没有匹配到的规则就会使用 nameserver 对应的dns 79 nameserver: 80 - https://doh.pub/dns-query 81 - https://dns.alidns.com/dns-query 82 83rule-providers: 84 reject: 85 type: http 86 behavior: domain 87 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" 88 path: ./ruleset/reject.yaml 89 interval: 86400 90 91 icloud: 92 type: http 93 behavior: domain 94 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" 95 path: ./ruleset/icloud.yaml 96 interval: 86400 97 98 apple: 99 type: http 100 behavior: domain 101 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" 102 path: ./ruleset/apple.yaml 103 interval: 86400 104 105 proxy: 106 type: http 107 behavior: domain 108 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt" 109 path: ./ruleset/proxy.yaml 110 interval: 86400 111 112 direct: 113 type: http 114 behavior: domain 115 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt" 116 path: ./ruleset/direct.yaml 117 interval: 86400 118 119 private: 120 type: http 121 behavior: domain 122 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt" 123 path: ./ruleset/private.yaml 124 interval: 86400 125 126 telegramcidr: 127 type: http 128 behavior: ipcidr 129 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" 130 path: ./ruleset/telegramcidr.yaml 131 interval: 86400 132 133 cncidr: 134 type: http 135 behavior: ipcidr 136 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" 137 path: ./ruleset/cncidr.yaml 138 interval: 86400 139 140 lancidr: 141 type: http 142 behavior: ipcidr 143 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt" 144 path: ./ruleset/lancidr.yaml 145 interval: 86400 146 147 applications: 148 type: http 149 behavior: classical 150 url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt" 151 path: ./ruleset/applications.yaml 152 interval: 86400 153 154rules: 155 - DOMAIN,clash.razord.top,DIRECT 156 - DOMAIN,yacd.haishan.me,DIRECT 157 - GEOSITE,category-games@cn,DIRECT 158 - RULE-SET,applications,DIRECT 159 - RULE-SET,private,DIRECT 160 - RULE-SET,reject,REJECT 161 - RULE-SET,icloud,DIRECT 162 - RULE-SET,apple,DIRECT 163 - RULE-SET,proxy,PROXY 164 - RULE-SET,direct,DIRECT 165 - RULE-SET,lancidr,DIRECT 166 - RULE-SET,cncidr,DIRECT 167 - RULE-SET,telegramcidr,PROXY 168 - GEOIP,LAN,DIRECT 169 - GEOIP,CN,DIRECT 170 - MATCH,PROXY

启动Nikki

最终回到插件配置页面,选择上正确的配置文件,点击保存并应用,即可启动Nikki服务。

启动过程中,可以来到核心日志中检查情况。如果家里网络不好,很有可能遇到country.mmdb、geosite.dat以及geoip.dat三个文件从远程下载失败的问题。

为了解决鸡生蛋蛋生鸡的困境,可以先手动下载这3个文件,接着传入/etc/nikki/run文件夹下。

至此,Nikki服务就能成功运行,点击“打开面板”,即可进入zashborad查看详细情况了。

Reference

  1. OpenWrt-Nikki 仓库 - GitHub

  2. v2ray-rules-dat 仓库 - GitHub

  3. mihomo配置优化,自用配置,防止dns泄露 - Linux Do

  4. clash-rules 仓库 - GitHub

Comments