Skip to main content

使用Realm端口转发工具中转代理流量

·160 words·1 min· loading · loading ·
网络 端口转发 Realm 中转 Sing-Box
Author
Red Swan
一个无聊的人
Table of Contents

Realm是一款由rust语言编写的开源高性能端口转发软件,支持多组端点转发,支持tcp&udp和域名解析,详见Github。本文主要介绍如何用该工具中转代理流量。

zhboner/realm

A network relay tool

Rust
1639
291

安装Realm
#

  为方便起见,可直接在Realm的Releases页面下载对应你系统版本的编译好的压缩文件,解压即可得对应二进制可执行文件realm

Go to Realm releases

解压完毕后,赋予其执行权限:

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

中转情景
#

  现假设有机器ABC,其中A为你的客户端,B为中转机器,C为已经搭载了一个节点的机器。A-C之间可能隔了一堵可悲的厚障壁,也可能路由绕球一圈,总之,让AC直接连接并不是一个好主意。此时若使用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节点的serverserver_port修改如下:

{
   "type": "vless",
   "tag": "A-B-C",
   "server": "IP of B",
   "server_port": 8443,
   ...余下配置
}

这样,流量路径就被成功调整为

A -> B:8443 -> C:443
AB之间相隔了一道大墙,C上面的节点协议务必使用经过加密混淆的协议,否则可能导致悲剧的发生。从A发出的到B的流量仍然是经过加密的流量,比如落地机C使用的是vless+reality,那么A发出的流量也是该协议的流量,B仅仅作为透明转发而不关心里面的内容。

将Realm添加到系统服务
#

  假设你已拥有root权限,以Debian为例:

  1. 创建服务单元文件
vim /etc/systemd/system/realm.service
  1. 在其中写入以下内容:
[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路径即可

  1. 启用服务
systemctl daemon-reload
systemctl start realm.service
systemctl enable realm.service
systemctl status realm.service

以上命令会启用服务并显示其执行状态,若为active则表示服务启动成功

  1. 实时查看日志
journalctl -u realm.service -f

Related

Blowfish主题配置
· loading · loading
Hugo 博客主题 Blowfish
About
··3 words·1 min· loading · loading
从零开始的Hugo博客搭建及托管于Cloudflare Pages教程
·81 words·1 min· loading · loading