4. 实例网络配置:VPC网络规划、私网连接设置、公网访问控制
网络配置这块,说实在的,是IoT企业版实例搭建里最容易出幺蛾子的环节。我见过太多项目,设备连不上、数据传不回来,最后排查一圈,发现都是网络规划没做好。今天咱们就把这块掰开揉碎了讲清楚。
4.1 VPC网络规划:打好地基
VPC(虚拟私有网络)说白了,就是你在阿里云上给自己圈了一块私有的地盘。设备、服务器、数据库都在这个地盘里跑,跟外网是隔离的。我个人习惯,在创建IoT企业版实例之前,先把VPC规划好。
核心原则:
- 网段别冲突:你公司内网如果是192.168.0.0/16,那云上VPC就别再用这个段了,否则以后做私网连接时IP会打架。我建议用10.0.0.0/8或者172.16.0.0/12这些大段。
- 子网要够用:一个VPC下至少分两个交换机(子网),一个给IoT实例用,一个给后端业务用。比如:
- 交换机A:10.0.1.0/24(IoT实例专用)
- 交换机B:10.0.2.0/24(业务服务器专用)
- 可用区冗余:别把所有鸡蛋放一个篮子里。我建议至少选两个可用区,比如杭州可用区G和H,各放一个交换机。这样即使一个可用区挂了,设备还能通过另一个区继续通信。
我的经验:有一次客户把IoT实例和数据库放在同一个交换机里,结果设备量一上来,广播风暴直接把网络打瘫了。从那以后,我坚持把不同用途的资源放在不同子网,中间用安全组或ACL做隔离。
4.2 私网连接设置:让设备走内网
私网连接(PrivateLink)是啥?就是让你的设备通过阿里云的内网访问IoT实例,不经过公网。这样做的好处很明显:延迟低、带宽高、还安全。
配置步骤:
- 创建终端节点服务:在IoT实例所在的VPC里,创建一个终端节点服务。这个服务会暴露一个内网IP,供其他VPC或本地IDC通过私网访问。
- 创建终端节点:在设备所在的VPC里,创建一个终端节点,指向刚才的服务。这样两个VPC就通过内网打通了。
- 添加安全组规则:在终端节点服务的安全组里,放行设备VPC的CIDR。比如设备VPC是10.0.0.0/16,那就加一条入方向规则,允许这个段访问443端口(MQTT over TLS)。
小技巧:如果你有多个VPC需要连接同一个IoT实例,别每个VPC都建一个终端节点服务。我习惯用一个共享的终端节点服务,然后在服务侧添加白名单,只允许授权的VPC连接。这样管理起来清爽多了。
代码示例:用阿里云CLI创建终端节点服务
# 创建终端节点服务
aliyun privatelink CreateVpcEndpointService \
--RegionId cn-hangzhou \
--ServiceResourceType slb \
--ServiceResourceId lb-2ze7g5h8j9k0l1m2n3o4
# 创建终端节点
aliyun privatelink CreateVpcEndpoint \
--RegionId cn-hangzhou \
--ServiceId epsrv-2ze7g5h8j9k0l1m2n3o4 \
--VpcId vpc-2ze7g5h8j9k0l1m2n3o4 \
--SecurityGroupId sg-2ze7g5h8j9k0l1m2n3o4
注意:私网连接会产生费用,按小时计费。如果只是测试环境,记得用完就删掉,别白白烧钱。我曾经有个客户,测试环境跑了三个月没关,账单出来吓一跳。
4.3 公网访问控制:该放就放,该堵就堵
有些场景下,设备必须通过公网访问IoT实例,比如设备部署在海外、或者没有专线。这时候公网访问控制就很重要了。
控制策略:
- IP白名单:只允许特定IP或IP段访问。比如你的设备出口IP是120.55.0.0/16,那就只放行这个段。其他IP一律拒绝。
- 端口限制:IoT企业版实例默认开放443端口(MQTT over TLS)和1883端口(MQTT over TCP)。我建议只开443,因为TLS加密更安全。1883是明文传输,容易被中间人攻击。
- HTTPS证书:强制使用TLS 1.2以上版本。有些老设备只支持TLS 1.0,那就要升级固件了。我在项目里遇到过,一批设备因为TLS版本太低连不上,最后只能逐个升级。
配置示例:在IoT实例的安全组里设置公网访问规则
# 允许特定IP访问443端口
aliyun ecs AuthorizeSecurityGroup \
--RegionId cn-hangzhou \
--SecurityGroupId sg-2ze7g5h8j9k0l1m2n3o4 \
--IpProtocol tcp \
--PortRange 443/443 \
--SourceCidrIp 120.55.0.0/16 \
--Policy accept
# 拒绝所有其他公网访问
aliyun ecs AuthorizeSecurityGroup \
--RegionId cn-hangzhou \
--SecurityGroupId sg-2ze7g5h8j9k0l1m2n3o4 \
--IpProtocol tcp \
--PortRange 443/443 \
--SourceCidrIp 0.0.0.0/0 \
--Policy drop
避坑指南:我曾经遇到一个案例,客户把公网访问全放开了,结果被黑客扫描到1883端口,直接暴力破解了设备密码。嗯,从那以后我坚持:公网访问能不开就不开,非要开的话,必须加白名单和TLS加密。
4.4 混合网络方案:私网为主,公网为辅
实际项目中,我推荐用混合方案。大部分设备走私网连接,少数无法走私网的设备(比如海外设备)走公网。这样既保证了核心业务的稳定性,又兼顾了边缘场景的灵活性。
架构示意:
| 设备类型 | 连接方式 | 延迟 | 安全性 | 成本 |
|---|---|---|---|---|
| 本地IDC设备 | 私网连接(专线/VPN) | <5ms | 高 | 中 |
| 同区域云上设备 | 私网连接(VPC对等) | <2ms | 高 | 低 |
| 海外/公网设备 | 公网(TLS加密) | 50-200ms | 中 | 低 |
我的建议:如果你有超过1000台设备需要公网接入,可以考虑用阿里云的全球加速(GA)服务。它能把公网流量优化到内网级别,延迟能降低30%以上。不过成本会高一些,适合对延迟敏感的场景。
好了,网络配置这块就讲这么多。记住一个原则:能走内网就别走公网,能加密就别明文。下一章咱们聊聊设备认证和权限管理,那又是另一个坑多的地方。