【Linux】FRP:内网穿透

2024-08-31 16:04
文章标签 linux 穿透 frp

本文主要是介绍【Linux】FRP:内网穿透,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FRP(Fast Reverse Proxy)是一种高性能的反向代理应用,主要用于穿透内网和实现端口映射。它允许你将局域网中的服务暴露到公网,从而能够在公网中访问这些服务。

FRP 主要由两部分组成:

  • FRPC 客户端:运行在公司内网机器上,接收来自公网的访问请求,并将请求转发给内网服务。
  • FRPS 服务端:部署在具有公网 IP 的机器上,暴露服务的公网入口,接收公网访问请求,通过加密隧道转发到 FRPC。

服务端(frps)部署

下载 FRP

从 FRP 的 GitHub Releases 页面下载适用于你的系统的版本。例如:

wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz

解压压缩包

下载完成后,使用以下命令解压缩包:

tar -xzf frp_0.60.0_linux_amd64.tar.gz

这会在当前目录下创建一个名为 frp_0.60.0_linux_amd64 的文件夹,里面包含 frp 的所有必要文件。

配置 frps

进入文件夹,有一个名为 frps.toml 的配置文件,并根据你的需求填入配置内容。下面是一个详细注释的 TOML 配置示例:

# [common] 部分用于配置 FRP 服务端的通用设置[common]
# 服务端监听的端口,客户端通过这个端口连接到服务端
bindPort = 7000# 启用 TLS,确保服务端仅接受加密连接
transport.tls.force = true# 身份验证令牌,客户端和服务端的 token 必须一致以确保安全连接
auth.token = "public"# [webServer] 部分用于配置 Web 管理面板的设置[webServer]
# Web 管理面板绑定的 IP 地址,0.0.0.0 表示监听所有网络接口
addr = "0.0.0.0"# Web 管理面板监听的端口
port = 7500# 登录 Web 管理面板的用户名
user = "admin"# 登录 Web 管理面板的密码
password = "admin"# [log] 部分用于配置日志记录的设置[log]
# 日志文件的路径
file = "frps.log"# 日志级别,可以是 debug、info、warn、error 之一,决定记录的详细程度
level = "info"# [dashboard] 部分用于配置仪表盘功能(如果启用)[dashboard]
# 启用仪表盘功能以查看服务状态和统计信息
enable = true# 仪表盘的监听地址,通常设置为 0.0.0.0 以监听所有网络接口
addr = "0.0.0.0"# 仪表盘的监听端口
port = 7500# 仪表盘的访问用户名
user = "admin"# 仪表盘的访问密码
password = "admin"# [proxy] 部分用于配置负载均衡(如果需要)[proxy]
# 负载均衡策略,例如 round-robin(轮询)或 least-connections(最少连接数)
strategy = "round-robin"# [allow] 部分用于配置允许的 IP 列表(防火墙设置)[allow]
# 允许访问 FRP 服务端的 IP 地址列表
ip = ["192.168.1.100", "192.168.1.101"]# [http] 部分用于配置 HTTP 代理(如果需要)[http]
# 设置 HTTP 代理的地址,将所有来自客户端的 HTTP 请求转发到这个代理地址
http_proxy = "http://localhost:8080"# [tcp] 部分用于配置 TCP 代理(如果需要)[tcp]
# 设置 TCP 代理的地址,将所有来自客户端的 TCP 请求转发到这个代理地址
tcp_proxy = "tcp://localhost:3306"

启动 frps 服务端

在解压后的 FRP 目录中,使用 -c 参数指定配置文件路径来启动 frps

./frps -c ./frps.toml

客户端(frpc)部署

FRP 客户端(frpc)用于将本地服务暴露到外部网络。配置 frpc 客户端涉及设置本地服务的映射和连接到 FRP 服务端(frps)。以下是 frpc 部署和配置的详细说明:

下载 FRP

从 FRP 的 GitHub Releases 页面下载适用于你的系统的版本。例如:

wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz

解压压缩包

下载完成后,使用以下命令解压缩包:

tar -xzf frp_0.60.0_linux_amd64.tar.gz

这会在当前目录下创建一个名为 frp_0.60.0_linux_amd64 的文件夹,里面包含 frp 的所有必要文件。

配置 frpc

进入文件夹,有一个名为 frpc.toml 的配置文件,并根据你的需求填入配置内容。下面是一个详细注释的 TOML 配置示例:

# [common] 部分用于配置 FRP 客户端的通用设置
[common]
# 服务端的地址,FRP 客户端将连接到该地址的服务端。
server_addr = "your_server_ip"# 服务端的端口,客户端通过该端口连接到服务端。
server_port = 7000# 身份验证令牌,必须与服务端配置中的 token 保持一致,以确保连接的安全性。
token = "public"# [http] 部分用于配置 HTTP 服务的端口映射,将本地 HTTP 服务暴露到远程。
[http]
# 类型为 HTTP,表示将本地 HTTP 服务通过 FRP 暴露到远程网络。
type = "http"# 本地服务的 IP 地址,通常设置为 127.0.0.1,即本地回环地址。
local_ip = "127.0.0.1"# 本地服务监听的端口,例如 HTTP 服务的端口,默认端口为 80。
local_port = 80# 服务端暴露的端口,外部用户通过此端口访问你的本地 HTTP 服务。
remote_port = 8080# [tcp] 部分用于配置 TCP 服务的端口映射,将本地 TCP 服务暴露到远程。
[tcp]
# 类型为 TCP,表示将本地 TCP 服务通过 FRP 暴露到远程网络。
type = "tcp"# 本地服务的 IP 地址,通常设置为 127.0.0.1,即本地回环地址。
local_ip = "127.0.0.1"# 本地服务监听的端口,例如数据库服务的端口(如 MySQL 的 3306)。
local_port = 3306# 服务端暴露的端口,外部用户通过此端口访问你的本地 TCP 服务。
remote_port = 6000# [udp] 部分用于配置 UDP 服务的端口映射,将本地 UDP 服务暴露到远程。
[udp]
# 类型为 UDP,表示将本地 UDP 服务通过 FRP 暴露到远程网络。
type = "udp"# 本地服务的 IP 地址,通常设置为 127.0.0.1,即本地回环地址。
local_ip = "127.0.0.1"# 本地服务监听的端口,例如游戏服务器或 VoIP 服务的端口。
local_port = 1234  # 本地 UDP 服务监听的端口# 服务端暴露的端口,外部用户通过此端口访问你的本地 UDP 服务。
remote_port = 7001  # 服务端暴露的端口# [custom] 部分用于配置自定义域名和路径映射,将本地服务通过特定域名和路径暴露到远程。
[custom]
# 类型为 HTTP,表示将本地 HTTP 服务通过自定义域名暴露到远程网络。
type = "http"# 本地服务的 IP 地址,通常设置为 127.0.0.1,即本地回环地址。
local_ip = "127.0.0.1"# 本地服务监听的端口,例如自定义服务的端口。
local_port = 8080# 自定义域名列表,客户端可以通过这些域名访问你的本地服务。需要在服务端配置相应的域名解析。
custom_domains = ["example.com"]# 自定义路径列表,配置访问路径的映射,例如 "/api" 和 "/static"。
locations = ["/api", "/static"]# [web] 部分用于配置 Web 管理面板,通常用于监控和管理 FRP 客户端。
[web]
# 类型为 HTTP,表示将本地的 Web 管理面板服务暴露到远程网络。
type = "http"# 本地服务的 IP 地址,通常设置为 127.0.0.1,即本地回环地址。
local_ip = "127.0.0.1"# 本地服务监听的端口,例如管理面板的端口。
local_port = 7500# 服务端暴露的端口,外部用户通过此端口访问你的 Web 管理面板。
remote_port = 7500

启动 frpc 客户端

在解压后的 FRP 目录中,使用 -c 参数指定配置文件路径来启动 frpc

./frpc -c ./frpc.toml

测试

你可以使用 Python 自带的 http.server 模块来快速启动一个简单的 HTTP 服务器,然后使用 FRP 将这个服务器暴露给外部网络。

python -m http.server 8000

Linux 使用 Systemd 管理服务

创建 Systemd 服务文件

  • /etc/systemd/system/ 目录下创建一个新的服务文件(例如 frps.service):

    sudo vi /etc/systemd/system/frps.service
    
  • 文件内容如下:

    [Unit]
    Description=FRP Client Service
    After=network.target[Service]
    ExecStart=/path/to/frps -c /path/to/frps.toml
    Restart=on-failure[Install]
    WantedBy=multi-user.target
    
  • /path/to/frps 替换为 frps 的实际路径。

启用并启动服务

  • 启用服务,使其开机自启动:

    sudo systemctl enable frps
    
  • 手动启动服务:

    sudo systemctl start frps
    

管理服务

  • 停止服务:

    sudo systemctl stop frps
    
  • 查看服务状态:

    sudo systemctl status frps
    

通过这些步骤,你可以方便地在 Windows 和 Linux 系统上启动和停止 FRP 服务,并设置其开机自启。

在 Windows 系统上管理 FRP 服务的启动、停止和设置开机自启可以通过创建和使用 Windows 服务来实现。以下是详细步骤:

Windows 使用 NSSM 管理服务

NSSM(Non-Sucking Service Manager)是一个轻量级的工具,帮助你在 Windows 上将任何可执行程序作为服务运行。你可以用 NSSM 来管理 FRP 的启动、停止和开机自启。

下载和安装 NSSM

  • 从 NSSM 官方网站 下载 NSSM。
  • 解压下载的文件,将 nssm.exe 复制到一个系统路径目录(如 C:\Windows\System32),或者保存在某个文件夹中供以后使用。

创建 FRP 服务

  1. 打开命令提示符(以管理员身份运行)并执行以下命令创建 FRP 服务:

    nssm install frps
    
  2. 弹出 NSSM 界面后,按如下方式配置:

    • Application Path:选择 frps.exe 的路径。

    • Arguments:填入 -c 参数,指定 frps.toml 配置文件的路径,例如:

      -c C:\path\to\frps\frps.toml
      
    • Startup directory:选择 frps.exe 所在的目录。

  3. 点击 “Install Service” 完成服务的创建。

启动和管理服务

  • 启动 FRP 服务:

    nssm start frps
    
  • 停止 FRP 服务:

    nssm stop frps
    
  • 查看 FRP 服务的状态:

    nssm status frps
    

设置开机自启

NSSM 自动会将服务设置为开机自启。创建服务后,它会随系统启动自动运行。如果你需要手动修改此设置,可以通过以下方式进行:

  1. 打开 服务管理器,可以通过运行 services.msc 打开。

  2. 找到刚刚创建的 frps 服务,右键点击,选择 “属性”。

  3. 在“启动类型”下拉菜单中选择 自动,然后点击 “确定”。

删除服务

如果需要删除已经创建的 FRP 服务,可以使用以下命令:

nssm remove frps confirm

这会完全移除 frps 服务,并删除其相关的启动配置。

这篇关于【Linux】FRP:内网穿透的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124358

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo