实现 frp 域名解析并成功访问内网服务的核心逻辑在于:将域名的 DNS 记录精准指向 VPS 的公网 IP,同时在 frp 客户端配置文件中正确绑定该域名,并确保 frp 服务端开启了虚拟主机 HTTP 端口支持。 通过这种配置方式,用户无需记忆复杂的 IP 地址和端口号,直接通过注册的域名即可访问部署在内网中的 Web 服务、NAS 或远程桌面等应用,这不仅提升了访问的专业性,还解决了内网穿透服务在多实例共存时的路由分发问题。

域名解析与 frp 的工作机制
要掌握 frp 域名解析,首先需要理解其流量转发机制,frp(Fast Reverse Proxy)主要由 frps(服务端)和 frpc(客户端)组成,当用户在浏览器输入域名时,DNS 服务器会将域名解析到拥有公网 IP 的 VPS(即 frps 所在服务器),frps 监听在特定的 HTTP 端口(通常是 80 或自定义端口),接收到请求后,会根据请求头中的 Host 字段(即域名)与配置文件中的规则进行匹配,一旦匹配成功,frps 就会将流量转发给对应内网机器上的 frpc,从而实现内网服务的对外暴露。DNS 解析负责将流量引到门口,而 frp 的配置负责告诉流量该去哪个房间。
第一步:配置域名的 DNS 解析
在开始 frp 配置之前,必须先在域名服务商处完成解析设置,这是外网访问的第一步。
- 登录域名管理控制台:前往阿里云、腾讯云、Cloudflare 等域名注册商的管理后台。
- 添加 A 记录:点击“添加记录”,主机记录(Host)可以是 (代表主域名)、
www或者其他子域名(如nas),记录类型选择 A,记录值填写你的 VPS 公网 IP 地址。 - TTL 设置:建议设置为 600 秒或更短,以便在后续调试中快速生效。
注意:如果你使用的是 Cloudflare 等 CDN 服务,需要确保流量在测试阶段是“灰色云朵”(仅 DNS 解析,不代理),因为 frp 通常不处理经过 CDN 代理加密后的流量,除非进行了特殊配置,完成解析后,可以使用 ping 命令确认域名是否已正确指向 VPS IP。
第二步:frp 服务端 配置
服务端的核心任务是开启 HTTP 代理端口,并启用虚拟主机支持,以便根据域名区分不同的内网服务。
在 frps.ini 配置文件中,必须包含以下关键配置:
[common] bind_port = 7000 # vhost_http_port 用于监听 HTTP 请求,必须设置为 80 或其他未被占用的端口 vhost_http_port = 80
vhost_http_port 是实现域名解析的关键参数,如果不设置此项,frps 将无法根据域名进行路由分发,所有通过域名访问的请求都会失败,配置完成后,重启 frps 服务,请确保 VPS 的防火墙(如 iptables、ufw 或云厂商安全组)放行了 80 端口和 7000 端口,否则流量将被拦截。
第三步:frp 客户端 配置与域名绑定
客户端配置是实现内网穿透的最后一步,也是将特定域名与内网服务关联的核心环节。

在 frpc.ini 配置文件中,你需要针对每一个内网服务定义一个代理配置块,这里有两种主要的绑定方式:自定义域名和子域名。
使用 custom_domains(推荐,最灵活)
这种方式允许你将任意已经解析到 VPS 的域名绑定到该内网服务。
[web] type = http local_ip = 127.0.0.1 local_port = 8080 # 这里必须填写完整解析过的域名 custom_domains = www.yourdomain.com
使用 subdomain(适合泛域名场景)
如果你在 DNS 解析中配置了通配符 指向 VPS IP,可以使用此模式。
[web] type = http local_ip = 127.0.0.1 local_port = 8080 # 访问时将使用 test.yourdomain.com subdomain = test
专业建议:在生产环境中,强烈建议使用 custom_domains,这种方式更加明确,避免了因子域名冲突导致的访问混乱,配置完成后启动 frpc,此时在浏览器输入 www.yourdomain.com,即可直接访问内网 8080 端口的服务。
进阶方案:启用 HTTPS 与 SSL 证书
为了提升网站的安全性和可信度(符合 E-E-A-T 原则),现代 Web 服务必须支持 HTTPS,frp 提供了强大的 HTTPS 支持,无需在内网机器配置 Nginx 即可实现 SSL 加密。

解决方案:利用 frp 的 plugin 功能。
- 准备证书:申请对应域名的 SSL 证书(.crt 和 .key 文件),并将这两个文件上传到运行 frpc 的内网机器上。
- 修改 frpc.ini:
[web_ssl] type = https local_ip = 127.0.0.1 local_port = 8080 custom_domains = www.yourdomain.com # 启用 HTTPS2HTTP 插件,将 HTTPS 请求解密为 HTTP 转发给本地服务 plugin = https2http plugin_local_addr = 127.0.0.1:8080 # 指定证书路径 plugin_crt_path = /path/to/cert.crt plugin_key_path = /path/to/cert.key
通过这种配置,frpc 会自动处理 SSL 握手和加解密过程,用户与 VPS 之间是加密的 HTTPS 连接,而 VPS 与内网机器之间可以是高效的 HTTP 连接,这不仅简化了内网服务的配置,还降低了内网机器的 CPU 负担。
常见问题与排查思路
在配置过程中,可能会遇到“404 Not Found”或“连接超时”等问题,请遵循以下排查思路:
- 检查 DNS 生效:确保
ping域名返回的 IP 确实是 VPS 的公网 IP。 - 检查端口占用:VPS 上 80 端口不能被其他 Web 服务(如 Apache/Nginx)占用,否则 frps 无法监听。
- 查看 frp 日志:这是最权威的排查手段,frps 和 frpc 的日志会详细记录连接建立、域名匹配和转发的过程,如果日志提示“no such host”,说明
custom_domains配置与请求头中的 Host 不一致。
相关问答
Q1:为什么我已经配置了域名解析,但访问时显示的是 frps 的默认 404 页面?
A1:出现这种情况通常意味着 frps 已经成功接收到了请求,但无法找到对应的 frpc 代理,请检查 frpc.ini 中的 custom_domains 是否与浏览器访问的域名完全一致(包括是否带 www),并确保 frpc 进程正在运行且已成功连接到 frps。
Q2:一台 VPS 上可以同时运行 Nginx 和 frps 并共用 80 端口吗?
A2:不能直接共用 80 端口,因为端口冲突会导致服务启动失败。专业的解决方案是将 Nginx 配置为反向代理,监听 80 端口,将特定域名的请求通过 proxy_pass 转发给 frps 监听的另一个端口(如 8080),或者让 frps 监听非 80 端口,通过 Nginx 进行统一流量入口管理。
通过以上步骤,你可以构建一个稳定、安全且具备专业域名的内网穿透环境,如果你在配置 SSL 证书或多服务转发时有更深入的需求,欢迎在下方留言探讨,我们可以针对具体的网络架构提供更优化的解决方案。


















