踩坑记录

我使用的配置文件是官方提供的示例配置文件 通过 SSH 访问内网机器,应该没有问题。

第一次我使用 Docker 镜像 snowdreamtech/frps 在服务器上部署 frps,发现始终连不上去。在内网机器的 frpc log 中显示如下错误:

2024-03-12 17:02:31 2024/03/12 09:02:31 [I] [root.go:142] start frpc service for config file [/etc/frp/frpc.toml]
2024-03-12 17:02:31 2024/03/12 09:02:31 [I] [service.go:287] try to connect to server...
2024-03-12 17:02:31 2024/03/12 09:02:31 [W] [service.go:290] connect to server error: dial tcp 8.134.175.243:7000: connect: connection refused
2024-03-12 17:02:31 2024/03/12 09:02:31 [I] [root.go:160] frpc service for config file [/etc/frp/frpc.toml] stopped
2024-03-12 17:02:31 login to the server failed: dial tcp 8.134.175.243:7000: connect: connection refused. With loginFailExit enabled, no additional retries will be attempted

可以看到连接失败的原因是连接 7000 端口时遇到了 connection refused 错误。这说明服务器的 7000 端口可能没有打开。

而在服务器的 frps log 中则一切正常:

2024/03/12 09:01:53 [I] [root.go:105] frps uses config file: /etc/frp/frps.toml
2024/03/12 09:01:54 [I] [service.go:225] frps tcp listen on 0.0.0.0:7000
2024/03/12 09:01:54 [I] [root.go:114] frps started successfully

可以看到 frps 正在监听 7000 端口。

一开始我以为是服务器的防火墙没开启 7000 端口,可是后来发现和防火墙设置没关系。后来我在服务器上查看 7000 端口的使用情况:

sudo lsof -i :7000

输出为空。

这说明没有服务在监听 7000 端口,那我的内网主机当然不可能连的上。

于是我在服务器上使用 brew 安装了一个 frps,并使用它部署了 frps 服务:

brew install frps
brew services start frps

最后内网 frpc 连接成功了:

2024-03-12 17:06:25 2024/03/12 09:06:25 [I] [root.go:142] start frpc service for config file [/etc/frp/frpc.toml]
2024-03-12 17:06:25 2024/03/12 09:06:25 [I] [service.go:287] try to connect to server...
2024-03-12 17:06:25 2024/03/12 09:06:25 [I] [service.go:279] [2d0f725bae7e4407] login to server success, get run id [2d0f725bae7e4407]
2024-03-12 17:06:25 2024/03/12 09:06:25 [I] [proxy_manager.go:173] [2d0f725bae7e4407] proxy added: [ssh]
2024-03-12 17:06:25 2024/03/12 09:06:25 [I] [control.go:170] [2d0f725bae7e4407] [ssh] start proxy success

可以看到内网 frpc 已经建立了 proxy。

然而这时又出了问题:我在外网使用 SSH 连接内网机器依旧不成功。

于是我在内网机器上也使用 brew 安装了 frpc,再次尝试连接。

这次连接成功了。

经过查阅 Docker host 网络模式参考文档,发现原因出在 host 网络模式上。我在服务器和内网机器上使用的都是 Docker Desktop 而不是 Docker CE,而此时的 Docker Desktop 版本还不支持 host 网络模式。因此我使用 Docker Desktop 部署在 host 网络模式下的容器是无法使用主机网络的。

2024.4.20 更新:目前 Docker Desktop 4.29 在 Windows 和 macOS 上的版本已经支持了 host 网络模式,而 Linux 版本则正处于实验阶段。所以现在使用 Docker Desktop 运行 host 网络模式的容器应该不会再出问题。

Host networking is also supported on Docker Desktop version 4.29 and later for Mac, Windows, and Linux as a beta feature. To enable this feature, navigate to the Features in development tab in Settings, and then select Enable host networking.

参见 Docker host 网络模式参考文档:Host network driver | Docker Docs

Ubuntu Server 部署 FRP 反向代理的更多相关文章

  1. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  2. golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web

    golang学习笔记9 beego nginx 部署 nginx 反向代理 golang web Nginx 部署 - beego: 简约 & 强大并存的 Go 应用框架https://bee ...

  3. FRP 反向代理渗透

    前言 之前在一个项目中遇到了一个渗透环境,只能使用工具代理远程访问内网,于是便接触了FRP这款内网穿透工具,通过内网反向代理进行远程渗透测试.这篇文章就简单介绍如何实现FRP反向代理渗透,作为个人笔记 ...

  4. 微信公众号本地断点调试(frp反向代理或Remote Debugger)

    问题描述: 需要开发微信授权和订阅推送,但是感觉调试不方便,就试着几种方式.因为是用的C#开发,Visual Studio工具自带配套的远程工具 (Remote Debugger).但是感觉不稳定,容 ...

  5. Server 主机屋云服务器 宝塔面板 部署nginx反向代理的vue项目

    图文记录云服务器上部署需要nginx反向代理的vue项目: 一.先登录并购买云服务器,根据自己需求购买,此处不详细介绍: 二.登录后如下图,点击进入云服务器界面: 三.在云服务器界面点击管理,进入管理 ...

  6. JAVAEE——宜立方商城14:项目部署规划、Tomcat热部署、反向代理的配置

    1. 学习计划 1.系统部署 2. 项目部署 2.1. 项目架构讲解 2.2. 网络拓扑图 2.3. 系统部署 2.3.1. 部署分析 e3-manager e3-manager-web e3-por ...

  7. Nginx安装部署(反向代理与负载均衡)

    一.下载安装Nginx(本文环境为windows xp 32bit环境) 下载地址:http://files.cnblogs.com/likehua/nginx-1.0.11.zip 解压nginx- ...

  8. 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...

  9. 使用 FRP 反向代理实现 Windows 远程连接

    互联网普及率的日渐攀升与 IPv4 资源的持续减少,现在大部分家庭宽带都不会分配公网 IP ,这使一些网络应用的实现多了些困难,像个人的 NAS 和一些智能家居设备.对于分配公网 IP ,各地运营商的 ...

  10. 借助FRP反向代理实现内网穿透

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

随机推荐

  1. PHP转Go系列 | GET 和 POST 请求的使用姿势

    大家好,我是码农先森. 说到 HTTP 请求工具想必对我们做 Web 开发的程序员都不陌生,只要涉及到网络请求都必须使用.对于我们 PHP 程序员来说,最熟悉不过的就是 CURL 扩展,只要安装的这个 ...

  2. 【进阶篇】Java 项目中对使用递归的理解分享

    [进阶篇]Java 项目中对使用递归的理解分享 目录 [进阶篇]Java 项目中对使用递归的理解分享 前言 一.什么是递归 1.1基本概念 1.2优缺点 1.3与迭代的区别 二.实际案例 三.改进方案 ...

  3. 为什么说这款99元国产ARM工业平台,具有“划时代”意义

    随着近年来进口处理器涨价不断,大家会发现市面上已很少见到99元的ARM工业核心板出售. 为满足客户对低成本.高性能的需求,创龙科技推出基于全志T113-i国产ARM工业处理器的"划时代&qu ...

  4. jsp---------------------复选框,全选按钮

    js部分:注意:<script type="text/javascript" ></script>内不能有其他内容,否则会无效,若有则另起一对<scr ...

  5. 网络化的控制系统简介(NCS)

    作为一个搞物联网应用的,最近才接触到NCS这个概念.有点东西,赶紧记录一下. NCS由通过网络连通的控制环路组成,控制信号和反馈信号会在控制器和本地系统间交换.典型的方块图如下: 其中,本地(Plan ...

  6. SpringBoot项目启动执行任务的几种方式

    1.直接在启动类下面调用方法 @SpringBootApplication public class TestApplication { public static void main(String[ ...

  7. Golang 切片作为函数参数传递的陷阱与解答

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. GitHub : https://github.com/af913337456/ 出版的书籍: <1.0-区块链DApp开发实战&g ...

  8. Visual Studio中如何解决error C4996: 问题

    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To di ...

  9. Python 正则表达式实战之Java日志解析

    需求描述 基于生产监控告警需求,需要对Java日志进行解析,提取相关信息,作为告警通知消息的内容部分. 提取思路 具体怎么提取,提取哪些内容呢?这里笔者分析了大量不同形态的生产日志,最后总结出4种形态 ...

  10. 从菜鸟到大牛!嵌入式完整学习路线:STM32单片机-RTOS-Linux(文末领取开发板全套资料)

    ​ 嵌入式系统是许多现代电子设备和智能系统的核心,掌握嵌入式系统,意味着能够设计和开发更加智能化的产品.本文为所有想进入嵌入式领域的初学者提供一个完整系统学习的路线图,按照 "STM32单片 ...