frp如何实现内网穿透访问

联启 网络工具 14

本文目录导读:

frp如何实现内网穿透访问-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 核心原理
  2. 安装与配置步骤
  3. 高级功能与优化
  4. 常见问题排查

FRP(Fast Reverse Proxy)是目前最流行的内网穿透工具之一,它通过将内网服务的端口映射到公网服务器上的某个端口,使得外部可以直接访问内网资源。

下面详细介绍 FRP 实现内网穿透的完整步骤(以最常见的 TCP 穿透为例,比如访问内网的 SSH、远程桌面或 Web 服务)。

核心原理

  1. 公网服务器运行 frp 的服务端 (frps)。
  2. 内网设备运行 frp 的客户端 (frpc)。
  3. 客户端主动连接服务端,并注册一个“隧道”。
  4. 当用户访问公网IP:端口时,服务端将流量通过这个隧道转发给内网客户端,客户端再转发给实际的内网服务。

安装与配置步骤

第一步:准备环境

  1. 一台有公网 IP 的服务器(例如阿里云/腾讯云/华为云 ECS,或海外 VPS)。
    • 操作系统:Linux (CentOS/Ubuntu/Debian) 或 Windows 均可。
  2. 内网设备(需要被访问的设备)。
    • 操作系统:任意能运行 FRP 客户端(frpc)的系统(Windows、Linux、Mac、群晖NAS等)。
  3. 下载 FRP
    • 前往 FRP GitHub Releases 页面下载与操作系统匹配的最新版本。
    • 注意:服务端和客户端最好使用同一个版本
    • 通常下载 frp_xxx_linux_amd64.tar.gz(适用于Linux 64位)。

第二步:配置服务端 (frps)

操作位置:在公网服务器上操作。

  1. 上传并解压

    # 假设下载到 /opt 目录
    tar -zxvf frp_0.59.0_linux_amd64.tar.gz
    cd frp_0.59.0_linux_amd64
  2. 编辑配置文件 frps.toml(注意新版本使用 toml 格式,旧版是 ini 格式,推荐使用新版)。

    # frps.toml
    [common]
    # 服务端监听的端口,用于客户端连接
    bind_port = 7000
    # (可选)配置一个访问 Dashboard 的端口,用于查看连接状态
    # dashboard_port = 7500
    # dashboard_user = admin
    # dashboard_pwd = admin123
    # (可选)启用TLS加密,推荐开启
    # tls_enable = true
  3. 启动服务端

    # 前台运行(测试用)
    ./frps -c frps.toml
    # 后台运行(推荐生产环境)
    nohup ./frps -c frps.toml &> /dev/null &
  4. 防火墙设置

    • 在云服务器控制台的安全组中开放端口:
      • 7000 (服务端监听端口,必须打开)
      • 6000 (下面示例中的 Web 端口,按需打开)
      • 7500 (Dashboard端口,如启用需打开)

第三步:配置客户端 (frpc)

操作位置:在内网设备上操作。

  1. 上传并解压,将下载的 FRP 包上传到内网设备(Windows直接解压,Linux同服务端)。

  2. 编辑配置文件 frpc.toml

    # frpc.toml
    [common]
    # 你的公网服务器IP或域名
    server_addr = 你的公网服务器IP
    # 服务端监听端口,必须与 frps.toml 中的 bind_port 一致
    server_port = 7000
    # 如果服务端启用了TLS,客户端也需要开启
    # tls_enable = true
    # ---- 配置第一个隧道: 访问内网 SSH (22端口) ----
    [ssh]
    type = tcp
    # 本地实际服务的IP (通常是 127.0.0.1 自己)和端口
    local_ip = 127.0.0.1
    local_port = 22
    # 这个服务将映射到服务端的哪个端口
    remote_port = 6000
    # ---- 配置第二个隧道: 访问内网 Web 服务 (例如群晖/路由器后台/开发环境) ----
    [web]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 80   # 假设你的内网Web跑在80端口
    remote_port = 6001
  3. 启动客户端(Windows)。

    • 打开命令行(CMD)进入解压目录,运行:frpc.exe -c frpc.toml
  4. 启动客户端(Linux)。

    # 前台运行
    ./frpc -c frpc.toml
    # 后台运行
    nohup ./frpc -c frpc.toml &> /dev/null &

第四步:测试访问

  1. 访问内网 SSH

    • 在任何可以联网的设备(手机4G、公司电脑等)执行:
      ssh -oPort=6000 用户名@你的公网服务器IP
    • 输入内网设备的账号密码,即可成功连接。
  2. 访问内网 Web 服务

    • 在浏览器中输入:http://你的公网服务器IP:6001
    • 即可看到内网那台设备的网页内容。

高级功能与优化

使用域名而不是 IP(HTTP/HTTPS 穿透)

如果你有域名并想直接通过子域名访问内网服务,可以使用 HTTP 代理模式。

  • 服务端 frps.toml 增加:

    vhost_http_port = 8080  # 用于接收 HTTP 请求的端口
    vhost_https_port = 8443
    subdomain_host = example.com  # 你的域名
  • 客户端 frpc.toml 配置:

    [web-http]
    type = http
    local_port = 80
    custom_domains = blog.example.com  # 你希望使用的域名
    # 或者如果配置了 subdomain_host,可以使用 subdomain = blog
    subdomain = blog
  • DNS 解析:将 *.example.comblog.example.com 解析到你的公网服务器 IP。

  • 访问:直接访问 http://blog.example.com:8080

安全加固

  • 使用 Token 认证:防止他人随意连接你的 frps。
    • 服务端 frps.toml: token = "your_strong_password"
    • 客户端 frpc.toml [common] 下: token = "your_strong_password"
  • 启用 TLS 加密:防止流量被嗅探。
  • 只开放必要端口:在服务器防火墙中只放行 frps 的监听端口(7000)以及你实际映射的端口(如6000、6001)。

系统服务管理(Linux 开机自启)

创建 systemd 服务(服务端)

sudo nano /etc/systemd/system/frps.service
[Unit]
Description=Frp Server
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp_0.59.0_linux_amd64/frps -c /opt/frp_0.59.0_linux_amd64/frps.toml
[Install]
WantedBy=multi-user.target

然后启用并启动:

sudo systemctl enable frps
sudo systemctl start frps

客户端同理,只需将 frps 改为 frpc

访问内网远程桌面(Windows RDP)

  • 内网 Windows 的 RDP 默认端口是 3389
  • frpc.toml 中添加:
    [rdp]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3389
    remote_port = 3389  # 或使用其他端口如 5000
  • 访问时:mstsc(远程桌面连接),输入 公网IP:3389 即可。

常见问题排查

现象 可能原因 解决方案
客户端无法连接服务端 防火墙未放行服务端端口 检查云服务器安全组、本地防火墙,放行 7000 端口
能连接但无法访问服务 客户端 local_ip 写错或服务未启动 确保 local_ip 正确(通常是 0.0.1localhost),并且内网服务正常运行
连接被拒绝 remote_port 被占用或未开放 尝试更换 remote_port,并在防火墙放行该端口
域名访问不生效 DNS未解析、custom_domains写错、HTTP端口未开放 检查DNS记录、配置文件、服务端 vhost_http_port 是否开放
速度慢或频繁断开 网络不稳定、服务端带宽不足 检查服务器带宽;或启用 keepalive 参数保持连接

FRP 的核心就是“你连我,我帮你连他”,只要拥有一个公网 IP 的服务器,按照上述步骤配置好服务端和客户端,就可以将任何内网服务(SSH、Web、RDP、数据库、文件服务等)暴露到公网,记得注意安全,日常使用建议开启 Token 认证并仅开放必要的端口。

如果你需要访问的是 HTTP(S) 服务并且希望直接通过域名访问(不携带端口),FRP 的 HTTP 代理模式配合 Nginx 反向代理是一个更优雅的方案,但基础原理是一样的。

标签: FRP 内网穿透

抱歉,评论功能暂时关闭!