内网的服务如何能在公网使用?

我在内网中有很棒的服务资源,但是没有固定IP,如何能够在公网使用呢?

要解决这种问题,内网穿透工具 frp(Fast Reverse Proxy) 是一个很棒的选择:既然外网不能访问内网,那么就主动从内网打通到外网的通道!

基本的原理是:

  • 前提条件
    • 要有一台有公网地址的服务器【配置可以比较低】,内网服务器可以连接到这台公网服务器
    • 内网服务器安装frp客户端:frpc,公网服务器安装frp服务端:frps
  • 建立 "长连接"------ 打通内网到公网的 "通道"
    • 内网设备启动 frpc 客户端,并加载配置文件(配置中包含 frps 的公网 IP、端口、认证信息等)。
    • frpc 主动向公网的 frps 发起 TCP 长连接(默认用 8000 端口,可自定义),并维持这个连接(通过心跳机制防止断开)。

这一步是穿透的关键:由于内网设备没有公网 IP,公网无法主动 "找到" 内网设备,因此必须由内网的 frpc "主动出击",与公网的 frps 建立连接,形成一条稳定的 "数据通道"。

内网设备无法被公网访问的根本原因,是路由器的 NAT(网络地址转换)机制会隐藏内网 IP。frp 通过 "frpc 主动连接 frps" 的方式,让路由器将 frpc 与 frps 的连接加入 "NAT 映射表",后续 frps 向 frpc 发送的数据(公网请求),会被路由器正确转发到内网的 frpc,从而实现 "穿透" NAT 的效果。

本文通过一个具体的例子来展示如何使用内网穿透工具frp将内网的web服务推向公网。

frp下载地址


假定在内网服务器中有一个web服务,监听端口号:8080;公网服务器IP地址为:123.123.123.123。下图描述了实现内网穿透的主要步骤:

  1. 在具有公网 IP 的公网服务器上部署 frps

部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:

toml 复制代码
bindPort = 7000
  1. 在需要被访问的内网服务器上部署 frpc

部署 frpc 并编辑 frpc.toml 文件,以下是示例配置:

toml 复制代码
serverAddr = "123.123.123.123"  # frps 的IP
serverPort = 7000   # frps的bindPort,连接它可以打开通道

[[proxies]]
name = "myWebServer"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080    # 本地web服务监听的端口号
remotePort = 6666   # 在公网上暴漏的端口号
  • localIP 和 localPort 配置为需要从公网访问的内网服务的地址和端口
  • remotePort 表示在 frps 监听的端口,访问此端口的流量将被转发到内网服务的地址和端口。
  1. 启动 frps 和 frpc

公网服务器需要打开端口 7000 和 6666。

  1. 用户访问内网机器

用户使用网址:http://123.123.123.123:6666 即可使用 myWebServer 了,frps将用户访问公网服务器端口 6666 的流量转发到了内网服务器的端口: 8080 。

下图直观的展示了主要过程:

如果要通过域名访问内网服务器的web服务,可参见:通过自定义域名访问内网的 Web 服务


🪐祝好运🪐

相关推荐
拾心219 小时前
【云运维】ELK笔记
运维·elk
AWS官方合作商9 小时前
深入解析:利用EBS直接API实现增量快照与精细化数据管理(AWS)
运维·云计算·aws
waves浪游9 小时前
基础开发工具(下)
linux·运维·服务器·开发语言·c++
Miki Makimura10 小时前
KVStore 多行文章型键值扩展解析:切片存储与客户端多行交互
运维·服务器·网络·学习
春风霓裳11 小时前
ubuntu磁盘管理、磁盘扩容
linux·运维·ubuntu
广州服务器托管11 小时前
WIN11.26H1.27982.1中简优化版 45进程(2025.11.8)
运维·人工智能·计算机网络·云计算·可信计算技术
拾心2111 小时前
【云运维】LNMP 架构部署与应用
运维·架构
亮子AI12 小时前
【Nginx】怎样清除 Nginx 的缓存?
运维·nginx·缓存
vvw&12 小时前
如何在 Ubuntu 24.04 上安装和使用 AdGuard
linux·运维·服务器·ubuntu·adguard
weixin_4532536512 小时前
python+playwright自动化如何解决文件上传问题
运维·自动化