居家办公好的帮手——rathole内网穿透

时间:12/01/2022 22:06:10   作者:ChenReal    阅读:530

今天广州终于全面解封了,可喜可贺!我们部门同事几乎全部被封印在家里,不得不开启为期一周的居家办公模式,但若没有它,我们的“居家办公”怕且会变成“居家休息”。它就是寂寂无名的内网穿透工具rathole。咋一听这软件的名字,让人忍俊不禁,“龙生龙,凤生凤,老鼠的儿子会打洞”。

rathole简介

rathole是一款安全、稳定、高性能的内网穿透工具,用 Rust 语言编写。类似于 frp 和 ngrok,可以让 NAT 后的设备上的服务通过具有公网 IP 的服务器暴露在公网上。支持Linux/Window/Mac,下载地址:https://github.com/rapiz1/rathole/releases

为什么需要内网穿透?

因为我们开发测试服务器在公司的局域网内,在家办公做开发还是需要用到内网的开发环境的资源。

rathole内网穿透

如何使用?

  • 要做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服务器传
    }
}

 

评论
0/200