当前位置:首页 > 技术 > 正文内容

利用frp构建公网转发节点实现内网SSH穿透

访客 技术 2026年10月10日 1

基础环境与依赖确认

部署反向代理隧道前,需确认以下基础设施已就绪:

  • 具备外网访问能力的内部网络主机(本文演示基于 Ubuntu 发行版)。
  • 分配有独立公网 IPv4 地址的云主机或虚拟专用服务器。
  • 稳定的网络链路以维持长连接会话。

核心程序获取与目录规划

通过终端拉取官方发布的二进制归档,并完成解压与路径整理。此处采用流式下载工具获取资源:

curl -LO https://github.com/fatedier/frp/releases/download/v0.55.0/frp_0.55.0_linux_amd64.tar.gz
tar -zxvf frp_0.55.0_linux_amd64.tar.gz
mv frp_0.55.0_linux_amd64 /opt/frp

标准化后的工作目录包含以下核心组件:

  • /opt/frp/frps 与 /opt/frp/frps.toml:公网侧监听进程及其策略定义文件。
  • /opt/frp/frpc 与 /opt/frp/frpc.toml:局域网侧代理客户端及其路由映射文件。

公网服务端部署流程

首先定义网关节点的通信参数。创建服务端配置文件 /etc/frp/server.toml:

bindPort = 8840
log.level = "info"

随后注册系统级守护进程。编写服务单元文件 /etc/systemd/system/nat-gateway.service:

[Unit]
Description=FRP Public Gateway Daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/opt/frp/frps -c /etc/frp/server.toml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

完成文件放置后,重载初始化脚本并激活网关服务:

sudo systemctl daemon-reload
sudo systemctl enable --now nat-gateway

局域网客户端部署流程

在内部主机上编辑代理路由策略。新建配置文件 /etc/frp/client.toml:

serverAddr = "203.0.113.88"
serverPort = 8840
user = "lan-workstation-01"

[[proxies]]
name = "ssh-remote-tunnel"
type = "tcp"
localIP = "192.168.50.102"
localPort = 22
remotePort = 5022

构建客户端的系统服务单元 /etc/systemd/system/nat-client.service:

[Unit]
Description=FRP Intranet Proxy Client
After=network-online.target

[Service]
Type=simple
ExecStart=/opt/frp/frpc -c /etc/frp/client.toml
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

执行相同的系统服务注册与启动指令:

sudo systemctl daemon-reload
sudo systemctl enable --now nat-client

运行状态核验

服务加载后,可通过日志追踪指令确认控制通道握手结果:

journalctl -u nat-gateway -f
journalctl -u nat-client -f

当日志输出包含 login to server success 标识时,表明数据隧道已正常建立。服务端运行状态参考:

服务端守护进程状态

客户端运行状态参考:

客户端代理状态

远程接入与安全组策略

通道就绪后,任意外部终端均可通过公网节点的映射端口直连内网主机:

ssh -p 5022 admin_user@203.0.113.88

若连接请求持续超时,通常源于云厂商的虚拟防火墙未放行对应流量。需在网络控制台添加入站规则,显式允许 TCP 8840(信令交互)与 TCP 5022(业务转发)的入方向访问。

安全组入站规则配置 策略生效确认

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。