当前位置:首页 > 云服务器 > 正文

搭建内网穿透服务器,如何实现公网访问本地服务?

搭建内网穿透服务器是许多企业和个人用户在需要从外部网络访问内部网络资源时的常见需求,尤其是在没有公网IP或公网IP动态变化的情况下,内网穿透技术通过在公网搭建一台中转服务器,将内网服务的请求通过隧道转发到内网,从而实现外部访问,本文将详细介绍搭建内网穿透服务器的步骤、常用工具、配置方法及注意事项,帮助读者顺利完成部署。

内网穿透的基本原理

内网穿透的核心是建立一条从公网服务器到内网服务器的安全隧道,当外部用户访问公网服务器的指定端口时,公网服务器会将请求通过隧道转发到内网服务器的对应端口,从而实现内外网数据的互通,常用的内网穿透工具包括FRP(Fast Reverse Proxy)、Ngrok、花生壳等,其中FRP因其开源、高性能、功能丰富而被广泛使用,本文将以FRP为例,介绍搭建内网穿透服务器的具体步骤。

准备工作

在搭建内网穿透服务器之前,需要准备以下环境:

  1. 一台具有公网IP的服务器:作为中转服务器,建议选择Linux系统(如Ubuntu、CentOS),并确保防火墙允许所需端口的访问。
  2. 一台内网服务器:需要被穿透的内网设备,可以是本地电脑、NAS或服务器,确保内网设备与公网服务器之间网络可达。
  3. 域名(可选):如果需要使用域名访问,可以注册一个域名并解析到公网服务器的IP地址。
  4. FRP程序包:从FRP的GitHub仓库(https://github.com/fatedier/frp)下载最新版本的FRP程序包,根据服务器架构选择对应的版本(如linux_amd64)。

FRP服务端配置

  1. 上传并解压FRP程序包

    将下载的FRP程序包上传到公网服务器,使用以下命令解压:

  2. 编辑frps.ini配置文件

    使用以下命令打开配置文件:

    搭建内网穿透服务器,如何实现公网访问本地服务? 第1张

    vim frps.ini

    配置文件内容如下(根据实际需求修改):

    [common] bind_port = 7000 # FRP服务端监听端口 vhost_http_port = 80 # HTTP虚拟主机端口 token = your_secure_token # 安全验证令牌,必须与客户端一致 dashboard_port = 7500 # FRP管理面板端口 dashboard_user = admin # 管理面板用户名 dashboard_pwd = admin123 # 管理面板密码 log_max_days = 7 # 日志保留天数

    参数说明:

    • bind_port:服务端与客户端通信的端口。
    • vhost_http_port:用于HTTP穿透的端口。
    • token:用于客户端和服务端之间的身份验证,必须一致。
    • dashboard:FRP管理面板,用于查看连接状态和日志。
    • 启动FRP服务端

      使用以下命令启动服务端(后台运行):

      nohup ./frps c frps.ini > frps.log 2>&1 &

      检查服务端是否启动成功:

      搭建内网穿透服务器,如何实现公网访问本地服务? 第2张

      ps ef | grep frps
    • FRP客户端配置

      1. 上传并解压FRP程序包

        将FRP程序包上传到内网服务器,解压后进入目录。

      2. 编辑frpc.ini配置文件

        使用以下命令打开配置文件:

        vim frpc.ini

        配置文件内容如下(以穿透内网Web服务为例):

        [common] server_addr = 公网服务器IP # FRP服务端IP server_port = 7000 # FRP服务端bind_port token = your_secure_token # 与服务端token一致 [web] type = http # 穿透协议类型 local_port = 8080 # 内网Web服务端口 custom_domains = yourdomain.com # 自定义域名(可选)

        参数说明:

        • server_addr:FRP服务端的公网IP。
        • local_port:内网服务的端口。
        • custom_domains:如果使用域名访问,需在此处配置。
        • 启动FRP客户端

          使用以下命令启动客户端(后台运行):

          搭建内网穿透服务器,如何实现公网访问本地服务? 第3张

          nohup ./frpc c frpc.ini > frpc.log 2>&1 &

          检查客户端是否连接成功:

          ps ef | grep frpc

        • 测试访问

          1. 通过IP访问

            如果配置了vhost_http_port,可以直接通过公网服务器的IP和端口访问内网服务,http://公网服务器IP:80。

          2. 通过域名访问

            如果配置了custom_domains,可以通过域名访问,http://yourdomain.com。

          常用配置场景

          以下是FRP的常见配置场景及示例:

          场景类型 配置示例
          HTTP穿透 [web]

          type = http

          local_port = 8080

          custom_domains = domain.com

          HTTPS穿透 [web]

          type = https

          local_port = 8443

          custom_domains = domain.com

          TCP穿透 [ssh]

          type = tcp

          local_port = 22

          remote_port = 6000

          多端口穿透 [web1]

          type = http

          local_port = 8080

          custom_domains = domain1.com

          [web2]

          type = http

          local_port = 8081

          custom_domains = domain2.com

          注意事项

          1. 安全性:设置复杂的token,避免使用默认密码;定期更新FRP版本以修复安全漏洞。
          2. 防火墙配置:确保公网服务器的防火墙允许bind_port、vhost_http_port等端口的访问。
          3. 带宽限制:公网服务器的带宽可能会影响穿透性能,建议选择带宽充足的服务器。
          4. 动态IP:如果公网IP是动态的,可以使用DDNS工具(如花生壳)将域名动态解析到当前IP。

          相关问答FAQs

          问题1:如何实现FRP的HTTPS穿透?

          解答:要实现HTTPS穿透,需要在FRP服务端配置vhost_https_port,并在客户端配置type = https,需要将证书文件(如fullchain.pem和privkey.pem)上传到服务端,并在frps.ini中指定证书路径:

          [common] vhost_https_port = 443 tls_cert_file = /path/to/fullchain.pem tls_key_file = /path/to/privkey.pem

          客户端配置示例:

          [web] type = https local_port = 8443 custom_domains = domain.com

          问题2:如何查看FRP的连接状态和日志?

          解答:FRP提供了管理面板,通过浏览器访问http://公网服务器IP:7500,输入配置的用户名和密码即可查看连接状态和日志,也可以通过查看服务端和客户端的日志文件(frps.log和frpc.log)来排查问题:

          tail f frps.log # 查看服务端日志 tail f frpc.log # 查看客户端日志

0