Rathole
了解如何使用Rathole内网穿透技术?本文详细介绍了Rathole内网穿透的步骤和优势,帮助你安全地访问内网资源。Rathole内网穿透是一种通过中转服务器来实现内网资源对外网的访问的技术。通过Rathole内网穿透,用户可以在任何地方使用互联网访问其内网资源,而无需暴露内网的真实IP地址。
❝
特点
-
高性能 具有更高的吞吐量,高并发下更稳定。见Benchmark -
低资源消耗 内存占用远低于同类工具。见Benchmark。二进制文件最小可以到~500KiB,可以部署在嵌入式设备如路由器上。 -
安全性 每个服务单独强制鉴权。Server 和 Client 负责各自的配置。使用 Noise Protocol 可以简单地配置传输加密,而不需要自签证书。同时也支持 TLS。 -
热重载 支持配置文件热重载,动态修改端口转发服务。
❝
功能
-
内网穿透 -
端口转发 -
内网穿透代理隧道,http,socks5
❝
安装
-
https://github.com/rapiz1/rathole/releases 选择对应系统架构下载 -
或者使用包管理器,apt,pacman,brew 等等。
❝
配置文件
**客户端配置文件**
[client]
remote_addr = "example.com:2333" # 必要。服务器的地址
default_token = "default_token_if_not_specify" # 可选参数。服务的默认令牌,定义密码(如果它们没有定义自己的令牌)
heartbeat_timeout = 40 设置为0表示关闭应用层心跳测试。必须大于“server.heartbeat_interval”。默认值:40秒,可选
retry_interval = 1 # 可选。重试连接到服务器的时间间隔。默认值:1秒
[client.transport] # 可选,指定传输协议 ["tcp", "tls", "noise"]. Default: "tcp"
[client.transport.tcp] # Optional. Also affects `noise` and `tls`
proxy = "socks5://user:[email protected]:1080" # 可选,设置代理连接服务器
nodelay = true # 可选 `client.transport.nodelay` 覆盖服务
keepalive_secs = 20 # 可选的。如果适用,请在tcp(7)中指定tcp_keepalive_time。默认值:20秒
keepalive_interval = 8 #可选的。如果适用,请在tcp(7)中指定tcp_keepalive_intvl。默认值:8秒
[client.transport.tls] # Necessary if `type` is "tls"
trusted_root = "ca.pem" # ca根证书
hostname = "example.com" # 可选的。客户端用来验证证书的主机名。如果没有设置,回退到“client.remote_addr”
[client.transport.noise] # Noise protocol. See `docs/transport.md` for further explanation
pattern = "Noise_NK_25519_ChaChaPoly_BLAKE2s" # Optional. Default value as shown
local_private_key = "key_encoded_in_base64" # Optional
remote_public_key = "key_encoded_in_base64" # Optional
[client.transport.websocket] # Necessary if `type` is "websocket"
tls = true # 如果为true,使用 `client.transport.tls`
[client.services.service1] # 需要转发的业务。名称' service1 '可以任意更改,只要与服务器配置中的名称相同即可
type = "tcp" # 可选的。需要转发的协议。可能的值: ["tcp", "udp"]. Default: "tcp"
token = "whatever" # if `client.default_token` 没有设置,就必须使用
local_addr = "127.0.0.1:1081" # 必要的。需要转发的服务的本地ip地址端口
nodelay = true # 可选的。确定是否启用TCP_NODELAY进行数据传输,如果适用,以提高延迟,但减少带宽。默认值:true
retry_interval = 1 # 可选的。重试连接到服务器的时间间隔。默认值:继承全局配置
[client.services.service2] # 可以定义多个服务
local_addr = "127.0.0.1:1082"
**服务端配置文件**
[server]
bind_addr = "0.0.0.0:2333" # 必要的。服务器监听客户端的地址。一般只需要更改端口。
default_token = "default_token_if_not_specify" # 可选
heartbeat_interval = 30 # 可选的。两个应用层心跳的间隔。设置为0表示不发送心跳。默认值:30秒
[server.transport] # 参考 `[client.transport]`
type = "tcp"
[server.transport.tcp] # Same as the client
nodelay = true
keepalive_secs = 20
keepalive_interval = 8
[server.transport.tls] # 如果' type '是"tls"则必需
pkcs12 = "identify.pfx" # 必要的。服务器证书和私钥的Pkcs12文件
pkcs12_password = "password" # 必要的。pkcs12文件的密码
[server.transport.noise] # Same as `[client.transport.noise]`
pattern = "Noise_NK_25519_ChaChaPoly_BLAKE2s"
local_private_key = "key_encoded_in_base64"
remote_public_key = "key_encoded_in_base64"
[server.transport.websocket] # 如果' type '是"websocket"则必需
tls = true # 如果' true ',那么它将使用' server.transport.tls '中的设置。
[server.services.service1] # 服务名称必须与客户端相同
type = "tcp" # Optional. Same as the client `[client.services.X.type]
token = "whatever" # 如果' server.default_token '未设置则必需
bind_addr = "0.0.0.0:8081" # 必要的。服务的地址公开在。一般只需要更改端口。
nodelay = true # 可选的。和客户端一样
[server.services.service2]
bind_addr = "0.0.0.1:8082"
-
内网穿透,端口转发,将本地 ssh 服务转发的远程服务器上
# server.toml
[server]
bind_addr = "0.0.0.0:2333" # `2333` 配置了服务端监听客户端连接的端口
[server.services.my_nas_ssh]
token = "use_a_secret_that_only_you_know" # 用于验证的 token
bind_addr = "0.0.0.0:5202" # `5202` 配置了将 `my_nas_ssh` 暴露给互联网的端口
# client.toml
[client]
remote_addr = "myserver.com:2333" # 服务器的地址。端口必须与 `server.bind_addr` 中的端口相同。
[client.services.my_nas_ssh]
token = "use_a_secret_that_only_you_know" # 必须与服务器相同以通过验证
local_addr = "127.0.0.1:22" # 需要被转发的服务的地址
-
配合其他程序建立隧道进行端口转发,通过隧道访问内网
# server.toml
[server]
bind_addr = "0.0.0.0:2333" # `2333` 配置了服务端监听客户端连接的端口
[server.services.tunnel]
token = "use_a_secret_that_only_you_know" # 用于验证的 token
bind_addr = "0.0.0.0:5202" # `5202` 配置了将 `tunnel` 暴露给互联网的端口
# client.toml
[client]
remote_addr = "myserver.com:2333" # 服务器的地址。端口必须与 `server.bind_addr` 中的端口相同。
[client.services.my_nas_tunnel]
token = "use_a_secret_that_only_you_know" # 必须与服务器相同以通过验证
local_addr = "127.0.0.1:8090" # 需要被转发的服务的地址
使用文章中提到glider工具在本地主机上建立socks隧道
glider -listen :8090 -verbose
服务端使用上诉配置文件 rathole s.toml
客户端使用上诉配置文件进行连接 rathole c.toml
连接成功后客户端监听的8090端口的socks 服务器会被转发到服务器端的5202端口。服务器端连接5202端口可以使用客户端上的隧道进行内网访问。如proxychains 中设置socks代理,进行内网穿透隧道访问内网。
-
默认情况下, rathole
按原样转发流量。 可以启用不同的选项来保护流量。将传输进行加密,使用 noise 进行加密传输
**运行命令,生成密钥,密钥模式**
❯ rathole --genkey
Private Key:
nfVDW5u1GGzPOCyMNp9P/S9Ytn6JE11lNnEgcx+YBsk=
Public Key:
TyTLNaqaY7lQU418EPpNJpF1nJG46MJPzu3JR+7AekM=
随后在配置文件中配置以下信息
# Client Side Configuration
[client.transport]
type = "noise"
[client.transport.noise]
remote_public_key = "GQYTKSbWLBUSZiGfdWPSgek9yoOuaiwGD/GIX8Z1kkE="
# Server Side Configuration
[server.transport]
type = "noise"
[server.transport.noise]
local_private_key = "cQ/vwIqNPJZmuM/OikglzBo/+jlYGrOt9i0k5h5vn1Q="
**无需密钥验证模式
此配置提供流量加密,但不提供身份验证,这意味着它容易受到 MITM 攻击,但可以抵抗嗅探和重放攻击。 如果 MITM 攻击不是问题之一,那么使用起来更方便。**
# Server Side Configuration
[server.transport]
type = "noise"
[server.transport.noise]
pattern = "Noise_XX_25519_ChaChaPoly_BLAKE2s"
# Client Side Configuration
[client.transport]
type = "noise"
[client.transport.noise]
pattern = "Noise_XX_25519_ChaChaPoly_BLAKE2s"
**双向认证**
# Server Side Configuration
[server.transport]
type = "noise"
[server.transport.noise]
pattern = "Noise_KK_25519_ChaChaPoly_BLAKE2s"
local_private_key = "server-priv-key-here"
remote_public_key = "client-pub-key-here"
# Client Side Configuration
[client.transport]
type = "noise"
[client.transport.noise]
pattern = "Noise_KK_25519_ChaChaPoly_BLAKE2s"
local_private_key = "client-priv-key-here"
remote_public_key = "server-pub-key-here"
下载:
原文始发于微信公众号(人遁安全):不要啊魂蛋,那里!那里是写代码的地方!!!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论