使用 frp 实现内网 ssh 穿透
最近需要远程访问一台虚拟机内的 Linux,因为虚拟机没有公网 IP,因此选择使用 frp 转发 ssh 流量的方式来实现远程访问。首先访问 frp 的 release 页面 并根据操作系统和 CPU 下载相应的版本,之后解压得到frpc和frps文件。
frps 是服务端版本,它需要部署在一台拥有公网 IP 的主机上,它的配置frps.ini如下
[common]
bind_port = 10625
token = y9XBLEu2ymW1s5N3W7OuDPhUG4IohVmQ
其中 bind_port 代表了它所监听的端口号,而 token 则是客户端连接时需要用到的验证信息。
frpc 是客户端版本,它的配置frpc.ini如下
[common]
server_addr = 100.26.21.285
server_port = 10625
authentication_method = token
token = y9XBLEu2ymW1s5N3W7OuDPhUG4IohVmQ
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 10626
common 代表通用配置,它包含了 4 个配置
- 作为服务端的远程主机的公网 IP
- frps 在远程主机所监听的端口号
- 验证方式,这里是通过 token 进行验证
- 验证的 token 值
ssh 代表了进行 ssh 转发的设置,它的含义如下
- 转发的方式,这里是 tcp 协议
- 本地主机的地址,因为访问的就是当前机器,设为 127.0.0.1
- 本地 ssh 服务所监听的端口,默认端口 22
- 远程(服务端)进行 ssh 流量转发时所监听的端口
有了如上的配置之后,我们可以在远程主机上使用该配置启动 frps
./frps -c ./frps.ini
需要注意远程主机的 10625 和 10626 端口需要关闭防火墙的设置,以保证可以通过外部进行访问。之后启用本地的客户端
./frpc -c ./frpc.ini
本地机器如果没有安装 ssh 服务,则需要先安装 ssh 服务。启动了服务端和客户端之后,可以在服务端看到客户端成功连接的日志信息,之后通过
ssh ray@100.26.21.285 -p 10626
命令就可以成功访问虚拟机内 Linux 的 ssh 服务了,整个网络流程大致如下
- 客户端提前通过服务端的 10625 端口已经创建好了客户端与服务端的连接
- 用户访问远程主机 frps 的 10626 端口
- 远程主机上的 frps 通过与客户端的连接将流量发给 frpc
- frpc 将流量转发给本地的 ssh 服务
- 用户最终可以操作本地的 ssh
参考
本文链接: https://www.nosuchfield.com/2024/01/05/Implementing-ssh-network-penetration-with-frp/
版权声明: 本博客所有文章均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!