第4章:云网络基础——VPC、子网、路由表、安全组与网络ACL
说实话,很多刚接触云计算的朋友,第一个被搞晕的就是网络这块。我记得有一次帮一个初创团队排查问题,他们买了十几台云服务器,结果互相之间ping不通。一问才知道,安全组规则配错了,把ICMP协议全给拦了。这种坑,我踩过不止一次。
今天咱们就把云网络的基础打牢。说白了,云上的网络就是把你物理机房的网络逻辑化、软件化了。你想想看,以前拉网线、配交换机、调防火墙,现在全变成了鼠标点一点或者写几行代码的事。
4.1 虚拟私有云(VPC)——你的专属网络空间
VPC是什么?我习惯把它理解成「云上的一个独立网络房间」。这个房间跟其他用户的房间是完全隔离的,你可以在里面自由划分区域、设置门禁、规划路线。
每个VPC都有一个CIDR块,比如 10.0.0.0/16。这个范围决定了你最多能有多少个IP地址。我个人习惯给生产环境留大一点的网段,比如 /16,这样以后扩容不用愁。
核心要点:VPC是你在云上的逻辑隔离网络。不同VPC之间默认不通,除非你主动建立对等连接或使用VPN。
4.2 子网——把VPC切成小块
有了VPC这个大房间,你还得把它分成几个小隔间,这就是子网。子网的作用很直接:
- 划分可用区:比如把子网建在可用区A和可用区B,实现跨可用区高可用
- 区分公网与私网:公网子网放Web服务器,私网子存放数据库
- 控制流量方向:通过路由表决定子网内的流量怎么走
举个例子,我常用的划分方式是这样的:
| 子网名称 | CIDR | 可用区 | 用途 |
|---|---|---|---|
| public-subnet-a | 10.0.1.0/24 | 可用区A | Web服务器(公网) |
| private-subnet-a | 10.0.2.0/24 | 可用区A | 应用服务器(私网) |
| data-subnet-a | 10.0.3.0/24 | 可用区A | 数据库(私网) |
嗯,这里要注意:子网的CIDR不能重叠,而且一旦创建就不能修改。所以规划的时候一定要想清楚。
4.3 路由表——网络的导航地图
路由表决定了数据包从子网出去后该往哪走。每个子网都必须关联一张路由表。默认情况下,VPC内部的路由是自动配好的,但你要访问互联网或别的网络,就得自己加规则。
最常见的场景是让公网子网能访问互联网。做法是:
# 目标网段 下一跳
0.0.0.0/0 igw-xxxxx(互联网网关)
我曾经犯过一个低级错误:给私网子网也配了默认路由到互联网网关,结果数据库服务器暴露在了公网上。还好及时发现,不然就出大事了。所以我的建议是:私网子网的路由表里,永远不要配0.0.0.0/0到互联网网关。
小技巧:如果私网子网需要访问互联网(比如下载补丁),可以用NAT网关。它能让私网服务器主动访问外网,但外网无法主动连接进来。
4.4 安全组——实例级别的防火墙
安全组是云上最常用的网络控制手段。它工作在实例级别,说白了就是给每台云服务器装了个小防火墙。
安全组的规则是「允许」列表,没有「拒绝」规则。你只写允许哪些流量进来,剩下的全部默认拒绝。我个人习惯把安全组设计得尽量精细:
- Web服务器的安全组:只开放80和443端口
- 应用服务器的安全组:只允许来自Web服务器的流量
- 数据库的安全组:只允许来自应用服务器的流量
举个例子,一个Web服务器的安全组规则可能是这样的:
入站规则:
- 来源:0.0.0.0/0,协议:TCP,端口:80
- 来源:0.0.0.0/0,协议:TCP,端口:443
- 来源:10.0.0.0/16,协议:TCP,端口:22(仅限内网SSH)
出站规则:
- 目标:0.0.0.0/0,协议:全部(默认允许出站)
这里有个容易忽略的点:安全组是有状态的。什么意思?你允许了入站请求,那么对应的出站响应会自动放行,不用再配出站规则。这一点跟网络ACL不一样,后面会讲。
4.5 网络ACL——子网级别的访问控制
网络ACL是另一个防火墙,但它工作在子网级别。跟安全组相比,它有几点不同:
- 无状态:入站和出站规则要分别配,不会自动放行响应流量
- 支持拒绝规则:可以明确拒绝某些IP或端口
- 规则按编号执行:编号越小优先级越高
我一般在什么场景下用网络ACL呢?举个例子,我想彻底封掉某个恶意IP段,用安全组一条条加太麻烦,直接在网络ACL里加一条拒绝规则,一劳永逸。
警告:网络ACL的规则是按编号从小到大依次匹配的。一旦匹配到允许或拒绝,就不再往下执行。所以编号规划很重要,我习惯留一些间隔(比如10、20、30),方便以后插入新规则。
4.6 安全组 vs 网络ACL——怎么选?
很多新手会问:到底用哪个?我的建议是:优先用安全组。原因很简单:
- 安全组有状态,配置更简单
- 安全组支持引用其他安全组作为来源,比如「只允许Web服务器的安全组访问数据库」
- 安全组是实例级别的,粒度更细
网络ACL适合做「粗粒度」的管控,比如封禁某个IP段、限制整个子网的出站流量。我通常把网络ACL当作第二道防线,跟安全组配合使用。
4.7 实战经验总结
最后,分享几个我在项目中总结出来的经验:
- 先规划,后动手:VPC的网段、子网的划分、路由表的策略,这些一定要在纸上画清楚再创建。改起来很麻烦。
- 最小权限原则:安全组和网络ACL的规则,能少开就少开。我曾经见过一个团队把所有端口都开放了,说是「方便调试」——结果被黑客扫到了Redis端口,数据被加密勒索。
- 日志要开着:VPC流日志是个好东西,能记录所有网络流量。排查问题的时候,翻翻日志往往能找到线索。
- 测试连通性:配完网络规则后,用
ping和telnet测试一下。别像我一样,等到上线了才发现网络不通。
好了,这一章的内容就到这里。云网络的基础打牢了,后面讲负载均衡、VPN、专线这些高级话题时,你就能轻松上手了。