Realm是一款由rust语言编写的开源高性能端口转发软件,支持多组端点转发,支持tcp&udp和域名解析,详见Github。本文主要介绍如何用该工具中转代理流量。
zhboner/realm
A network relay tool
Rust
1639
291
安装Realm #
为方便起见,可直接在Realm的Releases页面下载对应你系统版本的编译好的压缩文件,解压即可得对应二进制可执行文件realm
。
解压完毕后,赋予其执行权限:
cd /path/to/realm
chmod +x realm
配置Realm #
创建配置文件config.toml
vim config.toml
配置示例
[log]
level = "warn"
output = "realm.log"
[network]
no_tcp = false
use_udp = true
[[endpoints]] #一对端点,监听本机5000端口的流量并将其转发到1.1.1.1的443端口
listen = "0.0.0.0:5000"
remote = "1.1.1.1:443"
[[endpoints]] #可添加多对端点,可自动解析域名
listen = "0.0.0.0:10000"
remote = "www.google.com:443"
[[endpoints]] #若本地有ipv6地址同样可以转发到别的ipv6地址
listen = "0.0.0.0:10000"
remote = "2001:4860:4860::8888:443"
更详细的设置见Github
中转情景 #
现假设有机器A
、B
、C
,其中A
为你的客户端,B
为中转机器,C
为已经搭载了一个节点的机器。A-C
之间可能隔了一堵可悲的厚障壁,也可能路由绕球一圈,总之,让A
和C
直接连接并不是一个好主意。此时若使用B
作为中转机器,你的流量路径(仅讨论去程)就变成了A-B-C
,合理的中转机器选择会让你的网络体验丝滑无比,现在开始配置这三台机器。
首先是中转机器B
,在这台机器上我们需要配置Realm端口转发服务:
[log]
level = "warn"
output = "realm.log"
[network]
no_tcp = false
use_udp = true
[[endpoints]]
listen = "0.0.0.0:8443" #监听本机的8443端口流量
remote = "IP of C:443" #将其转发到C的443端口
而作为远程端点的C
,只需要正常配置节点保证其连通性即可
在客户端A
上,以sing-box的配置为例,我们需要将对应某个outbound
节点的server
和server_port
修改如下:
{
"type": "vless",
"tag": "A-B-C",
"server": "IP of B",
"server_port": 8443,
...余下配置
}
这样,流量路径就被成功调整为
A -> B:8443 -> C:443
若
A
和B
之间相隔了一道大墙,C
上面的节点协议务必使用经过加密混淆的协议,否则可能导致悲剧的发生。从A
发出的到B
的流量仍然是经过加密的流量,比如落地机C
使用的是vless+reality
,那么A
发出的流量也是该协议的流量,B
仅仅作为透明转发而不关心里面的内容。
将Realm添加到系统服务 #
假设你已拥有root权限,以Debian为例:
- 创建服务单元文件
vim /etc/systemd/system/realm.service
- 在其中写入以下内容:
[Unit]
Description=Realm Service
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Type=simple
ExecStart=/path/to/realm/realm -c /path/to/realm/config.toml
User=root
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
将ExecStart
中的路径换为你自己的realm
路径即可
- 启用服务
systemctl daemon-reload
systemctl start realm.service
systemctl enable realm.service
systemctl status realm.service
以上命令会启用服务并显示其执行状态,若为active
则表示服务启动成功
- 实时查看日志
journalctl -u realm.service -f