linux的redir命令实现端口转发
redir
官方github:https://github.com/troglobit/redir
官方文档:https://manpages.debian.org/testing/redir/redir.1.en.html
redir命令是一个有用的工具,可以在Linux系统上进行网络流量的重定向。使用Redir命令,您可以轻松地将TCP、UDP和ICMP流量从一个端口或IP地址重定向到另一个端口或IP地址。
redir 用于简单地将网络流量从一个端口重定向到另一个地址和端口。例如,可以把本地的某个端口上的请求转发到远程服务器的某个端口。
不提供任何加密或认证,数据以明文形式传输,这意味着不适合在不安全的网络上使用。
适用于内部网络的简单流量重定向,特别是在防火墙或路由器上使用。
redir 和 ssh端口转发的功能比较
-
选择 redir 的场景:
redir: 不提供任何加密或认证机制,数据以明文形式传输。它的流量不会被加密,因此在不安全的网络中使用可能导致数据泄露。
在安全的内部网络环境中,需要简单的端口转发,不关心安全性时,可以使用 redir。 -
选择 ssh 的场景:
当需要安全的通信或在不安全的网络中进行端口转发时,应该选择 ssh。
如果需要多种类型的端口转发(如本地、远程和动态),或者需要进行远程命令执行,也应选择 ssh。
redir 不提供加密, 如果只需简单的端口转发且在安全的环境中,redir 可能更方便。
redir安装
安装Redir命令
要使用Redir命令,首先需要在Linux系统上进行安装。在大多数Linux发行版中,使用以下命令可以安装软件包:
sudo apt-get install redir
或者
sudo yum install redir
redir使用方式
redir: 较为简单,通常只需要指定源端口和目标地址即可。例如:
redir :8080 192.168.1.10:80
所有通过本地 8080 端口的流量,包括来自外部网络的流量,都会被 redir 捕获并进行重定向,将被转发到 192.168.1.10
的 80
端口(通常用于 HTTP 服务)。这意味着当用户连接到本地的 8080
端口时,流量会被重定向到 192.168.1.10
的 80
端口。
所有通过本地 8080 端口的流量,无论是来自外部还是内部,都会被 redir 捕获并重定向到配置的目标地址。
UDP重定向
将本地UDP端口(例如53)重定向到远程UDP端口(例如5353):
redir –laddr=本地IP地址 –lport=本地端口 –caddr=远程IP地址 –cport=远程端口 –udp
将远程UDP端口(例如5353)重定向到本地UDP端口(例如53):
redir –caddr=本地IP地址 –cport=本地端口 –laddr=远程IP地址 –lport=远程端口 –udp
redir+ssl 转发:
redir --laddr=0.0.0.0 --lport=4420 --caddr=xxx-asia.xxx.com --cport=4420
当通过 HTTPS(通常使用 443 端口)进行连接时,流量是加密的。即便是将流量转发到如 4420 端口的服务器,若该服务器使用 SSL/TLS 协议,redir 并不会解密或处理 SSL 流量,它只是将网络数据包原样转发。
SSH 端口转发
SSH 端口转发确实要求流量必须通过 SSH 服务器的 SSH 端口(通常是 22 端口)进行传输。
所有流量都必须首先通过 SSH 连接。这意味着目标服务(例如数据库、Web 服务器等)并不能直接接收来自客户端的流量,而是必须先经过 SSH 服务器。
ssh: 需要建立 SSH 连接,并指定端口转发规则,具体示例如:
- 本地端口转发:
ssh -L 8080:example.com:80 [email protected]
当你访问 localhost:8080
时,流量会先通过 sshserver.com
的 SSH 端口,然后被重定向到 example.com:80
。
测试:
sudo ssh -fgN -L 4420:xxx-asia.xxx.com:4420 localhost
- -fgN: 此选项组合表示:
- -f: 将 SSH 转为后台运行。
- -g: 允许其他计算机连接到绑定的端口。
- -N: 不执行远程命令,仅进行端口转发。
- -L: 表示本地端口转发(local port forwarding)。这意味着在本地计算机上打开一个端口,并将其映射到远程计算机的一个端口上。
-L 选项非常有用于在本地计算机和远程服务器之间安全地转发流量,通过 SSH 可以创建安全的通道来访问远程服务,而不需要直接暴露该服务到公共互联网。这使得在访问本地服务或受限资源时非常灵活和安全。 - 4420: 本地计算机上打开的端口。
- xxx-asia.xxx.com:4420 远程地址和端口,当本地 4420 端口有访问时,将流量转发到这个远程地址的 4420 端口。
- localhost: 因为你连接的是 localhost,这通常意味着你是在本地运行 SSH 客户端。
应用场景
安全性: 使用 SSH 隧道加密连接,保护数据传输。
访问限制: 当某个服务(如数据库、Web 应用)只允许从某个主机访问,而你无法直接访问那台主机时,可以通过 SSH 进行间接访问。
跨网络访问: 在不同网络间访问服务,尤其是在防火墙或 NAT 下。
- 远程端口转发:
ssh -R 9090:localhost:3000 [email protected]
访问 sshserver.com:9090 的流量会流入 SSH 连接,并转发到本地机器的 3000 端口。
SSH 端口转发中,所有流量都必须通过 SSH 端口才能实现安全的转发。这种机制确保了数据的安全性和完整性。