windowBR
文章8
标签8
分类2

文章分类

文章归档

手把手教你如何在飞牛 OS 中使用网络代理

手把手教你如何在飞牛 OS 中使用网络代理

近日飞牛OS(fnOS)开启了公测,我也第一时间开始了尝鲜,但很快便遇到一个问题:系统的网络设置中并未提供代理设置的选项。

没有代理设置怎么行,这可是直接与世界脱离连接了啊,于是我便开始努力寻找解决方案,最后得到了一个并不完美但可行的方案:使用虚空终端 mihomo(clash meta) 及对应的 WebUI。

本文主要面向有一定动手能力但毫无知识储备的小白,所以如果你有一定基础可能会觉得本文比较啰嗦。

启用 ssh

知道怎么 ssh 连接的读者可直接跳过该部分

更改系统设置

进入 fnOS 后台,打开系统设置→SSH,并将其启用。

image-20240917181931034

测试连接

使用任意 ssh 工具连接测试。如果您并不知道任何 ssh 工具,可以直接使用 Powershell 或者在以下软件中任选一个喜欢的:Xshell、MobaXterm、WinSCP、、PuTTY、Termius。

以下是部分连接举例。

Powershell
1
2
3
4
# 输入下方命令,自行替换用户名和 IP
ssh 用户名@IP
# 举例如下
ssh windowbr@192.168.1.1

这一步需要你输入密码,输入过程中不会显示,输入完成后直接回车

若您看到类似以下字样则代表连接成功

1
windowbr@MyNAS:~$
Termius

image-20240917183749268

依次填入 IP、用户名、密码后连接。

其余 ssh 客户端请自行研究,都大同小异不再赘述

安装 mihomo

下载 mihomo

前往 mihomo 发布页面 下载安装包,根据文档中的我应该下载哪个文件? 来选择合适的版本。

若您查看了文档后仍然没有头绪可以优先选择该格式的文件:mihomo-linux-amd64-<版本号>.deb
不保证一定能用,但大多数机器应该可以,建议还是自己看懂官方文档选择适合自己的版本

然后用任何你喜欢的方式将安装包上传到 NAS,当然你也可以直接 ssh 进去使用终端下载,但如果你都会这么做了也不需要看这部分教程了不是吗

安装 mihomo

首先参考第一部分的教程使用 ssh 连接到 NAS,然后输入cd命令切换到安装包路径。

1
2
# 自行替换为安装包路径
$ cd 安装包路径

如果你不知道路径是什么,就前往文件管理→右键存放安装包的文件夹→详细信息→复制原始路径,然后直接粘贴到对应位置
注:许多 ssh 工具无法使用 Ctrl+C/V 复制粘贴,请使用 Ctrl+insert 复制,shift+insert 粘贴

你可以使用ls命令来确认以下是否成功,如果成功了你应该能看到显示出了该文件夹内的文件(包括刚刚下载的安装包)

使用dpkg命令安装

1
2
# 自行替换为安装包的文件名
$ sudo dpkg -i 文件名

这一步或许会需要你输入密码,输入过程中不会显示,输入完成后直接回车

安装 webUI

这一步不是必须的,但我强烈建议你安装以便管理

本教程使用的 webUI 为 metacubexd,另推荐 yacd,可选择自己喜欢的进行使用,安装过程大同小异

使用以下命令拉取镜像并运行

1
$ sudo docker run -d --restart always -p 9097:80 --name metacubexd ghcr.io/metacubex/metacubexd

这行命令将 WebUI 的端口设置为 9097,你可以更改为自己喜欢的端口

如果一切顺利,你应该能在 docker 容器中看到 metacubexd

image-20240917202723550

使用浏览器输入IP:端口来访问 WebUI(即使现在它并没有实际作用,但你也应该能够访问)

一切正常的话你应当看到这样的界面

image-20240917210247919

编写 config.yaml

自行创建文本文档,命名为 config.yaml,并填入以下内容

其中 proxy-providers 内的几个尖括号需要你自行更改(修改后不含尖括号),提供者名称和前缀可随意填写,仅影响显示不影响使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '0.0.0.0:9090'

tun:
enable: true
stack: mixed
dns-hijack:
- "any:53"
- "tcp://any:53"
auto-route: true
auto-redirect: true
auto-detect-interface: true

proxy-providers:
<节点提供者名称>:
url: "<节点订阅链接>"
type: http
interval: 86400
health-check: {enable: true,url: "https://www.gstatic.com/generate_204", interval: 300}
override:
additional-prefix: "<节点名称前缀>"

proxies:
- name: "直连"
type: direct
udp: true

geodata-mode: true
geox-url:
geoip: "https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat"
geosite: "https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
mmdb: "https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb"
asn: "https://mirror.ghproxy.com/https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"

dns:
enable: true
ipv6: true
respect-rules: true
enhanced-mode: fake-ip
fake-ip-filter:
- "*"
- "+.lan"
- "+.local"
- "+.market.xiaomi.com"
nameserver:
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
proxy-server-nameserver:
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
nameserver-policy:
"geosite:cn,private":
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query
"geosite:geolocation-!cn":
- "https://dns.cloudflare.com/dns-query"
- "https://dns.google/dns-query"

proxy-groups:

- name: 默认
type: select
proxies: [自动选择,直连,香港,台湾,日本,新加坡,美国,其它地区,全部节点]

- name: Google
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: Telegram
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: Twitter
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: 哔哩哔哩
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: 巴哈姆特
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: YouTube
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: NETFLIX
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: Spotify
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: Github
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

- name: 国内
type: select
proxies: [直连,默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择]

- name: 其他
type: select
proxies: [默认,香港,台湾,日本,新加坡,美国,其它地区,全部节点,自动选择,直连]

#分隔,下面是地区分组
- name: 香港
type: select
include-all: true
filter: "(?i)港|hk|hongkong|hong kong"

- name: 台湾
type: select
include-all: true
filter: "(?i)台|tw|taiwan"

- name: 日本
type: select
include-all: true
filter: "(?i)日|jp|japan"

- name: 美国
type: select
include-all: true
filter: "(?i)美|us|unitedstates|united states"

- name: 新加坡
type: select
include-all: true
filter: "(?i)(新|sg|singapore)"

- name: 其它地区
type: select
include-all: true
filter: "(?i)^(?!.*(?:🇭🇰|🇯🇵|🇺🇸|🇸🇬|🇨🇳|港|hk|hongkong|台|tw|taiwan|日|jp|japan|新|sg|singapore|美|us|unitedstates)).*"

- name: 全部节点
type: select
include-all: true

- name: 自动选择
type: url-test
include-all: true
tolerance: 10

rules:
- GEOIP,lan,直连,no-resolve
- GEOSITE,github,Github
- GEOSITE,twitter,Twitter
- GEOSITE,youtube,YouTube
- GEOSITE,google,Google
- GEOSITE,telegram,Telegram
- GEOSITE,netflix,NETFLIX
- GEOSITE,bilibili,哔哩哔哩
- GEOSITE,bahamut,巴哈姆特
- GEOSITE,spotify,Spotify
- GEOSITE,CN,国内
- GEOSITE,geolocation-!cn,其他

- GEOIP,google,Google
- GEOIP,netflix,NETFLIX
- GEOIP,telegram,Telegram
- GEOIP,twitter,Twitter
- GEOIP,CN,国内
- MATCH,其他

我不会详细介绍各配置项的内容及其含义,需要详细了解的请自行查阅 mihomo 文档

在 NAS 中新建一个文件夹,名称随意,建议命名为 mihomo,将刚刚编写的 config.yaml 放入其中。

启用 mihomo

前台运行

使用 ssh 连接,输入以下命令

1
2
# 自行替换为 config.yaml 文件所在的文件夹的路径
$ sudo mihomo -d 路径

这一步或许会需要你输入密码,输入过程中不会显示,输入完成后直接回车

找不到路径的前文有说明,自行往回翻阅

进入 WebUI(安装 WebUI 部分有说明),若需要输入后端地址则输入http://IP:9090

至此,你应该已经能够自行使用并畅游网络了

如果需要结束 mihomo 的进程,在终端中使用快捷键 Ctrl+C

注:若您没有安装 WebUI,请自行研究相关管理方案,因为我也不会,所以不会提供纯命令行使用 mihomo 的教学

但你很快就会发现,这种方法在你关闭 ssh 后立马就无法继续使用,所以除非你只是偶尔临时使用,否则请继续往下看

后台运行

我的后台运行方案基于screen,其他方法自行研究。

screen 是一个终端多窗口软件,可以使终端能做到类似 Windows 一样将窗口最小化并挂起,即使关闭终端也不会关闭使用 screen 创建的窗口

所以本方法的原理基本相当于开一个窗口前台运行 mihomo,然后把它最小化挂在那

安装 screen

ssh 连接,依次输入以下命令

1
2
3
4
5
# 更新软件包
$ sudo apt update
$ sudo apt upgrade
# 安装screen
$ sudo apt install screen

这一步或许会需要你输入密码,输入过程中不会显示,输入完成后直接回车

创建窗口并运行 mihomo
1
2
3
# 创建新窗口并进入
# mihomo 为窗口名称,你可意改为自己喜欢的名字
$ screen -R mihomo

进入新窗口后重复上方前台运行步骤即可

退出窗口请使用快捷键 Ctrl+A+D,重新进入窗口的命令与创建并进入窗口的命令相同,设备重启后需重新创建窗口并运行 mihomo。

Q&A

Q:为什么本地运行 mihomo 而使用 docker 运行 WebUI?

A:一开始我是尝试使用 docker 运行 mihomo 的,但我并没有成功让它接管设备流量,懒得研究如何解决该问题所以我决定直接切换到本地运行。

Q:metacubexd 和 yacd 都有在线版本,为什么不用?

A:因为我发现在线版本我连接不上 NAS 的后端,原因未知,有人知道原因的话麻烦评论留言告诉我一下。

Q:为什么 WebUI 选择了 metacubexd 而不是 yacd 或其他?

A:个人选择,你当然可以用 yacd,使用上不会有什么影响。

Q:后台运行为什么使用 screen 这种不够优雅的方式?

A:因为 screen 足够简单好用,我也不刚需开机自启动。

Q:感觉 config.yaml 写得不够好?

A:也许你的感觉是对的,我也是现学现写的,或许不够好但它确实能用,如果有什么改进的方案欢迎留言。

还有其他问题的欢迎留言

本文作者:windowBR
本文链接:http://blog.windowbr.top/2024/09/17/fnos-mihomo/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可