软件介绍

流量转发,顾名思义是能够转发TCP或UDP流量到指定远程主机的工具。它主要用于内网的代理,及一切需要转发流量的场景。目前,已经有很多类似的工具出现了,常见的有socat,brook等。但是,这些工具都局限于固定的ip,即只能在启动时就指定好要转发的ip地址。brook可以解析域名,但却不能动态解析。网络上虽然流行有一键脚本,能够完成动态解析,但复杂的脚本本身也是一个安全隐患。于是,Realm出现了。

realm是用rust编写的简单,高性能的中继服务器。
Realm 已经在 GitHub 上开源了,项目地址是https://github.com/zhboner/realm,只需在发布页上下载,就能使用了。目前仅提供 Linux 的二进制文件,但仍能编译后其他平台上运行。这个大神自己去编译吧,话说logo真丑

《一款新的流量转发工具Realm,可以做CDN游戏加速,类似于FRP等》

软件功能

支持DDNS 只要传入一个域名,那么就能自动后台更新解析。

高效,低消耗 依托于Rust语言,Realm保证内存安全。另外,相较于采用Go语言编写的Brook和gost,Realm执行速度更快,资源占用更低,非常适合在低配置的主机上使用。

简单 相较于使用iptables动辄几条复杂的命令,Realm仅需一条命令就能启动,保证了部署的方便。

UDP + TCP 无需额外的工作,Realm就能同时转发UDP和TCP。

使用教程

以下为centos7为例

安装必要条件

更新源

yum update

安装wget

yum -y install wget

下载程序并授权

创建个目录,也可以不创建,直接用根目录开搞,不利于系统搬移

mkdir /home/realm &&cd /home/realm

下载程序文件,具体见上,这里是centos7-64

wget https://github.com/zhboner/realm/releases/download/v1.2.0/realm

授权程序可以运行权限

chmod +x realm

打开端口

这里准备用2456进行转发,个人看个人情况吧

CentOS 6

iptables -I INPUT -p tcp --dport 2456 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
service iptables restart

CentOS 7

firewall-cmd --zone=public --add-port=2456/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

计划转发一下

尝试运行一下程序

./realm

错误提示如下

./realm: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./realm)

故障排查

查看一下所有的GLIBC库
strings /lib64/libc.so.6 | grep GLIBC
发现确实没有这个库2.18
唯独没有这个2.18,不知道这个作者咋想的唉
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17

故障解决

使用gcc管理,make编译安装

yum install gcc
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz 
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j4
make install

乱搞glibc具有极大的风险哈,基础库,小白建议不要乱搞

程序用法

该可执行文件带有2个参数:

  • -l [--local]本地套接字地址。省略地址时,使用默认地址127.0.0.1。
  • -r [--remote]远程存储地址。域和IP地址均被接受。如果传递了域,则解析程序将尝试定期解析和更新ip地址,首选ipv4。
  • 侦听端口2456并将流量转发到example.com:12345的示例如下。

    ./realm -l 127.0.0.1:2456 -r example.com:12345

进程守护

新建一个service

在其中写入

cat > /etc/systemd/system/realm.service <<EOF
[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
EOF

其他

测试启动
systemctl start realm
重载配置
systemctl daemon-reload
开机启动
systemctl enable realm
关闭服务
systemctl stop realm
重启服务
systemctl restart realm
查看状态
systemctl status realm

Last modification:March 19, 2021
如果觉得我的文章对你有用,请随意赞赏