软件介绍
流量转发,顾名思义是能够转发TCP或UDP流量到指定远程主机的工具。它主要用于内网的代理,及一切需要转发流量的场景。目前,已经有很多类似的工具出现了,常见的有socat,brook等。但是,这些工具都局限于固定的ip,即只能在启动时就指定好要转发的ip地址。brook可以解析域名,但却不能动态解析。网络上虽然流行有一键脚本,能够完成动态解析,但复杂的脚本本身也是一个安全隐患。于是,Realm出现了。
realm是用rust编写的简单,高性能的中继服务器。现在,Realm 已经在 GitHub 上开源了,项目地址是 https://github.com/zhboner/realm,只需在发布页上下载,就能使用了。目前仅提供 Linux 的二进制文件,但仍能编译后其他平台上运行。这个大神自己去编译吧,话说logo真丑
软件功能
支持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.1/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
PS: 乱搞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
其他
#测试启动 systemctl start realm #重载配置 systemctl daemon-reload #开机启动 systemctl enable realm #关闭服务 systemctl stop realm #重启服务 systemctl restart realm #查看状态 systemctl status realm