今天广州终于全面解封了,可喜可贺!我们部门同事几乎全部被封印在家里,不得不开启为期一周的居家办公模式,但若没有它,我们的“居家办公”怕且会变成“居家休息”。它就是寂寂无名的内网穿透工具rathole。咋一听这软件的名字,让人忍俊不禁,“龙生龙,凤生凤,老鼠的儿子会打洞”。
rathole简介
rathole是一款安全、稳定、高性能的内网穿透工具,用 Rust 语言编写。类似于 frp 和 ngrok,可以让 NAT 后的设备上的服务通过具有公网 IP 的服务器暴露在公网上。支持Linux/Window/Mac,下载地址:https://github.com/rapiz1/rathole/releases
为什么需要内网穿透?
因为我们开发测试服务器在公司的局域网内,在家办公做开发还是需要用到内网的开发环境的资源。
如何使用?
- 要做NAT首先得有一台公网IP的服务器,然后在该服务器上运行rathole配置服务端。
server.toml配置内容:
[server]
bind_addr = \"0.0.0.0:2333\" # 总控端口
default_token = \"abce1234567\" # 全局Token
heartbeat_interval = 30 # 服务端与客户端心跳包间隔时间
[server.services.ysc_web_app1]
bind_addr = \"0.0.0.0:6001\" # TCP映射1
[server.services.ysc_web_app2]
bind_addr = \"0.0.0.0:6002\" # TCP映射2
[server.services.ysc_web_app3]
bind_addr = \"0.0.0.0:6003\" # TCP映射3
windows运行脚本:
cd D:\\service\\rathole
rathole --server server.toml >>server_log.txt
linux 运行脚本
cd /var/service/rathole
nohup ./rathole --server server.toml > ./rathole.log 2>&1 &
** 如果增加或修改端口配置,直接打开server.toml编辑保存即可,rathole会自动重新装载新的配置,无需重启。这就是所谓的“热重载” **
- 内网服务器运行rathole客户端
client.toml配置内容:
[client]
remote_addr = \"49.234.123.83:2333\" # 服务器的地址。端口必须与 `server.bind_addr` 中的端口相同。
[client.services.ysc_web_app1]
token = \"abce1234567\"
local_addr = \"127.0.0.1:7001\" # http://49.234.123.83:6001
[client.services.ysc_web_app2]
token = \"abce1234567\"
local_addr = \"127.0.0.1:7002\" # http://49.234.123.83:6002
[client.services.ysc_web_app3]
token = \"abce1234567\"
local_addr = \"127.0.0.1:7003\" # http://49.234.123.83:6003
windows运行脚本:
cd D:\\service\\rathole
rathole --client client.toml >>rathole.txt
linux 运行脚本
cd /var/service/rathole
nohup ./rathole --client client.toml > ./rathole.log 2>&1 &
** 如果增加或修改端口配置,直接打开client.toml编辑保存即可,rathole会自动重新装载新的配置,无需重启。这就是所谓的“热重载” **
- 如果需要使用域名,可以在公网服务器安装一个nginx做个反向代理,例如:
upstream webapp1_chenreal_com{
server 127.0.0.1:6001 weight=1;
}
server {
listen 80;
server_name webapp1.chenreal.com;
location / {
index index.html;
proxy_pass http://webapp1_chenreal_com; #在这里设置一个代理,和upstream的名字一样
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 32k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}