许多个人站长或开发者拥有家中的服务器或NAS,希望能够通过公网访问,但苦于没有公网IP。公有云主机(VPS/VM)正是解决这个问题的理想跳板,通过搭建FRP(Fast Reverse Proxy)服务,可以轻松实现内网穿透。
一、云主机是否可以用于内网穿透?
答案是肯定的。云主机(如阿里云ECS、腾讯云CVM、AWS EC2或普通VPS)由于拥有固定的公网IP地址,是作为内网穿透服务端的最佳选择。我们将FRP服务端(frps)部署在云主机上,内部机器部署FRP客户端(frpc),即可将内网端口映射到公网IP上。
二、FRP服务搭建实操(基于Linux VPS)
假设我们使用一台Ubuntu系统的云主机作为服务端。
1. FRP服务端(VPS)配置
我们首先下载并配置FRP程序。
# 替换x.x.x为最新版本号,并根据你的系统架构选择对应包
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
cd frp_0.51.3_linux_amd64
# 服务端只需要frps和frps.ini,删除客户端文件
rm -f frpc frpc.ini
# 编辑服务端配置文件
vi frps.ini
frps.ini 内容示例:
[common]
bind_port = 7000 ; FRP服务监听端口,用于客户端连接
vhost_http_port = 80 ; HTTP访问端口
token = abcdefg123456 ; 认证Token,必须与客户端一致
运行服务端:
# 后台运行FRP服务
nohup ./frps -c ./frps.ini &
2. FRP客户端(内网机器)配置
在内网的机器上下载并配置FRP客户端,假设我们要穿透内网8080端口的Web服务。
frpc.ini 内容示例:
[common]
server_addr = [你的VPS公网IP]
server_port = 7000
token = abcdefg123456
[web_service]
type = http
local_ip = 127.0.0.1
local_port = 8080 ; 内网Web服务端口
custom_domains = my.example.com ; 如果使用域名访问
运行客户端:
./frpc -c ./frpc.ini
三、FRP转发后的流量计费详解
这是使用云主机进行内网穿透最核心的成本问题。公有云主机的流量计费主要针对公网出站(Outbound)流量。
关键原则:云主机向互联网传输的数据,才会计费。
FRP穿透的流量路径如下:
- 用户请求: 互联网 -> VPS公网IP -> 内网FRP客户端
- 服务响应: 内网FRP客户端 -> VPS公网IP -> 互联网用户
流量计费分析:
- 入站流量(Inbound): 用户请求数据进入您的VPS。对于绝大多数公有云服务商(如阿里云、腾讯云),这部分流量通常是免费的,或者只有极低的费用。
- 出站流量(Outbound): 内网服务处理完毕后,响应数据通过VPS发送到互联网用户。这部分流量是计费的核心。所有通过FRP穿透到公网的服务(例如下载文件、观看视频、访问图片等)产生的响应数据,都将计入VPS的出站流量,按照公有云的收费标准进行收费。
计费模式选择:
云主机提供商通常提供两种主流的计费模式:
| 计费模式 | 特点 | 适用场景 | FRP流量成本 |
|---|---|---|---|
| 按流量计费 (Pay-by-Traffic) | 实时结算,只对实际使用的出站数据量收费,价格相对高昂(例如0.8元/GB) | 流量使用量低或不规律,避免闲置浪费 | 成本随使用量线性增加,响应越大,费用越高 |
| 按固定带宽计费 (Pay-by-Bandwidth) | 预先购买一个固定的带宽上限(如5Mbps),流量在上限内不额外收费,超出部分可能限速或付费 | 流量使用稳定且较高,对速度有要求 | 成本固定,但如果带宽长期跑不满则有浪费 |
对于大部分个人站长使用FRP的场景,如果仅用于SSH远程管理或轻量级博客,可以选择按流量计费。如果用于对外提供下载服务或视频流媒体,则应仔细评估每日峰值,选择按固定带宽计费,以避免高昂的突发流量费用。
汤不热吧