内网穿透配置(FRP)

article/2025/9/12 1:39:08

目录

0、内网穿透的一般场景

1、内网穿透配置

a、frp软件下载

b、frp 的配置

3、通过 frp 实现远程连接

4、设置 frpc / frps 开机启动的方法

5、设置frp安全连接的方法


0、内网穿透的一般场景

放假回家怎么远程连接学校实验室的服务器?

先分析一波:首先家里的电脑与学校服务器主机分属不同的局域网内网)中,也就是说家里网络设备上层的公网IP不同于学校服务器上层的公网IP,因此这种情况下就不能仅仅使用 SSH 来远程连接学校的服务器了,还需要借助一种叫做内网穿透的技术实现连接。如下面这幅图。

公网的IP是独一无二的,而局域网IP在从属不同公网的前提下可以是一样的,

内网穿透需要第三台电脑作为中转站,这个中转站需要有一个公网IP,一般来说可以用云服务器(一般都有公网IP)来作为中转站,可以租用阿里云腾讯云华为云这些平台中的云服务器。

1、内网穿透配置

使用的系统:云服务器(中转站)和实验室服务器(需要向公网暴露IP的本地主机)都是Ubuntu,个人电脑是Windows10.

a、frp软件下载

这里使用的内网穿透的工具是 FRP,GitHub地址:https://github.com/fatedier/frp。下载压缩包解压之后会看到下面的内容。这里以Windows版的为例,frp 含有 frps 和 frpc 两种配置文件,frps 是内网穿透服务端service(也就是中转站)的配置文件,作为内网穿透的桥梁。frpc 是内网穿透中需要向公网暴露IP的本地主机(也就是示例场景中的实验室服务器)。

b、frp 的配置

云服务器(后面称做A)作为内网穿透的桥梁,是内网穿透的服务端,需要使用 frps。实验室服务器(后面称做B)属于内网穿透中的服务端client,需要使用 frpc。可以通过分别修改 frps.ini 和 frpc.ini 来配置服务端和客户端。

中需要配置 frps.ini,这个文件原始内容如下:

[common]
bind_port = 7000

保持默认参数即可。如果想配置其他内容,可以查看 frps_full.ini 文件的内容,里面有全部的配置语句。bind_port 表示将 B 与 A 的 7000 端口绑定,具体的端口号可以自定义修改。如果想配置其他内容,可以查看frps_full.ini文件的内容,里面有全部的配置语句。例如可以加一行 token=xxxx,类似于密钥,需两边都一样才能访问:

[common]
bind_port = 7000
# 可以加一行 token=xxxx,类似于密码,需两边都对上才能访问,此时客户端也需要有同样的设置
token=12345

主机 需要配置 frpc.ini,这个文件原始内容如下:

[common]
# server_addr需要改成公网IP地址
server_addr = x.x.x.x
server_port = 7000
# 如前所述,可以加一行 token=xxxx,类似于密匙-密钥对,需两边都一样才能访问
token=12345
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个端口可以自由设置,设置完后在云服务器中开启相应的端口即可
remote_port = 6000

server_addr 参数修改为公网IP,server_port 用于frps与frpc之间交换数据的端口,local_port 是ssh服务端口,remote_port 是在frp服务器上公开的供外部设备连接的端口,6000 与 7000 端口的作用可以参照博客开头的那张图。接下来需要在云服务器的端口管理中添加相应的端口 6000 和 7000 并开放即可。比如我用的阿里云服务器,是在“服务器安全设置”选项中添加端口的:

3、通过 frp 实现远程连接

在上述配置都修改完成后,,在云服务器 A 上执行以下指令运行frps端:

./frps -c ./frps.ini

在本地服务器 B 上执行以下指令运行 frpc 端:

./frpc -c ./frpc.ini

然后本地主机就可以使用内网穿透来远程访问本地服务器了,在本地主机上执行以下指令:

ssh  [username]@[ip]  -p  [port_num]
  • 其中:
  • username 是 B 中的用户名,后面需要输入的密码也是该账户的密码。
  • ip 是 A 的公网 ip 地址。这里注意!是 A 的公网 ip 地址,不是 B 的!
  • port_num 是 frpc.ini 中设置的 remote_port 。

例如,要连接 实验室服务器(B)中的名为 abc 的用户,中转账云服务器的公网ip为123.0.0.3,remote_port 设置为 6000,则指令如下:

ssh  abc@123.0.0.3  -p  6000

同样也可以借助 VSCode 中的 Remote-SSH 插件,方便远程连接后的文件管理,方法可以看这篇博客 :SSH远程连接实例_地球被支点撬走啦的博客-CSDN博客_ssh连接实例

4、设置 frpc / frps 开机启动的方法

如果想让远程服务器 B 与本地服务器 A 开机自动启动 frps 和 frpc 这两个服务,就需要用到 systemd 文件夹中的文件了。内容如下:

Linux 系统下的开机启动需要使用 frps.service frpc.service 这两个文件,将这两个文件分别拷贝到对应机器的 /lib/systemd/system 文件夹下。需要修改其中的 User 字段,改为当前主机用户的用户名,还需要修改 ExecStart 字段,把其中的 frps/frps 的路径改成你实际 frpc/frpc 所在的绝对路径。

在云服务器主机 A 中修改如下:

这里运行 frps 的云服务器的用户名为 admin,frps 的路径为 /home/admin/frp/frps,因此将原始的

frps.service 中的:
[Unit]
Description=Frp Server Service
After=network.target[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576[Install]
WantedBy=multi-user.target
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini

改为:

[Unit]
Description=Frp Server Service
After=network.target[Service]
Type=simple
User=admin
Restart=on-failure
RestartSec=5s
ExecStart=/home/admin/frp/frps -c /home/admin/frp/frps.ini
LimitNOFILE=1048576[Install]
WantedBy=multi-user.target
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini

 然后运行 frpc 的本地服务器 B 中也是类似的设置:

[Unit]
Description=Frp Client Service
After=network.target[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
LimitNOFILE=1048576[Install]
WantedBy=multi-user.target# 改为:====================================================[Unit]
Description=Frp Client Service
After=network.target[Service]
Type=simple
User=ocean
Restart=on-failure
RestartSec=5s
ExecStart=/home/pathto/frp/frpc -c /home/pathto/frp/frpc.ini
ExecReload=/home/pathto/frp/frpc reload -c /home/pathto/frp/frpc.ini
LimitNOFILE=1048576[Install]
WantedBy=multi-user.target

然后在 B 中依次执行以下四条指令启动 service 服务,实现开机启动:

systemctl daemon-reload     # 重新加载
systemctl enable frpc.service  # 使能开机启动
systemctl start frpc.service    # 开启服务
systemctl status frpc.service   # 查看服务状态 

如果开启成功,则会显示如下界面 Activate 会显示绿色的 running

云服务器 A 中的开机启动方式也是类似的,就不再赘述了。

5、设置frp安全连接的方法

如果直接将服务器暴露到公网上可能会有安全隐患,如果别人知道了公网中转站的 ip 和转接端口,就相当于知道了内网服务器的 ssh 端口,如果知道密码的话就可以随意登陆了。因此,登陆密码可以复杂一些以保证安全。另外一点,可以使用安全ssh登录,这个是官网的方法GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. - GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.https://github.com/fatedier/frp#expose-your-service-privately

frp 服务端主机 A 的 frps.ini 不需要修改,这要修改 frp 客户端主机 B 的 frpc.ini 的配置,这里移除了 remote_port 的设置。

[common]
server_addr = x.x.x.x
server_port = 7000
token = 12345
[secret_ssh] 
# secret tcp
type = stcp
# security key,只有 sk 一致的用户才能访问到此服务
sk = abcdefg
# 向外部暴露的本地SSH服务端口
local_ip = 127.0.0.1
local_port = 22 

另外,需要远程连接内网服务器的个人PC也需要运行 frpc,此时 frpc.ini 的配置为:

[common]
server_addr = x.x.x.x
server_port = 7000
token = 12345
[secret_ssh_visitor]
type = stcp
role = visitor
server_name = secret_ssh
# secret key,必须与目标主机的 frpc.ini 中的 sk 一样
sk = abcdefg
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 6000

使用安全连接的情况下,在远程连接时,需要先在个人电脑上(这里是Windows)运行以下命令:

frpc.exe -c frpc.ini

然后再执行ssh命令实现远程连接

ssh [username]@127.0.0.1 -p [port_num]

http://chatgpt.dhexx.cn/article/auiWPtp7.shtml

相关文章

FRP入门篇

目录 一、前言 1、概述 2、原理 3、支持功能 4、适用场景 二、环境准备 三、使用 1、安装包下载 2、服务端部署 2.1、上传安装包 2.3、启动服务端 3、客户端部署 3.1、代理服务准备 3.2、上传安装包 3.3、客户端配置 3.4、启动客户端 4、功能验证 一、前言 1、…

frps内网穿透

1 原理讲解 frp工作原理 服务端运行,监听一个主端口,等待客户端的连接; 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;服务端fork新的进程监听客户端指定的端口; 外网用户连接到客户…

2021大数据架构、高性能、数据治理面试题

2021大数据架构、高性能、数据治理面试题 需要自取:https://url80.ctfile.com/f/32319880-516640957-aba608 (访问密码:1000)

Java架构师和大数据架构师的区别是什么?哪个更有发展前景?

[Java]是我们耳熟能详的编程语言,[大数据]更是当今科技的明星技术,那Java和Java大数据架构学习的内容是一样的吗?两者有什么区别呢?今天千锋广州Java的老师就从Java和大数据架构的以下方面谈谈两者的区别。 [ 01 [架构师](需要考…

大数据架构发展的20年

随着近几年数据湖概念的兴起,业界对于数据仓库和数据湖的对比甚至争论就一直不断。有人说数据湖是下一代大数据平台,各大云厂商也在纷纷的提出自己的数据湖解决方案,一些云数仓产品也增加了和数据湖联动的特性。 但是数据仓库和数据湖的区别…

大数据架构设计模式主要考虑八方面问题

在架构设计中,没有万能的软件架构能解决所有问题,不同的场景、需求、限制下需要有针对性的架构模式才能满足项目需求。大数据架构设计模式中,需要从分层、分割、分布式、集群、缓存、异步、灾备、自动化几个方面考虑。 1.分层 大数据平台从…

深度解密 5 类大数据架构及实现

前几天读到白发川的一篇文章《对比解读五种主流大数据架构的数据分析能力》,文中详细总结了各类数据架构的应用以及原理。作为一名在数据仓库耕耘多年的技术人员,对于其中的一些技术细节还是破解兴趣的,所以随着作者的思路写下了我对主流数据…

典型大数据架构有哪些?我该怎么选择?

讨论大数据架构,不可避免要讨论传统的结构化存储和数据仓库。 PS:最原始的结绳记事、仓颉造字不在咱们讨论范围内哈,咱们主要讨论计算机出现以后的数据存储。 我们对数据存储方式的认知顺序一般是: 注意:这个演变过程&…

大数据架构与技术——(一)大数据概述

文章目录 1.1 大数据时代1.1.1第三次信息化浪潮1.1.2信息科技为大数据时代提供技术支撑1.1.3数据产生方式的变革促成大数据时代的来临1.1.4 大数据的发展历程 1.2 大数据概念1.2.1 数据量大1.2.2 数据类型繁多1.2.3 处理速度快 1.3 大数据的影响1.4 大数据的应用1.5 大数据关键…

什么是大数据架构

什么是大数据架构 大数据架构是用于摄取和处理大量数据(通常称为“大数据”)的总体系统,因此可以针对业务目的进行分析。该架构可视为基于组织业务需求的大数据解决方案的蓝图。大数据架构旨在处理以下类型的工作:   批量处理大数据源。 实时处理大…

Pipeline大数据架构

1.Pipeline大数据架构 (create by 王小雷) Pipeline大数据架构,面向大数据仓库和大数据处理平台。是基于lambda的大数据架构的变种,增加了企业级服务,而并非只是大数据组件的对切,是一种更落地的方案。 如…

大数据架构之--Kappa架构

一、什么是Kappa架构 Kappa 架构是由 LinkedIn 的前首席工程师杰伊克雷普斯(Jay Kreps)提出的一种架构思想。克雷普斯是几个著名开源项目(包括 Apache Kafka 和 Apache Samza 这样的流处理系统)的作者之一。 Kreps 提出了一个改…

大数据架构及技术体系

下面是大数据体系架构图 大数据分2个部分,一部分是走实时的,另外一部分是走离线的,不管那块都需要数据来分析 从上图来看,数据分为结构化数据(MYSQL,ORACLE等),半结构数据(文件日志…

大数据架构演进

1、数仓架构演变(场景驱动) 1.1 经典数仓架构 数据仓库概念是Inmon于1990年提出并给出了完整的建设方法 1.2 离线大数据架构 随着互联网时代来临,数据量暴增,开始使用大数据工具来代替经典数仓中的传统工具 此时仅仅是工具的…

大数据架构(一)背景和概念

-系列目录- 大数据架构(一)背景和概念 大数据架构(二)大数据发展史 一、背景 1.岗位现状 大数据在一线互联网已经爆发了好多年,2015年-2020年(国内互联网爆发期)那时候的大数据开发,刚毕业能写Hive SQL配置个离线任务、整个帆软报表都20K起步。如果做到架…

大数据架构

大数据核心原理和场景分析 processon:https://www.processon.com/view/link/60b4d0071e08532bd00e9290

大数据架构图

大数据管理数据处理过程图 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察力。大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。随着业务的增长,大量和流程、…

大数据架构:全网最全大数据架构生态

文章目录 简介1、数据采集技术框架2、数据存储技术框架3、分布式资源管理框架4、数据计算框架(1)离线数据计算 5、数据分析技术框架6、任务调度技术框架7、大数据底层基础技术框架8、数据检索技术框架9、大数据集群安装管理框架 简介 随着大数据行业的发…

架构-大数据架构-阿里

大数据架构 大数据框架从0到1整个过程的实现,根据本博客内容,可以实现整个大数据基本搭建,只是大概步骤,供学习参考。 本博客从下面5个方面介绍: 技术框架技术选型系统架构设计业务流程生态实现步骤 以阿里为例的大数…

大数据架构新解

大数据系统大体可以分成以下四个部分: 1,数据采集层 2,数据计算层 3,数据服务层 4,数据应用层 下图是阿里巴巴大数据系统架构图: 一、数据采集层 数据采集主要分成以下三块数据: 1&#xff…