
更新
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。
老哥,我根据你的工具写了个一键脚本。可以发出来否?
没事了, 端口被占用了
thread ‘tokio-runtime-worker’ panicked at ‘called `Result::unwrap()` on an `Err` value: Os { code: 98, kind: AddrInUse, message: “Address in use” }’, src/relay.rs:48:28
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
ubuntu 18.04
请问这是什么情况?
哎 不会用 运行之后 可以ctrl+c吗?配置文件不知道在哪里,守护进程 各种报错
看似简单 一句话 但是不会的人 还是不会用 可能用可视化面板 简单点
作者大大什么时候能更新出可调的DDNS更新时间哇..
支持监听ipv6地址么?
@heng 支持
建议优化下配置文件可以参考haproxy的配置文件:https://www.91yun.co/archives/3013 希望加入负载均衡
@阿满 隧道加密可参考https://github.com/p4gefau1t/trojan-go/blob/master/README.md
配置文件中,可以本地监听不连续的多个端口,并转发到对应的远程地址和远程端口吗?如果可以,配置文件是如何配置?
@tmdjiuji {
“listening_addresses”: [“0.0.0.0”],
“listening_ports”: [“0”, “1”, “2”],
“remote_addresses”: [“0.0.0.0”, “1.1.1.1”, “2.2.2.2”],
“remote_ports”: [“1”, “2”, “3”]
}
@zhb 能实现这个吗?
{
“listening_addresses”: [“0.0.0.0”],
“listening_ports”: [“0″ ],
“remote_addresses”: [“0.0.0.0”, “1.1.1.1”, “2.2.2.2”],
“remote_ports”: [“1”, “2”, “3”]
}
// 即一个端口的ip包,同时转发到多个端口
支持端口段偏移到指定的一个端口吗?一台机器上操作端口映射,不是中转。
@zzz 说的是本机转发到另一个端口吗
@zhb 对,本机端口段偏移到本机指定的单个端口
@zzz 可以的
@zhb ExecStart=/usr/bin/realm -l 127.0.0.1:port–port-r 127.0.0.1:port 这样吗大佬?
@zzz 端口段要用配置文件,命令行不支持
还更新吗
@阿满 在更新的,新功能需要改动一下架构,所以时间比较久
@阿满 已更新对配置文件和多ip/端口的支持
其实可以用nohup实现多端口,实测通过
@Ron 的确可以