【原创】【亲测有效】如何实现内网穿透 反向代理工具实操 超级实用 遗憾没早学会

【原创】【亲测有效】如何实现内网穿透 反向代理工具实操 超级实用 遗憾没早学会_第1张图片

高价值使用场景

FRP(Fast Reverse Proxy)是一个功能强大的工具,适用于多种网络场景。以下是几个常见、鲜明且有价值的使用案例:

  1. 远程访问内部服务器

    • 场景:远程工作者需要访问公司内部的数据库或Web服务。
    • 解决方案:通过FRP,远程用户可以穿透公司防火墙,访问内部服务,如同在公司内部网络一样。
  2. 开发和测试Web应用

    • 场景:开发者在本地开发Web应用,并希望向不在同一网络的同事展示。
    • 解决方案:使用FRP将本地服务器暴露到互联网,方便同事访问,无需复杂的路由器配置。
  3. 远程监控和管理设备

    • 场景:需要监控和管理位于远程办公室或地区的IoT设备或服务器。
    • 解决方案:FRP建立安全通道,允许从主办公室远程管理这些设备,而无需开放多个防火墙端口。
  4. 云环境中的服务暴露

    • 场景:在云环境中,有运行在私有实例上的服务需要对外提供服务。
    • 解决方案:FRP作为反向代理,安全地将流量路由到私有实例,避免直接暴露实例,降低安全风险。
  5. ** bypass互联网限制或地域封锁**:

    • 场景:某些地区限制访问特定网站或服务。
    • 解决方案:通过FRP路由流量到位于不受限制地区的服务器,实现访问。
  6. 负载均衡

    • 场景:需要将流量分发到多个内部服务器以提高服务可用性。
    • 解决方案:配置多个FRP客户端,实现流量的负载均衡。
  7. 微服务架构中的服务暴露

    • 场景:在微服务架构中,各服务运行在不同的内部网络,需要对外提供服务。
    • 解决方案:FRP简化服务暴露过程,无需每个服务单独配置,便于管理和部署。

这些场景展示了FRP在提升网络灵活性、安全性和管理效率方面的价值。

实际案例的详细讲解

1.1 FRP基本原理及特点

FRP(Fast Reverse Proxy)是一款轻量级、高性能的反向代理工具,主要用于内网穿透、安全访问和数据传输等场景。FRP由fatedier团队开发,使用Golang语言编写,支持跨平台部署和使用。其工作原理是通过反向代理技术将来自公网的请求转发至内网服务器,并将内网服务器的响应再次转发给公网请求者。在实现内网穿透时,FRP能够打破公网与内网之间的隔离,使公网用户能够直接访问内网服务器上的资源,从而实现远程访问和管理。

FRP的主要特点包括:

  • 内网穿透:支持内网穿透功能,能够实现公网服务访问内网服务器。
  • 通用性:支持多种协议和服务类型,如HTTP、TCP、UDP等,适用于各种不同场景。
  • 安全性:支持数据加密、身份验证和IP白名单等安全机制,确保数据和用户信息的安全。
  • 高性能:采用Go语言编写,具有高性能和高并发处理能力,能够满足大规模并发请求的需求。
  • 易用性:配置简单,文件结构清晰明了,支持多平台部署和使用。

FRP适用于多种场景,如远程访问、内网穿透、云计算和安全访问等。FRP采用开源方式,代码托管在GitHub上(https://github.com/fatedier/frp),拥有活跃的社区和丰富的生态系统,能够满足开发者和企业的不同需求。需要特别注意的是,在使用FRP实现内网穿透时,应避免将敏感或不安全的端口开放至公网,以确保数据和信息安全。

1.2 案例目标

本文介绍了如何使用FRP实现内网穿透,以便外部用户能够访问内网服务器。通过这种方法,可以方便地进行远程访问和管理,提高工作效率和灵活性。需要注意的是,FRP内网穿透可以有效解决网络访问限制和难题,但必须确保安全,避免在公网上开放敏感或不安全的端口。
【原创】【亲测有效】如何实现内网穿透 反向代理工具实操 超级实用 遗憾没早学会_第2张图片

1.3 案例分析

1.3.1 规划节点
IP 主机名 节点类型
49.232.149.81 frp-server 服务端节点,公网固定ip,网络流量中转用
192.168.100.10 frp-client 客户端节点,内网ip不固定,没有固定公网ip
1.3.2 基础准备
  • 服务端:一台云服务器(也可以是具有公网IP的实体机)。
  • 客户端:需要远程访问的内网服务器。

通过远程下载:

wget https://github.91chi.fun//https://github.com//fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz

通过GitHub的releases本地下载:

https://github.com/fatedier/frp/releases

1.4 案例实施

1.4.1 FRP服务端配置

服务器可以是云服务提供商提供的最便宜的云服务器,但必须具有公网IP。
首先,在FRP服务端上传frp软件包:

[root@frp-server ~]# wget https://github.91chi.fun//https://github.com//fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz

解压frp软件包:

[root@frp-server ~]# tar -xzvf frp_0.47.0_linux_amd64.tar.gz

得到以下文件结构:

[root@frp-server frp_0.47.0_linux_amd64]# ll
total 27892
-rwxr-xr-x 1 1001 123 12668928 Feb 10 01:18 frpc
-rw-r--r-- 1 1001 123    11345 Feb 10 01:23 frpc_full.ini
-rw-r--r-- 1 1001 123      126 Feb 10 01:23 frpc.ini
-rwxr-xr-x 1 1001 123 15851520 Feb 10 01:18 frps
-rw-r--r-- 1 1001 123     5907 Feb 10 01:23 frps_full.ini
-rw-r--r-- 1 1001 123       26 Feb 10 01:23 frps.ini
-rw-r--r-- 1 1001 123    11358 Feb 10 01:23 LICENSE

其中,以frpc开头的文件是客户端的核心文件,以frps开头的文件是服务器端的核心文件。

修改frps.ini文件(核心步骤):

[root@frp-server frp_0.47.0_linux_amd64]# vim frps.ini
[common]
bind_port = 7000  # 服务端绑定的端口,需要在防火墙中开放
bind_udp_port = 5999
dashboard_port = 6001  # 仪表盘访问的端口,需要在防火墙中开放
dashboard_user = admin  # 仪表盘用户名
dashboard_pwd = admin  # 仪表盘密码

# 可选配置
vhost_http_port = 80  # http 服务映射端口,需要在防火墙中开放
vhost_https_port = 443  # https 服务映射端口,需要在防火墙中开放
token = your_token  # 协商令牌,客户端和服务器需要一致,建议配置该项并设置32位以上高强度复杂密码
log_file = ./frps.log  # 日志文件位置
log_level = info  # 日志级别,可选:debug, info, warn, error
log_max_days = 3  # 日志保存天数
heartbeat_timeout = 15  # 心跳超时配置
max_pool_count = 50  # 连接池的数量
max_ports_per_client = 0  # 每个客户端最大可以使用的端口,0表示无限制
authentication_timeout = 0  # 时间校验超时,0表示不校验
tcp_mux = true  # 是否使用TCP复用

更多参数请参考FRP官方文档(https://gofrp.org/docs/reference/server-configures)。

开启服务并后台自启动:

[root@frp-server frp_0.47.0_linux_amd64]# nohup ./frps -c frps.ini &

访问页面进行测试:
完成上述配置后,打开浏览器,输入IP:6001,查看FRP的工作状态,说明服务器端FRP服务已成功开启。

1.4.2 FRP-Linux客户端配置

客户端也需要下载并解压FRP安装包:

[root@frp-client ~]# tar -xzvf frp_0.47.0_linux_amd64.tar.gz

修改frpc.ini文件(核心步骤):

[root@frp-client frp_0.47.0_linux_amd64]# vim frpc.ini
[common]
server_addr = 49.232.149.81  # 公网服务器的公网IP
server_port = 7000  # 与服务器端配置一致的端口

[ssh]  # 服务名称自定义
type = tcp
local_ip = 127.0.0.1
local_port = 22  # 映射到本地的端口
remote_port = 6002  # 远程连接的端口

[http]  # 可选,用于网站服务穿透
type = http
local_ip = 127.0.0.1
local_port = 80  # 本地HTTP服务端口
custom_domains = yourdomain.com  # 域名解析到该公网IP

更多参数请参考FRP官方文档(https://gofrp.org/docs/reference/client-configures)。

开启服务并后台自启动:

[root@frp-client frp_0.47.0_linux_amd64]# nohup ./frpc -c frpc.ini &

访问FRP查看是否配置成功。

1.4.3 FRP-Windows客户端配置

下载并解压FRP安装包:
修改frpc.ini文件(核心步骤):
使用记事本打开frpc.ini文件:

[common]
server_addr = 49.232.149.81  # 公网服务器的公网IP
server_port = 7000  # 与服务器端配置一致的端口

[ssh]  # 服务名称自定义
type = tcp
local_ip = 127.0.0.1
local_port = 22  # 映射到本地的端口
remote_port = 6003  # 远程连接的端口

打开终端进入文件所在目录并开启服务:

./frpc -c frpc.ini
1.4.4 远程访问方式
  • Linux远程连接

    ssh [email protected] -p 6002
    

    示例:

    [root@frp-server ~]# ssh [email protected] -p 6002
    [email protected]'s password:
    Last login: Tue Feb 28 09:49:28 2023 from 127.0.0.1
    [root@frp-client ~]#
    
  • Windows远程连接
    进入远程桌面连接界面,输入公网IP:端口(例如49.232.149.81:6003)进行连接。

其他场景服务器端和客户端配置案例

FRP(Fast Reverse Proxy)在多种场景中具有广泛的应用价值,以下是一些鲜明、有用且常见的应用场景示例:

1. 远程桌面访问

场景描述

企业或个人有一台位于内网的计算机,希望在外出时能够通过远程桌面协议(如RDP、VNC等)访问这台计算机进行工作或管理。

如何使用FRP
  • 服务端配置

    [common]
    bind_port = 7000
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端配置

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [rdp]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3389
    remote_port = 6000
    
使用效果

通过FRP配置,外部用户可以使用远程桌面连接工具(如Windows的远程桌面连接)通过公网IP:6000访问内网计算机的3389端口,实现远程桌面控制。

2. 网站和应用服务的内网穿透

场景描述

开发者或企业有一个位于内网的网站或应用服务,希望在没有公网IP的情况下,让外部用户可以直接访问这些服务。

如何使用FRP
  • 服务端配置

    [common]
    bind_port = 7000
    vhost_http_port = 80
    vhost_https_port = 443
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端配置

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [web]
    type = http
    local_ip = 127.0.0.1
    local_port = 8080
    custom_domains = yourdomain.com
    
使用效果

外部用户通过访问http://yourdomain.comhttps://yourdomain.com可以访问内网服务器上运行的网站或应用服务,而无需内网服务器有公网IP。

3. 数据库远程访问

场景描述

开发团队需要访问位于内网的数据库服务器(如MySQL、PostgreSQL等),但内网服务器没有公网IP,只能通过内网访问。

如何使用FRP
  • 服务端配置

    [common]
    bind_port = 7000
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端配置

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [mysql]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3306
    remote_port = 6001
    
使用效果

通过FRP配置,开发团队可以使用数据库管理工具(如MySQL Workbench、pgAdmin等)通过公网IP:6001访问内网数据库服务器的3306端口,实现远程数据库管理。

4. 文件传输和共享

场景描述

企业内部需要对外提供文件传输和共享服务,但内网服务器没有公网IP。

如何使用FRP
  • 服务端配置

    [common]
    bind_port = 7000
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端配置

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [fileserver]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 21
    remote_port = 6002
    
使用效果

外部用户可以通过FTP客户端连接公网IP:6002,实现文件的上传和下载,而内网服务器的FTP服务位于21端口。

5. 跨地域的内网服务访问

场景描述

企业在一个地理位置有多个分支机构,每个分支机构有独立的内网环境,需要集中管理各分支机构的内网服务。

如何使用FRP
  • 服务端配置(可以设置多个客户端连接):

    [common]
    bind_port = 7000
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端A配置(分支机构A):

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [service-a]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 8080
    remote_port = 6003
    
  • 客户端B配置(分支机构B):

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [service-b]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 8080
    remote_port = 6004
    
使用效果

总部的管理团队可以通过公网IP:6003访问分支机构A的内网服务,通过公网IP:6004访问分支机构B的内网服务,实现跨地域的集中管理。

6. 安全监控和日志访问

场景描述

企业需要远程访问位于内网的安全监控系统(如摄像头、日志服务器等),但内网服务器没有公网IP。

如何使用FRP
  • 服务端配置

    [common]
    bind_port = 7000
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端配置

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [camera]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 8000
    remote_port = 6005
    
    [logserver]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 514
    remote_port = 6006
    
使用效果

外部用户可以通过公网IP:6005访问内网摄像头的监控画面,通过公网IP:6006访问内网日志服务器的端口,实现远程监控和日志管理。

7. 云游戏和远程桌面游戏

场景描述

个人或企业希望在云服务器上运行游戏,然后通过内网穿透技术让外部用户能够远程访问并玩这些游戏。

如何使用FRP
  • 服务端配置

    [common]
    bind_port = 7000
    bind_udp_port = 7001
    dashboard_port = 6001
    dashboard_user = admin
    dashboard_pwd = admin
    
  • 客户端配置

    [common]
    server_addr = 49.232.149.81
    server_port = 7000
    
    [game]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3000
    remote_port = 6007
    
    [game-udp]
    type = udp
    local_ip = 127.0.0.1
    local_port = 3001
    remote_port = 6008
    
使用效果

外部用户可以通过公网IP:6007公网IP:6008访问内网游戏服务器的TCP和UDP端口,实现远程游戏体验。

这些场景展示了FRP在实际应用中的多样性和灵活性,能够帮助企业或个人在没有公网IP的情况下,实现多种远程访问和管理功能。

你可能感兴趣的:(协议,分布式应用,服务器,服务器,代理模式,网络,go,远程工作,网络安全,网络协议)