frp内网穿透并不强制要求拥有域名,只要拥有一台具有公网IP的服务器,即可直接通过IP地址加端口的方式实现对内网服务的访问。 许多初次接触内网穿透的用户往往陷入一个误区,认为必须购买并配置域名才能使用frp,域名的作用仅在于提供便于记忆的访问别名和支持基于虚拟主机的HTTP/HTTPS转发,在缺乏域名的情况下,frp依然能够通过TCP或UDP协议,利用服务器的公网IP和指定的端口,稳定、高效地将外部流量引导至内网目标服务,本文将深入探讨在无域名环境下如何专业地配置frp,并提供针对动态IP及安全性的进阶解决方案。

无域名环境下frp的工作原理
frp(Fast Reverse Proxy)的核心机制在于“反向代理”,它主要由frps(服务端)和frpc(客户端)两部分组成,在标准配置中,frps监听公网服务器的某个端口,当外部请求到达该端口时,frps会将请求转发给对应的frpc,进而由frpc将请求发送至内网服务。
在没有域名的情况下,我们无法使用frp的vhost_http_port或vhost_https_port功能,因为这些功能依赖Host头部来区分不同的服务。 无域名场景下的配置必须回归到更底层的TCP或UDP协议转发,访问路径的逻辑非常直观:用户访问“服务器公网IP:指定端口”,frps接收到该端口的流量后,直接将其透传给内网,这种方式虽然牺牲了域名的便捷性,但在远程桌面(RDP)、SSH、文件共享等纯TCP/UDP服务场景中,完全能够满足需求,且配置更为简洁。
基于静态公网IP的直连配置方案
对于拥有静态公网IP(如云服务器ECS、VPS)的用户,无域名配置是最为简单的,我们只需要在frpc(客户端)配置文件中,明确指定服务端的IP地址,并定义一个未被占用的远程端口即可。
在服务端配置文件frps.ini中,主要关注监听端口和认证令牌:
[common] bind_port = 7000 token = your_secure_token
这里的bind_port是frpc与服务端通信的端口,token用于保证连接安全。
在客户端配置文件frpc.ini中,假设我们要将内网的3389端口(Windows远程桌面)映射到公网服务器的6000端口:
[common] server_addr = 123.45.67.89 server_port = 7000 token = your_secure_token [rdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 6000
配置完成后,用户只需在远程桌面连接工具中输入45.67.89:6000,即可直接绕过域名访问内网电脑。关键点在于remote_port的选择,必须确保该端口在云服务器安全组及防火墙中已放行,否则连接将被阻断。

动态公网IP环境下的专业解决方案
家庭宽带用户通常面临公网IP不固定的问题,这给无域名访问带来了挑战,如果IP发生变化,server_addr配置的静态IP将失效,针对这一痛点,专业的解决方案并非必须依赖域名解析,而是可以通过脚本动态更新frpc配置,或结合DDNS服务(即使不使用域名访问,DDNS也可用于跟踪IP)。
一种无需域名的纯IP动态追踪方案是编写Shell脚本(Linux)或批处理脚本(Windows)。 该脚本定期检测当前的公网IP,一旦发现IP变化,自动重写frpc.ini中的server_addr字段,并重启frpc进程,这种方法完全脱离了域名体系,适合对隐私要求极高、不想注册任何域名的用户。
脚本逻辑如下:
- 通过API(如
curl ifconfig.me)获取当前公网IP。 - 读取旧IP或当前配置文件中的IP。
- 对比新旧IP,若不同,则使用
sed命令替换配置文件中的IP,并执行重启命令。
frp本身也提供了通过STCP(Secret TCP)增强安全性的方案,这在无域名场景下尤为重要。 直接暴露IP端口容易遭受扫描攻击,而STCP要求访问方也运行一个frpc作为“访问者”,只有通过预共享密钥验证的连接才能建立隧道,这种方式下,公网服务器上不需要开放对外的端口,极大地降低了被攻击的风险。
进阶安全配置:使用STCP避免端口暴露
在无域名且直接暴露端口存在风险的情况下,STCP(Secret TCP)是最佳的专业替代方案。 它的原理是:被访问服务的frpc(服务端)主动向frps注册一个加密的TCP代理,而访问者(如你的笔记本电脑)运行另一个frpc,通过frps作为中转,安全地连接到内网服务。
配置示例如下:
内网服务端(提供RDP服务)配置:

[common] server_addr = x.x.x.x server_port = 7000 token = your_secure_token [secret_rdp] type = stcp sk = your_secret_key local_ip = 127.0.0.1 local_port = 3389
访问者(你的笔记本)配置:
[common] server_addr = x.x.x.x server_port = 7000 token = your_secure_token [rdp_visitor] type = stcp role = visitor server_name = secret_rdp sk = your_secret_key bind_port = 6000
你在笔记本上连接0.0.1:6000,即可通过加密隧道访问内网的3389端口。这种方案彻底隐藏了真实服务端口,且不需要域名,仅依靠sk(Secret Key)进行身份验证,是内网穿透中安全性极高的实践。
相关问答
Q1:没有域名可以使用frp进行Web服务(HTTP/HTTPS)穿透吗?
A:可以穿透,但体验较差且存在限制。 在没有域名的情况下,你无法使用frp的虚拟主机功能(即通过不同域名区分不同网站),你只能将内网的HTTP端口(如80)映射为公网服务器的某个特定端口(如8080),用户访问时需要输入http://IP:8080,对于HTTPS,由于浏览器校验证书通常绑定域名,使用IP访问时浏览器会报证书不匹配的警告,除非使用自签名证书并在客户端手动信任,否则不建议在无域名下部署对公网开放的HTTPS服务。
Q2:如果云服务器没有公网IP,只有内网IP,还能用frp吗?
A:不能直接使用。 frp的核心原理是利用公网IP作为流量入口,如果云服务器本身没有公网IP(例如某些阿里云或腾讯云的专有网络实例,且未绑定EIP),那么外网无法直接访问到该服务器上的frps服务,你需要先为云服务器绑定弹性公网IP(EIP),或者寻找具有公网IP的中间层级服务器进行跳板连接,否则frp将无法建立反向代理通道。
希望以上方案能帮助你在没有域名的情况下,依然能够高效、安全地利用frp进行内网穿透,如果你在配置过程中遇到端口冲突或连接超时的问题,欢迎在评论区留言,我们一起探讨解决。


















