前两篇文章已经分别介绍了如何将路由器刷为OpenWrt,以及如何为家庭内的主副两台OpenWrt路由器配置网络与无线mesh。到目前为止,家庭已经可以正常上网。
本篇文章介绍如何在OpenWrt系统中安装OpenWrt-Nikki软件包,并进行网关透明代理配置。说明一下,我配置的目的是为了解决家庭中部分不支持安装代理客户端的设备的科学上网问题,如果没有类似的需求,完全可以通过在各终端设备上安装客户端。
Nikki安装
此处步骤参考Nikki仓库中的README。
首先添加软件源:
1$ wget -O - https://github.com/nikkinikki-org/OpenWrt-nikki/raw/refs/heads/main/feed.sh | ash添加软件源后安装nikki:
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需求的前提下,尽可能精简了配置,只包含以下内容:
proxies:节点配置,个人使用的是xray reality协议。
geo配置:配置GEOSITE、GEOIP文件的来源以及更新时间,我设置的上游是Loyalsoldier / v2ray-rules-dat。
sniffer、tun:我没有深究细节,总之都打开并直接抄了mihomo的快捷配置
dns:现在主推的是fake-ip,然而我在实际使用的时候总是会遇到一些意想不到的小问题,因此还是借鉴了一些Linux Do帖子的配置,使用了redir-host模式。
rule-providers、rules:规则配置,决定了代理工具如何分流。我使用的是大陆白名单模式,配置方式基本照抄Loyalsoldier / clash-rules。为避免steam等游戏文件下载走了代理烧我流量,额外添加了一条
geosite:category-games@cn规则。
最终形成的配置文件如下:
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查看详细情况了。