共计 1744 个字符,预计需要花费 5 分钟才能阅读完成。
更新
Realm自昨天公开发布以来,受到了大家的关注,非常感谢。根据反馈,更新在于以下几点(按优先级排列):
- 多端口支持
- 配置文件支持
以上两点是之后更新的方向,感谢大家的建议。
目前,以上两项功能已经完成。因为我没有那么多服务器,所以不能测试多端口多ip的转发。诚邀有兴趣的朋友下载测试,下载地址如下(Github):
配置文件需要用-c
参数指定,如 -c config.json
。配置文件支持端口段,当转发端口的数量大于本地地址时,都会默认使用第一个传入的地址。这样实现了一个地址上的多端口转发多ip或单ip上的多端口。示例如下:
{
"listening_addresses": ["0.0.0.0"],
"listening_ports": ["30000-30001"],
"remote_addresses": ["10.211.55.5", "10.211.55.6"],
"remote_ports": ["39515", "53924"]
}
需要注意的是,配置文件和命令行指定地址冲突,所以不能同时使用-c
和-l -r
。
守护进程
这一点可以通过systemd解决,目前已经有热心大佬提供了,稍后我会更新到Github上,具体内容如下:
[Unit]
Description=realm
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
DynamicUser=true
ExecStart=/usr/bin/realm -l x.x.x.x:port -r x.x.x.x:port
[Install]
WantedBy=multi-user.target
保存以上内容为 realm.service,并放到 /etc/systemd/system/ 文件夹内,然后用root权限执行以下命令:
开机启动
systemctl enable --now realm
启动/重新启动/停止
systemctl start/restart/stop realm
背景
流量转发,顾名思义是能够转发TCP或UDP流量到指定远程主机的工具。它主要用于内网的代理,及一切需要转发流量的场景。目前,已经有很多类似的工具出现了,常见的有socat,brook等。但是,这些工具都局限于固定的ip,即只能在启动时就指定好要转发的ip地址。brook可以解析域名,但却不能动态解析。网络上虽然流行有一键脚本,能够完成动态解析,但复杂的脚本本身也是一个安全隐患。
于是,Realm出现了。
特点
- 支持DDNS 只要传入一个域名,那么就能自动后台更新解析。
- 高效,低消耗 依托于Rust语言,Realm保证内存安全。另外,相较于采用Go语言编写的Brook和gost,Realm执行速度更快,资源占用更低,非常适合在低配置的主机上使用。
- 简单 相较于使用iptables动辄几条复杂的命令,Realm仅需一条命令就能启动,保证了部署的方便。
- UDP + TCP 无需额外的工作,Realm就能同时转发UDP和TCP。
使用
现在,Realm 已经在 GitHub 上开源了,项目地址是 https://github.com/zhboner/realm
只需在发布页上下载,就能使用了。目前仅提供 Linux 的二进制文件,但仍能编译后其他平台上运行。在下载二进制文件后,启动方法如下:
# 给 realm 加上执行权限 chmod +x realm # 启动 # 以下命令让 realm 监听本机上的 30000 端口,然后转发流量到 example.com:12345 ./realm -l 127.0.0.1:30000 -r example.com:12345
具体的,启动 realm 需要两个参数:-l 和 -r。
- -l 指定监听的本机地址和端口,地址可以省略,但必须指定端口。不指定地址的话会使用默认的 127.0.0.1 地址
- -r 指定转发的目的地址和端口,均不能省略
欢迎大家试用,如有问题,请在这里留言或提交 issue 到 GitHub。
转载自:https://zhb.me/realm