在服务器上使用 sing-box 代理
背景
服务器上面不能科学上网。以前都是直接 用 ssh 做代理转发 的,但是现在在校外只能使用 rvpn,连接非常不稳定,也无法大流量传输文件,只能考虑在服务器上直接上网。
平时使用 Windows 上的 v2rayN 上网,考虑将其配置迁移到服务器上。由于服务器是多人共享,我有以下需求:
- 不用 systemd 启动。
- 配置私有化,且其他人不能看到配置。
- 用的时候临时启动,用完之后就退出进程。
服务器上的准备
- 服务器上 下载安装 sing-box。
- 服务器上创建一个文件夹 sing-box。
- 在 v2rayN 中点“设置 > 打开存储所在的位置”,文件夹中的
bin\srss
中包含大量geo*
文件。将srss
文件夹拷贝到服务器上的 sing-box 文件夹中。
这一步下载了 sing-box 并且将一些公开配置复制到了服务器上。
准备好配置文件
- 在 v2rayN 中切换到 sing_box 模式,调整好配置。配置包括:代理服务器、DNS、规则、是否运行局域网访问等。
- 在 v2rayN 中点“设置 > 打开存储所在的位置”,文件夹中的
binConfigs\config.json
就是可用的文件。 - 复制一份文件,将
experiment.clash_api
字段删掉。 - 把所有 geo 文件的路径引用全都改成
./srss/geo*
。只要在 sing-box 文件夹启动服务,就可以相对于这个路径访问。 - 把 cache 路径改成
./cache.db
。
这一步得到了一个文件 config.json,先别上传。
对配置文件加密
将处理好的配置文件保存为 config.json,使用 openssl
(WSL 中有)对其加密。参考 https://askubuntu.com/a/160334/ ,不过 des3 加密强度不够,要换一下。
openssl des3 -pbkdf2 -iter 100000 < config.json > config.json.des3
现在得到了新的文件 config.json.des3。将这个文件复制到服务器上的 sing-box 文件夹内。
运行
首先来到 sing-box 文件夹中,然后运行:
openssl des3 -pbkdf2 -iter 100000 -d < config.json.des3 \
| sing-box run -c /dev/stdin
有个在 tmux 中就无法成功运行的问题(提示有 $\mu$ 字符),我个人感觉还是 Windows Terminal 不识别转义序列的问题。进入 tmux 之后别用初始的 panel,开启一个新的 panel 就能用了。参考 tmux attach 的时候出现转义字符序列。
用 ss
验证是否成功:
Tip
输出不一定带有 sing-box 名字(我不确定),如果查不出来可以去掉 grep
,看看列表里面是否出现了期望的端口号。