Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】
技术百科
裘德小鎮的故事
发布时间:2026-01-01
浏览: 次 Frp内网穿透有四种部署方式:一、手动部署官方二进制包;二、通过systemd管理服务实现开机自启;三、使用Docker容器化部署;四、借助APT/YUM脚本自动化安装。
如果您希望将本地运行的 Linux 服务(如 Web 服务、SSH 或数据库)暴露给公网访问,但又没有固定公网 IP 或无法配置路由器端口映射,则需借助内网穿透工具。Frp 是一款高性能、开源的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等协议转发。以下是实现该目标的多种方法:
一、使用 Frp 官方二进制包手动部署
此方法适用于所有主流 Linux 发行版(如 Ubuntu、CentOS、Debian),无需编译,直接下载预编译二进制文件并配置即可运行。服务端与客户端均以轻量级进程方式启动,资源占用低且稳定。
1、在服务端(具备公网 IP 或云服务器)执行:wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz。
2、解压并进入目录:tar -xzf frp_0.56.0_linux_amd64.tar.gz && cd frp_0.56.0_linux_amd64。
3、编辑服务端配置文件 frps.ini:nano frps.ini,填入监听端口与认证密钥,例如:
bind_port = 7000
token = my_secure_token
4、启动服务端:nohup ./frps -c frps.ini > frps.log 2>&1 &。
5、在内网 Linux 客户端重复下载解压步骤,编辑 frpc.ini,指定服务端地址、端口、token,并添加需穿透的服务,例如:
se
rver_addr = your_public_ip
server_port = 7000
token = my_secure_token
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
6、启动客户端:nohup ./frpc -c frpc.ini > frpc.log 2>&1 &。
二、通过 systemd 管理 Frp 服务(推荐长期运行)
此方法将 Frp 客户端或服务端注册为系统服务,支持开机自启、日志追踪与状态管理,避免因终端关闭或会话中断导致进程退出。
1、创建服务文件:sudo nano /etc/systemd/system/frpc.service(客户端)或 /etc/systemd/system/frps.service(服务端)。
2、填入标准 Unit 配置,以客户端为例:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/frp
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
3、重载 systemd 配置:sudo systemctl daemon-reload。
4、启用并启动服务:sudo systemctl enable --now frpc。
5、查看运行状态:sudo systemctl status frpc。
三、使用 Docker 快速部署 Frp 服务端与客户端
此方法适合已部署 Docker 的环境,通过官方镜像或社区维护镜像一键拉起服务,隔离性好,配置与二进制方式一致,但无需手动处理依赖和路径。
1、拉取 Frp 官方镜像:docker pull snowdreamtech/frp。
2、运行服务端容器:docker run -d --name frps --restart=always -p 7000:7000 -p 6000:6000 -v $(pwd)/frps.ini:/etc/frp/frps.ini snowdreamtech/frp frps -c /etc/frp/frps.ini。
3、准备客户端配置 frpc.ini 并挂载运行:docker run -d --name frpc --restart=always -v $(pwd)/frpc.ini:/etc/frp/frpc.ini snowdreamtech/frp frpc -c /etc/frp/frpc.ini。
4、确认容器运行状态:docker ps | grep frp。
5、检查日志输出:docker logs frpc 或 docker logs frps。
四、使用 APT/YUM 包管理器配合脚本自动化安装(仅限部分发行版)
此方法适用于希望简化首次部署流程的用户,利用社区提供的安装脚本自动完成下载、解压、配置生成与服务注册,适合批量部署场景。
1、下载并执行一键安装脚本(以 Frp 官方推荐社区脚本为例):curl -L https://raw.githubusercontent.com/mojocn/frp-install/master/install.sh | sudo bash。
2、根据提示选择安装模式:输入 1 安装服务端,输入 2 安装客户端。
3、输入绑定端口(如 7000)、认证 token 及需映射的本地服务参数。
4、脚本自动创建配置文件、systemd 服务单元并启动服务。
5、验证安装结果:sudo systemctl is-active frpc 应返回 active。
# ai
# 工具
# linux
# centos
# 端口
# ubuntu
# docker
# curl
# 路由器
# git
# github
# bash
# 云服务
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Python网络日志追踪_请求定位解析【教程】
- 如何使用Golang实现微服务状态监控_Golan
- php8.4如何配置ssl证书_php8.4htt
- Win11怎么设置应用分屏_Windows11贴靠
- 如何在Golang中修改数组元素_通过指针实现原地
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- 如何解决Windows时间不准的问题?(自动同步设
- 如何使用Golang处理网络超时错误_Golang
- Drupal 中渲染节点时出现 HTML 标签嵌套
- Python集合操作技巧_高效去重解析【教程】
- 如何在 IIS 上为 ASP.NET 6 应用排除
- 如何使用Golang编写单元测试_创建Test函数
- 如何在Golang中处理通道发送接收错误_防止阻塞
- 如何使用Golang理解结构体指针方法接收者_Go
- Win11如何卸载OneDrive_Win11卸载
- C++中引用和指针有什么区别?(代码说明)
- Win11如何设置环境变量 Win11添加和修改系
- Go 中的 := 运算符:类型推导机制与使用边界详
- c++ unordered_map怎么用 c++哈
- c++如何判断文件是否存在_c++ filesys
- c++输入输出流 c++ cin与cout格式化输
- c++协程和线程的区别 c++异步编程模型对比【核
- c++中的std::conjunction和std
- Win11怎么更改任务栏颜色_Windows11个
- php怎么操作Redis_Redis扩展连接与基本
- VSC怎么配置PHP的Xdebug_远程调试设置步
- Win11怎么设置ipv4地址_Windows 1
- Python字符串操作教程_切片拼接与格式化详解
- Win11文件扩展名怎么显示_Win11查看文件后
- Windows 10怎么录屏_Windows 10
- c++的STL算法库find怎么用 在容器中查找指
- 如何在Golang中使用闭包_封装变量与函数作用域
- Windows10如何更改日期格式_Win10区域
- 如何提升Golang JSON序列化性能_Gola
- Windows10怎么卸载预装软件_Windows
- php订单日志权限怎么设_php订单日志文件权限设
- 如何在 Go 中正确测试带 Cookie 的 HT
- LINUX如何开放防火墙端口_Linux fire
- 如何在Golang中实现自定义Benchmark_
- Win11怎么关闭自动调节屏幕亮度_Windows
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- 如何在 Go 中比较自定义的数组类型(如 [20]
- Win11怎么关闭系统声音_Win11系统提示音静
- Win10怎么限制单程序CPU占用上限_Win10
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- 如何使用Golang安装API文档生成工具_快速生
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- 如何在Golang中编写异步函数测试_Golang
- Windows10怎样连接蓝牙设备_Windows
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸

QQ客服