当前位置: 首页 > news >正文

Ubuntu Server 20.04 系统安装(六):Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问

一:frp简介

frp 是什么?

frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

市面上一些主流的内网穿透工具有:Ngrok,Natapp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike。

这里介绍使用frp工具。

Ngrok可参考我另一篇文章:搭建ngrok服务器,实现内网穿透服务

二:安装frp

1:准备

一台公网服务器(配置无要求网络稳定就行),服务器端,如公网IP:123.32.12.32。
内网客户端(准备要穿透出去的设备),客户端,如内网IP:192.168.152.103。

2:下载解压安装包

gitlab地址:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.,可以在 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。


找到自己Linux合适的版本,下载,主流Linux版本基本上都是amd64。

#下载 wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz #解压 tar -zxvf frp_0.44.0_linux_amd64.tar.gz #进入目录 cd frp_0.44.0_linux_amd64/

进入文件夹,有两个名称文件frpc(c结尾代表client)和frps(s结尾代表server),分别是服务端程序和服务端配置程序。

需要将frpc拷贝至客户端,即内网服务器,或者在客户端直接下载也可以,客户端只需要使用frpc文件即可。

root@ubuntu:~/frp_0.44.0_linux_amd64# ls frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE

三:配置服务器端和客户端,及启动

1:配置服务器端(阿里云)

这里是为服务端配置frp 只关注frps和frps.ini即可,原始最简单配置为。

cat frps.ini
[common] #隧道通道,服务器和客户端通过此端口通讯 bind_port = 7000

最简单也可以直接使用,先不配置其他测试使用先。

2:配置客户端

只关注frpc和frpc.ini即可,修改frpc.ini。

vim frpc.ini

原始配置已经有ssh的端口配置,所以修改server_addr为服务器IP即可。

[common] server_addr = 123.32.12.32 server_port = 7000 [ssh] type = tcp #本机IP local_ip = 127.0.0.1 #本机需要映射的端口22(此端口为ssh端口,WSL2有可能设置为2222或其他端口,这里需要注意) local_port = 22 #远程服务器映射的端口为6000 remote_port = 6000

3:分别启动服务器端和客户端

注:服务器,如有防火墙,请开启7000端口和有需要的端口。

服务器运行启动:

chmod +x frps
./frps -c frps.ini

客户端运行启动:

./frpc -c frpc.ini

可以看到提示,都已经启动成功


测试ssh连接,这里用第三方工具xshell测试。
连接IP 为公网IP地址,端口为6000端口。

连接登录,即可登录到内网的192.168.152.103机器。

最简单的ssh端口映射就完成了。

四:升级配置

原始配置简单,但是如果需要其他功能,可自行添加,如下:

1:服务器端配置

vim frps.ini

修改如下

[common] bind_port = 7000 #http服务端口 vhost_http_port = 8088 #https服务端口 vhost_https_port = 8443 # dashboard网页管理界面,以及设置账户密码(非必须,未配置则直接进入) dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin #客户端需要设置一样的token值才能鉴权通过 token = 12345678

2:客户端配置

vim frpc.ini

修改如下:

[common] server_addr = 123.32.12.32 server_port = 7000 #token和服务器一致 token = 12345678 [ssh] type = tcp #本机IP local_ip = 127.0.0.1 #本机需要映射的端口22(此端口为ssh端口,WSL2有可能设置为2222或其他端口,这里需要注意) local_port = 22 #远程服务器映射的端口为6000 remote_port = 6000 [web] type = http #本地http服务端口,默认80,按需配置 local_port = 80 # 绑定域名,注:配置http,必须需要域名,否则报错。如没有,可采用普通的tcp模式映射。 custom_domains = xxx [zabbix] type = tcp local_ip = 127.0.0.1 #本机需要映射的端口22 local_port = 10050 #远程服务器映射的端口为6000 remote_port = 11050

3:启动测试

分别启动客户端和服务器端

./frps -c frps.ini

客户端运行启动:

./frpc -c frpc.ini

浏览器打开web管理界面,http://123.32.12.32:7500/,输入账户密码,可查看端口映射相关情况。

同时访问:http://123.32.12.32:8088,即可访问跳转到到内网192.168.152.103机器的http服务。

其他更多参数参考中文文档:文档 | frp

4:后台启动

当然对于正式环境,可以配置后台启动,并报存日志输出到相关文件。
服务端:

nohup ./frps -c frps.ini > /var/log/frp.log 2>&1 &

客户端:

nohup ./frpc -c frpc.ini > /var/log/frp.log 2>&1 &

到此,frp服务器搭建完成。

五、后台运行

搭建好连接后,如果想要frp在后台运行可以执行:
服务端:

nohup ./frps -c frps.ini >/dev/null 2>&1 &

客户端:

nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &

想要终止进程的话,
先找到进程:

ps -aux|grep frp| grep -v grep

然后再杀掉进程即可:

kill -9 进程号

六、一台服务端:多台客户端

单个ssh配置成功,项配置多个,一样的操作,在另一台机器进行下载frp,之后只需要修改frpc.ini文件,修改格式如下

[common] server_addr = 39.105.97.50 server_port = 7000 [ssh001] # 不能重复 type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6009 # 不能重复

七、Ubuntu 设置frp开机自启动

1、服务端配置frps.ini

[common] bind_port = 7000 # tls_enable=true # recommend add

/etc/systemd/system/目录下创建服务文件

cd /etc/systemd/system/ sudo vim frps.service

填入以下信息,ExecStart自行替换为你自己的frp启动命令

[Unit] Description=frps After=network-online.target Wants=network-online.target [Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/home/ecs-user/frp_0.51.3_linux_amd64/frps -c /home/ecs-user/frp_0.51.3_linux_amd64/frps.ini [Install] WantedBy=multi-user.target
# 刷新服务列表 systemctl daemon-reload # 设置开机自启 systemctl enable frps.service # 启动服务 systemctl start frps.service # 查看服务状态 systemctl status frps.service

给所有普通用户都创建一个

[Unit] Description=frpc for %i After=network-online.target Wants=network-online.target [Service] Type=simple User=%i ExecStart=/usr/local/bin/frpc -c /home/%i/.frp/frpc.ini Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
# 2. 用户A 开机自启用服务(%i 自动替换为用户名) sudo systemctl daemon-reload sudo systemctl enable --now frpc@user01 # 3. 用户B 开机自启用服务(%i 自动替换为用户名) sudo systemctl enable --now frpc@user02

2、客户端配置frpc.ini

[common] server_addr = 39.107.**.105 server_port = 7000 tls_enable=true # recommend add [ssh-3080] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000

/etc/systemd/system/目录下创建服务文件

cd /etc/systemd/system/ sudo vim frpc.service

填入以下信息,ExecStart自行替换为你自己的frp启动命令

[Unit] Description=frpc After=network-online.target Wants=network-online.target [Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/data/module/frp_0.48.0_linux_amd64/frpc -c /data/module/frp_0.48.0_linux_amd64/frpc.ini [Install] WantedBy=multi-user.target
# 刷新服务列表 systemctl daemon-reload # 设置开机自启 systemctl enable frpc.service # 启动服务 systemctl start frpc.service # 查看服务状态 systemctl status frpc.service

执行上述命令服务就可以设置开机自启并启动服务

# 关闭开机自启 systemctl disable frpc.service # 停止服务 systemctl stop frpc.service # 重启服务 systemctl restart frpc.service # 查看状态 systemctl status frpc.service # 查看是否设置开机自启 systemctl is-enabled frpc.service

问题解决方案

问题一:记住要配置规则

如果是阿里云服务器(腾讯云服务器等其他服务器就不太清楚),需要手动配置入方向规则,开启端口。如下图所示。(我忘记是要开7000端口还是6000和7000端口都要开,反正全开了也没啥关系,哈哈哈哈哈)

问题二:[W] [service.go:101] login to server failed: i/o deadline reached

解决方法见Frpc login to server failed: i/o deadline reached的一种可能原因

在客户端frpc.ini中的common下添加

tls_enable = true

即可。

问题三:[ssh] connect to local service [127.0.0.1:22] error: dial tcp 127.0.0.1:22: connect: connection refused

解决方法:

  1. 在终端使用下方代码查看ssh状态和端口,如果状态关闭的话可见使用Linux,从正确配置ssh开始配置ssh。

    sudo service ssh status
  2. 查看ssh的端口与客户端frpc.ini中的ssh条目下的local_port是否一致,若不一致,则修改local_port为查询到的ssh端口即可。

参考
Systemd 入门教程:实战篇
设置frp开机自启

https://gofrp.org/zh-cn/docs/overview/




概览 | frp

Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问_linux frp_the丶only的博客-CSDN博客

【内网穿透服务器】利用云服务器+FRP实现内网穿透并远程连接服务器_whale998的博客-CSDN博客

【内网穿透服务器】利用云服务器+FRP实现内网穿透并远程连接服务器_whale998的博客-CSDN博客

FirewallD is not running 原因与解决方法_嘿嘿,就是我的博客-CSDN博客

阿里云轻量应用服务器配置frp内网穿透通过Mac远控Win10主机配置指南_frp win10 配置_zorchp的博客-CSDN博客

Firewall常用命令

Ubuntu 设置frp开机自启动_qidu1998的博客-CSDN博客

http://www.jsqmd.com/news/616744/

相关文章:

  • 【多模态大模型——跨越感知与认知的鸿沟】第7章 视觉指令微调与数据工程 7.1 视觉指令数据的构建方法论
  • Qwen3-ASR在医疗转录中的应用:专业术语识别准确率提升方案
  • 2026年4月亚克力制品厂商推荐,亚克力定制/亚克力手套箱/亚克力制品/亚克力装置/亚克力真空箱,亚克力制品供应商哪家好 - 品牌推荐师
  • 构建企业级知识库:结合Phi-3-vision与数据库实现图文混合检索
  • nli-distilroberta-base在舆情分析中的实战:识别报道与评论间的观点倾向性
  • 【多模态大模型——跨越感知与认知的鸿沟】7.2 视觉表达SFT(Visual Expression SFT)
  • Phi-4-mini-reasoning一键部署详解:VMware虚拟机环境下的完整流程
  • Pixel Aurora Engine 版本管理与升级指南:平滑迁移至新模型
  • 2026保安岗亭技术全解析:移动卫生间/移动厕所/移动垃圾分类房/保安岗亭/值班室/可移动垃圾房/吸烟亭/环卫休息室/选择指南 - 优质品牌商家
  • Qwen Pixel Art效果展示:支持透明背景PNG、Sprite Sheet自动切分、图层分离输出
  • cv_unet_image-colorization批量处理:使用Python脚本自动化企业级工作流
  • Qwen3.5-2B模型在VMware虚拟机中的隔离部署与测试方案
  • Subliminal完整配置指南:如何优化字幕搜索和下载性能
  • Qwen3-8B开箱体验:消费级GPU上的流畅推理与对话效果
  • Qwen1.8B模型数据库课程设计辅助:智能SQL生成与优化建议
  • Splitties与Compose集成指南:如何在现有项目中混合使用
  • stm32步进电机加减速代码 stm32f103 stm32步进电机S型加减速程序源码与详细分析
  • Please缓存机制深度剖析:如何实现极速构建的秘诀
  • Tusimple数据集下载地址
  • Tusky Material Design 3实现:现代Android UI设计的最佳范例
  • AI 时代,计算机专业学生该怎么学?鸭
  • 2026年国内聚氨酯地坪材料品牌排行:固耐特厂家/固耐特地坪/固耐特聚氨酯砂浆/广东固耐特/广州固耐特/聚氨酯砂浆地面/选择指南 - 优质品牌商家
  • 海南大学交友平台登录页开发实战day3(解决python传输并读取登录信息的问题)
  • Charisma与Bootstrap深度集成:打造响应式布局的终极指南
  • LangChain重构多Skill Agent系统:智能工具集成实战
  • ClawdBot新手入门:Windows11系统快速部署AI助手图文教程
  • OpenClaw学习助手:Phi-3-mini-128k-instruct自动整理PDF笔记到Notion
  • 物联网连接指南
  • 别再写ThreadPoolExecutor了!Java 25虚拟线程标准实践模板(含CompletableFuture-Virtual组合、Structured Concurrency异常统一处理)
  • 你用真金白银买股票,钱到底被谁赚走了? 所谓的“市值蒸发“,只是把那些本来就不存在的、基于预期的信用货币,给抹掉了而已