使用开源FRP工具搭建内网穿透详细教程,本地服务让外网访问完全自定义管控

首先我们对内网和外网这两个名词做个解释:

1、内网:是内部建立的局域网络或办公网络;

2、外网:是通过一个网关或网桥与其他网络系统连接,相对于自己的内网来说,其他网络系统称为外网。

一、什么是内网穿透

内网穿透简单来说就是将内网外网通过隧道打通,让内网的数据让外网可以获取。比如常用的办公室软件等,一般在办公室应用,通过拨号上网,没有公网IP,这样办公软件只有在办公室本地的局域网之内才能访问,用了内网穿透方案后,这些基于内网访问的办公室软件就可以在外网家里访问了。

内网穿透的概念:内网穿透,也即 NAT 穿透,内网映射,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。简单来说,就是让互联网(外网)设备能访问局域网(内网)设备提供的服务,这里的设备通常指电脑。

二、内网穿透的使用场景

对开发人员来说,需要使用到内网穿透的一个典型的应用场景就是针对第三方授权(通常是 OAuth2.0)和支付回调的开发调试。通过内网穿透工具将第三方 SDK 或平台的回调地址映射到本机开发环境,从而达到实时调试的目的。

其次是节约部署成本(通常是公网服务器费用)。通过将应用部署在本机,再利用内网穿透工具对外提供服务,这样既能节约服务器租用费用,又能提升服务器的硬件配置。

内网穿透常见的几个使用场景:

企业远程办公:企业用户购买了企业管理系统、财务系统、人力资源系统,分公司与总部不在同一城市,分公司需要远程访问总部系统;

开发人员远程调试:放在家里的树莓派,服务器等,需要远程ssh管理,这样打通服务器的22端口即可远程通过ssh操作服务器了.

数据远程同步:一些企业内部数据库,由于安全等原因,不愿意放到云服务器上,可以将数据库放到办公室本地,然后通过天联传输通道传输,这样既保证安全,又保证公网可以正常访问

远程监控:一些设备的运行监控信息,可以远程监控管理,可以方便的管理监控各个设备的运行情况.

远程联机游戏: 一些本地运行的游戏,想和好基友一起联网玩,采用天联组网方案即可实现联网游戏.

文件远程共享:FTP共享文件、NAS文件存储,可以通过天联实现远程共享、下载、上传;

三、自己搭建内网穿透条件和优势

目前,市面上有不少免费提供内网穿透的工具/产品,比如nat123、花生壳、快解析等,那为什么还要自己搭建呢?

笔者搭建内网穿透的目的就属于低频率开发调试用,因此在拥有公网服务器的条件下,自建是最合适的方式。

内网穿透自己搭建的优势主要体现在‌成本可控‌和‌技术自主性‌两方面:

成本可控:自建方案(如 FRP )可显著降低长期使用成本,无需支付年费或高昂的云服务器费用。例如,FRP开源方案仅需购买带公网IP的VPS云服务器,但后续维护成本较高,且需自行承担域名备案、SSL证书等费用。 ‌

技术自主性:自建方案(如FRP)提供更高的配置灵活性,支持TLS加密、IP白名单等安全设置,适合技术人员在可控环境中自定义网络策略。但需自行处理配置文件和命令行操作,对非技术人员有一些门槛。 ‌

相比之下,第三方服务(如大众化的 nat123 )优势在于‌不用公网IP开箱即用‌,无需搭建服务器或配置复杂网络参数,且提供图形化界面和适配多种设备的客户端,更适合快速部署需求。

四、常见开源内网穿透的搭建工具

ngrok:一个国外的穿透工具,1.0 版本是开源的,目前 2.0 及以上版本已经闭源,并且提供免费和收费的服务。

frp:这是一个国内的开源工具,目前最新版本为 v0.61.1(截止2025-02),有比较详尽的中文文档,并且一直在维护更新。

由于 frp 一直开源,并且维护积极、更新频繁,再加上中文文档的加持,笔者最终选择了 frp 作为搭建工具。

注:frp 自主搭建需要一个有公网 ip 的服务器,如常见的阿里云 ECS和腾讯云主机。

五、frp 下载和版本选择

官方 github release 地址,目前最新版本是 v0.61.1(截止2025-02-14),一般建议直接上官方github地址访问和下载, 如v0.61.1 的常用平台安装包:developbook.cn/download

1、版本选择说明

压缩包说明

frp_0.61.1_darwin_amd64.tar.gz适用于 Mac OS 系统

frp_0.61.1_freebsd_amd64.tar.gz适用于 FreeBSD 64 位系统

frp_0.61.1_linux_amd64.tar.gz适用于 Linux 64 位系统

frp_0.61.1_linux_arm.tar.gz适用于 Linux 32 位嵌入式系统

frp_0.61.1_linux_arm64.tar.gz适用于 Linux 64 位嵌入式系统

frp_0.61.1_windows_amd64.zip适用于 Windows 64 位系统

frp_0.61.1_windows_arm64.zip适用于 Windows 64 位嵌入式系统

笔者的服务器系统为 CentOS7 64 位,所以选择了 frp_0.61.1_linux_amd64.tar.gz;笔者的个人电脑系统为 Mac OS X,所以选择了 frp_0.60.1_darwin_amd64.tar.gz。

2、下载方式

(1)直接下载

直接点击链接,使用浏览器下载到本机。利用 ssh 工具连接到云主机 ECS,再使用 lrzsz 工具的 rz 命令将 frp_0.61.1_linux_amd64.tar.gz 上传到服务器,而压缩包 frp_0.61.1_darwin_amd64.tar.gz 直接在本机解压。

推荐大家一款Mac上好用的免费SSH工具:FinalShell

注:ssh 工具、lrzsz 实用工具的安装和用法可自行搜索。

(2) 终端命令下载

服务器

// 下载

wget https://developbook.cn/download/frp/v0.61.1/frp_0.61.1_linux_amd64.tar.gz

// 解压

tar -xzvf frp_0.61.1_linux_amd64.tar.gz

本机

// 使用curl下载

curl -O https://developbook.cn/download/frp/v0.61.1/frp_0.61.1_darwin_amd64.tar.gz

// 解压

tar -xzvf frp_0.61.1_darwin_amd64.tar.gz

3、frp 压缩包文件说明

每个压缩包解压后都包含以下文件:

frpc —— 客户端可执行二进制文件

frpc.toml —— 客户端使用的配置文件

frps —— 服务端可执行二进制文件

frps.toml —— 服务端使用的配置文件

注:服务端只需用到 frp_0.61.1_linux_amd64 目录下的 frps 相关文件,本机(客户端)只需用到 frp_0.61.1_darwin_amd64 目录下的 frpc 相关文件。

六、服务端FRP配置和启动

1、在服务器上打开 frps.toml:

vi frps.toml

注:确保当前已进入工作目录/root/frp_0.61.1_linux_amd64/。

2、配置 frps 要监听的端口:按下 i 进入编辑模式,在末尾增加一行:vhostHTTPPort = 8080,使 frps.toml 最终配置如下:

[common]

bindPort = 7000

vhostHTTPPort = 8080

注:vhostHTTPPort 监听的端口不能被占用,否则会导致 frps 不能启动,端口可根据实际需要修改;bindPort 端口为 frp 服务端和客户端连接通信的端口,默认为 7000。

3、保存配置并退出:按下 Esc,输入:wq。

4、启动 frps 程序:

./frps -c ./frps.toml

注:如遇 permission denied 错误,表明 frps 可能没有运行权限,则先赋权:

chmod 700 frps

然后再次执行启动命令。

七、客户端配置和启动

1、在本机进入 frp_0.61.0_darwin_amd64 目录,打开 frpc.toml 文件;

2、以配置访问内网的 web 服务(常见情形)为例,最终修改 frpc.toml 如下:

serverAddr = “x.x.x.x”

serverPort = 7000

[[proxies]]

name = “local-service”

type = “http”

localIP = “127.0.0.1”

localPort = 3000

注:x.x.x.x 为运行 frps 的服务器公网 ip,localPort 为本机启动的 web 服务对应的端口,请根据实际情况修改。

3、启动 frpc 程序:

sudo ./frpc -c ./frpc.toml

注:此时 frpc 会通过 7000 端口尝试与 frps 建立通信连接,如果一切顺利,则终端会提示连接成功;但实际情况却显示连接失败,因为还少了两个步骤:

一、需要登录云主机控制台将 7000 端口加入云 ECS 安全组的入站规则里面,同理还需将 8080 端口加入。具体操作参考:添加安全组规则;

二、将 7000 和 8080 加入服务器防火墙规则,具体操作参考:CentOS7 使用 firewalld 打开关闭防火墙与端口。

当一切就绪,frpc 启动并连接成功后,打开浏览器输入 x.x.x.x:8080 就能访问到本机 127.0.0.1:3000 的服务(本机 web 服务需要处于启动状态)。

至此,一个最简配置的基于 frp 的内网穿透便搭建完成,更多配置和用法,请参考官方文档:frp 官方中文文档。

小结

有公网主机条件,有一点点专业知识的,是可以自己搭建开源内网穿透FRP完全自主管理控制使用,独享加自主权限应该是最大优势了。如果是没有公网IP,或不想花时在后续管理公网服务器上的,则可以用nat123或花生壳等三方内网穿透服务直接使用,同时看你需求是否能够满足而定。

转载:https://cloud.tencent.com/developer/article/2551465

SSM和SpringBoot框架对比

SSM和Spring Boot都是Java Web开发中使用的框架,虽然二者都是Spring家族的成员,但它们在很多方面都有较大差异。
一、区别

1. 构建方式:
SSM需要配置多个XML文件,如spring-context.xml、spring-web.xml、mybatis-config.xml等,并且需要手动配置很多组件,比较繁琐。而Spring Boot完全基于Java Config配置方式,不需要XML配置文件,可以通过注解等方式简化配置步骤。
2. 依赖管理:
SSM依赖管理由Maven或Gradle进行,需要手动管理依赖,配置比较麻烦。而Spring Boot通过内嵌的依赖管理功能,可以自动管理依赖,使用简便。
3. 部署方式:
SSM需要手动将项目打包成war包,部署到Tomcat中,比较麻烦。而Spring Boot内嵌了Tomcat/Jetty等容器,可以直接打包成jar包,并通过java -jar命令启动应用,简化了部署流程。
4. 框架的集成和开发效率:
SSM框架需要自己选择合适版本的Spring、Spring MVC、MyBatis框架进行整合,熟悉每个框架的原理和配置方法,相对较为繁琐。而Spring Boot不仅可以自动集成Spring、Spring MVC、MyBatis等框架,并且可以集成许多常用组件, 如Thymeleaf、JPA等,开发效率更高。
综合来看,Spring Boot相对于SSM框架的优点在于更为简便的配置、依赖管理和框架集成,更好地适用于快速构建中小型Web应用程序的开发。而SSM框架在一些更为复杂的项目中,例如海量数据处理,往往会更加适用,应根据具体项目需求进行选择。

二、总结Spring Boot优势
1.简化配置
在整合 SSM 的时候,需要将大量配置写入 xml 文件中;
Spring Boot 采用约定大于配置的方式,所谓约定大于配置,在 Spring Boot 中体现在开发人员只需要关注应用中不符合约定的部分:比如默认的 WEB 容器端口是 8080,只有当开发人员想要修改时才需要去写这一部分的配置。
2.内置容器
在 SSM 整合中,运行项目需要依赖外部的 Servlet ,比如常用的是 tomcat;
在 Spring Boot 框架中,内置了 tomcat 容器,打包后会生成 jar 包,更加方便部署。Spring Boot 的内置框架支持切换,通过修改 maven 依赖,可以很方便地实现 tomcat、jetty、undertow 三种容器之间的切换。
3.更快速的开发
使用 SSM 开发一个应用需要繁琐的配置过程;
使用 Spring Boot 开发一个应用只需要生成项目,引入 starter 即可,简化了开发的难度。

WebSocket.Server({ server: https.c 设置端口号

js服务端核心代码:

const https = require('https');
const fs = require('fs');
const WebSocket = require('ws');
 
const httpsOptions = {
  key: fs.readFileSync('path/to/your/private/key.pem'), // 更新为你的私钥路径
  cert: fs.readFileSync('path/to/your/certificate.pem')  // 更新为你的证书路径
};
 
const httpsServer = https.createServer(httpsOptions);
httpsServer.listen(443, () => {
  console.log('HTTPS server with WebSocket support is running on port 443');
});
 
const wss = new WebSocket.Server({ server: httpsServer });
 
wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });
 
  ws.send('Hello, this is a WebSocket server!');
});

 

 

fastadmin 安装出现 could not find driver

在安装FastAdmin时遇到“could not find driver”错误通常与数据库连接驱动有关。以下是解决该问题的详细步骤:

  1. 确认错误消息的具体内容‌:
  • 确保错误消息确实是“could not find driver”,这通常指向数据库连接问题。
  1. 检查PHP的PDO扩展是否已安装并启用‌:
  • 使用命令php -m查看当前PHP环境中已启用的模块列表,确认是否有对应的数据库扩展(如pdo_mysql对于MySQL)。

  • 如果扩展未启用,需要修改php.ini文件。找到对应的扩展行(如extension=pdo_mysql),去掉行前的分号(;)以启用该扩展。例如:

  • ;extension=pdo_mysql
  • 修改为
  • extension=pdo_mysql

PHP file_get_contents(): SSL operation failed with code 1. OpenSSL Error message

在调试php脚本代码时,发现使用 file_get_contents() 函数请求HTTPS的网址链接时出现了报错,其报错代码如下面所示“file_get_contents(): SSL operation failed with code 1. OpenSSL Error message…”百度查了一下原因与解决方法,下面就来分享一下。

原因:

服务器上未能正确配置好https证书,所以出现了错误。

1、方法1:

(1)、下载证书,http://curl.haxx.se/ca/cacert.pem

(2)、证书上传到服务器,并记录好上传的路径

(3)、打开php的配置文件,php.ini

(4)、修改 openssl.cafile 的配置的值为上传的证书地址即可

 

2、方案二 直接对 file_get_contents 函数进行设置,让 file_get_contents 函数跳过https验证,暂时解决问题

$url = ‘请求地址’;
$arrContextOptions=array(
“ssl”=>array(
“verify_peer”=>false,
“verify_peer_name”=>false,
“allow_self_signed”=>true,
),
);
$response = file_get_contents($url, false, stream_context_create($arrContextOptions));

3、方案三 使用curl来替代 file_get_contents 函数来使用!

$url = ‘请求地址’;
function getSSLPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
var_dump(getSSLPage($url));

 

现教课程——MYSQL

软件241

链接: https://pan.baidu.com/s/1Q-DHlGTLZLXG3Tl-tnlteA 提取码: r493

软件242

链接: https://pan.baidu.com/s/1XwW2F3IGa_np-PLDtMEDIw 提取码: rbby

 

centos 查看宝塔密码

使用SSH工具连接服务器
使用SSH工具远程连接Linux服务器。
输入命令查看账号和密码
输入命令:/etc/init.d/bt default,查看查看面板默认信息里的账号和密码。 

6.x以上版本也可以输入命令:bt,打开宝塔命令行,输入命令编号14,查看面板

模糊查询文件并删除 ;模糊查询文件夹并删除其下文件

模糊查询文件并删除
find /tmp -type f -name ‘sess*‘ -exec rm -f {} \;

查看大文件
du -sh *

模糊查询文件夹并删除其下文件。
find /var/lib/clamav -type d -name ‘tmp.*‘ -exec rm -rf {} \;

rm -rf 删除文件夹

 

================================对文件或者目录解锁,解锁

增加:

sudo chattr -R +i 目录或者文件

移除:

sudo chattr -R -i 目录或者文件