先说我自己的经历。前两年刚上手云上业务的时候我最怕的就是“创建VPC”这几个字要填网段要选子网还要绑定虚拟网卡后面又冒出来一个网络ACL。每一步看起来都在讲“网段”可真到业务不通的时候你压根不知道该先查哪一个。后来我在云主机上配了不下几十次网络又去折腾了华为、华三路由器上的ACL规则才慢慢把这一套概念理顺。我的理解用一句话概括就是VPC是圈地子网是切房间虚拟网卡是房间里那根网线ACL是门口查证件的人。这篇文章就用这条思路把这四个概念掰开揉碎讲一遍顺便带上子网划分的计算方法、Windows Server 2019装完Hyper-V后配置虚拟网卡的实操、以及华为/华三设备上ACL的配置和默认流行为。这篇文章适合刚上云的业务运维、准备系统学网络但又不想捧着协议书啃的同学还有那些被“都开了安全组为什么还是不通”折磨得想砸电脑的朋友。我尽量不堆术语所有名词都用生活化的说法加实际例子讲清楚。看完之后你在控制台上再看到这些选项至少能知道“这一步到底让我选什么、不选行不行”。1. 先把一单云上业务的网络搭建过程走一遍四个概念各管哪一段1.1 一个真实的业务部署场景假设你现在要在云上搭一套业务一台Web服务器两台应用服务器还有一个数据库。如果不建VPC这些机器拿到的IP就像住在大杂院里楼上楼下谁都能串门你根本没法定规矩。VPC给你的就是一个独立围起来的院子别人进不来你院子里怎么摆家具也是自己说了算。实操的时候第一步就是在云控制台创建一个VPC。让你填网段的时候通常默认给的是10.0.0.0/16意思是这个VPC内部可以容纳65536个IP地址。这一步很多新手会纠结填多大合适我的建议是第一版业务先别贪大但也不要小到连扩容空间都没有。10.0.0.0/16是一个很均衡的起点既不会因为地址太多导致路由表混乱又能支撑后续两三年的扩容。第二步是创建子网。你需要在VPC的大院子里再隔出几个房间Web子网、应用子网、数据库子网。比如把10.0.0.0/16切成多个/24的网段每个/24有254个可用IP分配给不同的服务层。这样做的直接好处是以后配合ACL规则时你可以精准地把某一类流量限制在某一个房间内。第三步是创建云主机。创建的时候系统会让你选择“所属子网”选定之后云平台会自动给这台机器生成一个虚拟网卡并分配一个私有IP。虚拟网卡在这里的角色就是房间墙壁上的信息插座——院子有了、房间划好了机器得靠这个插座才能跟外界通信。第四步才是配ACL。在云平台上网络ACL通常是绑在子网上的你可以把它理解成大门口的门禁决定“哪些人可以进这层楼”。如果没配ACL默认策略就把所有流量拒之门外业务自然起不来。整个流程走完你会发现VPC决定你能圈多大一块地子网决定这块地被切成几间房虚拟网卡决定每个房间里设备怎么接网络ACL决定每间房门禁怎么设。四者之间是层层嵌套的关系少哪一层网络都会出问题。1.2 一张表看懂四个概念的分工我整理了一张表方便你日后做架构设计时对照概念解决的核心问题生活类比典型例子VPC网络边界和整体隔离一块院子的围墙10.0.0.0/16子网把大网段切分成可用区域院子里的不同房间10.0.1.0/24虚拟网卡把网络能力附着到虚拟机上房间里的信息插座eth0、虚拟以太网卡ACL控制进出子网/端口的流量门口查证的保安允许80端口入站、拒绝22端口对数据库子网很多人会把VPC和子网搞混其实它们的层次非常清楚VPC是最大的资源池子网是VPC内部的划分单位。虚拟网卡则是一次创建的实例级别资源它必须挂在某个子网下面不能独立存在。ACL是策略层的东西它不产生IP也不绑定网卡只负责匹配流量并放行或丢弃。1.3 为什么非要拆成四层而不是做成一个总开关刚接触时我也想过直接给每台机器配个IP、加个防火墙不就行了吗搞这么复杂干嘛等业务规模一上来你就明白了。第一隔离粒度不同。物理机上跑了多个租户如果没有VPC做租户级隔离大家的二层广播、路由策略全混在一起任何一台机器出故障都会波及别人。第二控制粒度不同。子网让一个VPC内部可以划分出“生产环境”“测试环境”“数据库区域”每个区域单独做策略。第三变更方式不同。虚拟网卡支持热插拔一台机器的CPU和内存不够你可以直接把网卡挪到另一台新机器上IP都不用改。第四安全策略需要分层次。ACL管子网边界安全网关管实例边界两者配合才能做到纵深防御。这一层一层拆开本质上是为了让“网络规划、资源接入、安全管控”这三件事可以被独立变更不至于动一个开关全盘重启。2. VPC你的专属隔离网络跟VLAN到底是不是一回事2.1 VPC在云里到底圈了什么VPC的全称是Virtual Private Cloud中文叫虚拟私有云。它既不是一台物理设备也不是一条物理链路而是云平台在底层物理网络上通过虚拟化技术给你单独划出来的一块逻辑区域。你可以把VPC想象成一栋写字楼里的楼层。每个租户包一层楼里的电梯、走廊、水电都是公共的但这一层内部怎么隔断、门上用什么锁完全由租户自己说了算。VPC内部有独立的路由表、独立的地址规划、独立的ACL和安全组策略甚至还可以自己决定是否接入公网网关。关键点是VPC并不限制你只在一个可用区。比如你在华北区域创建了一个VPC它的子网可以跨多个可用区这在设计高可用架构时特别有用——主节点在一个可用区备节点在另一个可用区两台机器虽然物理位置不同但在同一个VPC里二层三层通信完全无障碍。2.2 vpc vlan 差异到底差在哪很多人会把VPC和VLAN放在一起比其实两者的层次和用途差别很大。VLAN是传统网络里的二层隔离技术。一台物理交换机上通过VLAN ID把端口划分成不同的广播域比如VLAN 10给财务VLAN 20给研发。它解决的是“在同一台交换机设备上如何让不同部门互不可见”的问题。但VLAN受限于12位ID最多4094个而且通常只在同一台或同一组物理交换机内生效。VPC是云计算语境下的隔离方案。它可以在整个数据中心范围内构建逻辑隔离网络底层网络无论是用Overlay隧道还是SDN控制器实现对用户来说都不需要关心。VPC的隔离粒度更大租户级别而且一个VPC的内部可以嵌套无数个子网和路由策略这是VLAN做不到的。我用一个表帮你理清差异对比项传统VLAN云上VPC隔离层次二层广播域隔离三层逻辑隔离加路由管控规模上限4094个VLAN ID每个租户可自定义私网网段规模大得多物理范围通常局限在同一交换机组可以跨多个可用区、跨多台物理宿主机配置入口交换机命令行或网管平台云控制台、API、SDN控制器典型用途同一机房内的网络分区云上租户级私有网络搭建简单说VLAN管的是“一台设备上怎么隔离”VPC管的是“整个云环境里怎么给你圈一块专属地盘”。两者虽然都做隔离但目标、层级和规模完全不同。2.3 一个VPC里能放多少资源一个不够怎么办一个VPC内部可以放很多子网、路由表、对等连接、ACL和安全组。云厂商通常有配额比如一个VPC最多能创建若干个子网、多少个安全组但一般正常业务很难触顶。我见过不少团队一个VPC里什么环境都塞生产、测试、开发全在一起后来因为一条ACL规则配错了整个业务一起抖动。更稳妥的做法是生产环境一个VPC测试环境一个VPC两者通过对等连接或云间网络做受控互通。VPC之间的隔离是硬隔离即使有一天你的账号被攻破攻击者想横向移动也要先突破VPC边界这本身就是一层保护。3. 子网把一整块“网段”切成能用的小房间3.1 子网掩码到底在算什么子网的划分本质是对“网络位”和“主机位”做切分。比如10.0.0.0/16这个写法是CIDR表示法斜杠后面的16表示前16位是网络位后16位是主机位。这意味着整个网段里主机位有2的16次方个组合也就是65536个IP。换成生活场景一个IP地址就是一栋楼的完整门牌10.0.1.23好比是“10号楼0单元1栋23室”。子网掩码就是告诉别人从第几位开始是“楼栋号”从第几位开始是“房间号”。255.255.0.0写成二进制是连续16个1再加16个0意思就是前16位是楼栋后16位是房间。新手最容易犯的错是把“子网大小”和“IP个数”混为一谈。/24有256个地址去掉网络地址和广播地址实际可用254个。/26是64个地址实际可用62个。/30只有4个地址实际可用2个通常用来做点对点链路。你在规划子网时一定要先算清楚可用IP数再对照业务规模来切。3.2 手工划分子网一个可以照抄的计算过程假设你已经创建了一个VPC网段是10.0.0.0/16现在要给四套环境分配子网生产、测试、开发、管理。我建议这样切用途网段可用IP数广播地址生产10.0.1.0/2425410.0.1.255测试10.0.2.0/2425410.0.2.255开发10.0.3.0/2425410.0.3.255管理10.0.4.0/266210.0.4.63验证方法很简单。10.0.4.0/26掩码是255.255.255.192二进制是11000000也就是说最后一个字节的前两位被网络位占用了。最后一个字节从00000000到00111111范围就是0到63。所以网络地址是10.0.4.0广播地址是10.0.4.63可用地址是10.0.4.1到10.0.4.62。这套计算逻辑适用于所有子网划分。别嫌它基础真正排查问题时我发现一半以上的网络故障都是因为规划时掩码算错导致两个子网IP范围交叉路由和ACL规则全部乱套。3.3 子网计算工具怎么用、怎么验算现在网上有很多现成的“子网计算工具”输入网段和掩码马上给你返回网络地址、可用IP范围、广播地址这些信息。我一般会用工具快速验证但心里始终会记一笔工具的答案也只是一种“计算方式”的结果最重要的输入还是你想要的划分目标和网段边界。拿到工具输出后我会做三步人工验算。第一步看网段范围的首尾是否跟我预期的边界一致。第二步算一下可用IP数到底够不够业务需求比如未来要扩容到300台机器那/24就顶多撑到254台显然不够用要提前切/23。第三步检查相邻子网之间有没有重叠一旦重叠ACL规则再严谨也会出现流量串门。扩展一下云平台的子网通常还会集成DHCP功能创建子网同时就自动启用了内网DNS。你要特别留意有些云厂商会在子网的第一个可用IP保留给网关比如10.0.1.1你在规划固定IP时尽量避开。4. 虚拟网卡操作系统里那根“看不见的网线”4.1 虚拟网卡是怎么把物理网卡“虚拟”出来的物理网卡是一块硬件有自己的MAC地址、数据收发队列和驱动。虚拟网卡则是虚拟化平台在软件层模拟出来的网络接口。你在云主机里面看到的eth0其实不是一个真实存在的主板网卡而是宿主机上的虚拟交换机和虚拟机之间的一条虚拟通道。这样设计带来的最大便利是“灵活性”。物理网卡焊在主板上位置固定虚拟网卡可以在虚拟机运行期间被热插拔也就是不用关机就能加一张新网卡配合IP地址漂移实现无损迁移。性能方面现在主流云厂商和虚拟化平台都提供半虚拟化驱动比如Linux下常见的virtio-net性能接近物理网卡。而在单机高流量场景下还可以用SR-IOV直接把物理网卡的功能单元直通给虚拟机减少虚拟化层的开销。普通业务不需要关心这层细节但你如果遇到网络性能瓶颈不妨查一下自己的网卡类型是不是模拟的E1000这类老驱动换成virtio或者VMXNET3之后延迟能明显下降。4.2 Windows Server 2019 装好 Hyper-V 后怎么给虚拟机配虚拟网卡Windows Server上装Hyper-V之后很多朋友会遇到一个经典问题宿主机网络断掉或者虚拟机怎么配都上不了网。问题基本都出在虚拟交换机的选择上。先说配置步骤。打开Hyper-V管理器在右侧操作栏点“虚拟交换机管理器”创建虚拟交换机时选“外部网络”然后在“外部网络”下拉框里绑定你宿主机那块能上外网的物理网卡并把“允许管理操作系统共享此网络适配器”打上勾。如果不打这个勾宿主机自己就会失去网络连接——因为物理网卡被虚拟交换机独占绑定了。然后进入虚拟机设置添加一个“网络适配器”把它接到刚才创建的虚拟交换机上。如果你的虚拟机需要固定IP就到虚拟机系统内部去配置TCP/IP属性IP段要和虚拟交换机所在的宿主机网段在同一个逻辑网段网关指向云平台或局域网网关。三种交换机类型的区别也别搞混外部网络负责让虚拟机和外部物理网络互通也允许虚拟机访问外网内部网络只允许虚拟机和宿主机之间通信专用网络只允许虚拟机之间通信宿主机都不参与。大部分刚上手的人要选的是“外部网络”而不是另外两个。4.3 拉起虚拟网卡失败我踩过的一些原因排查词里有“拉起虚拟网卡失败请确保虚拟网卡已经安装在系统上并处于启用状态”这类提示这也是我在Hyper-V上常碰到的问题。我总结了一下最常见的三类根因是驱动不匹配、物理网卡被占用、虚拟机管理服务异常。第一类驱动不匹配。老版本的Hyper-V镜像自带的网卡驱动对Windows Server 2019兼容性有问题最简单的处理是把集成服务更新到最新版本或去宿主机更新网卡驱动。第二类物理网卡被占用。如果你之前建过另一个虚拟交换机占用了物理网卡新虚拟机再选同一块物理网卡时就会冲突。删除多余的虚拟交换机保证一块物理网卡只在一个虚拟交换机上共享问题基本能解决。第三类虚拟机管理服务异常。Hyper-V的虚拟交换机管理依赖虚拟机管理服务vmms这个服务如果停了网卡自然会拉不起来。可以在PowerShell里执行Get-Service vmms确认状态是Running。还有一种情况是系统提示“检测到虚拟网卡上存在未知协议”。这种提示的潜台词是虚拟网卡上除了标准TCP/IP协议之外还绑定了额外的协议栈或抓包驱动平台上做网络策略检测时识别成了“未知协议”从而触发保护动作、把网卡临时限制或下线。遇到这种提示先检查网卡属性里是否多了奇怪的协议绑定项把不必要的组件全部解绑再升级网卡驱动到官方最新版然后重启网络服务。如果确认什么都没装但提示仍然存在再看是不是安全软件加的策略导致的拦截。4.4 云主机上虚拟网卡的几条保命习惯云主机的虚拟网卡通常分为主网卡和扩展网卡。主网卡一般承担管理网段的通信比如你用弹性IP登录服务器走的链路就是它。主网卡的配置我建议尽量少动尤其不要轻易修改网关或删除默认路由。很多人图省事改了一下/etc/sysconfig/network-scripts里的配置结果重启后服务器彻底失联只能通过控制台的远程VNC登录进去救。多网卡场景下Linux系统默认会按路由优先级选出口。如果你加了第二张网卡只做内网通信一定要在路由表里精确指定源IP的走法否则很容易出现“流量从网卡A进来却从网卡B出去”的异步路由连接直接被中间设备丢弃。云厂商一般会提醒你配置策略路由这一步千万别跳过。5. ACL网络的守门员一张规则表挡掉不该走的流量5.1 ACL到底在匹配什么五元组ACL的全称是Access Control List访问控制列表。它不负责转发数据只负责做判断——每一份流量到达时ACL会查看数据包的头部信息按照规则表的顺序逐条匹配命中其中一条规则后就执行这条规则对应的动作要么permit要么deny。用来匹配的字段通常称为五元组源IP地址、目的IP地址、源端口、目的端口、协议类型。再加一个方向参数就是完整的ACL匹配逻辑。举个例子一条规则可以是“允许来自192.168.1.0/24的机器通过TCP协议访问目的IP为10.0.2.10的80端口”所有条件都必须同时满足ACL才会认为命中。在华为和华三设备上ACL规则是通过规则ID来排序的。比如rule 5、rule 10数字越小越先匹配。有些朋友会把多条规则写反顺序导致后面的规则永远匹配不到这是配置ACL时最容易犯的错。5.2 在华为路由器和华三实验环境里ACL到底怎么配华为路由器上ACL分基本ACL和高级ACL。基本ACL编号范围是2000到2999只能匹配源IP高级ACL编号是3000到3999支持五元组匹配。一个常见的场景是拒绝生产网段访问数据库服务器的SSH端口其他流量放行。配置如下acl number 3000 rule 5 deny tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0.0.0.0 destination-port eq 22 rule 10 permit ip然后在接口上应用interface GigabitEthernet0/0/1 traffic-filter inbound acl 3000注意traffic-filter后面的方向。inbound表示过滤从该接口进入设备的流量outbound表示过滤从该接口离开设备的流量。方向搞反ACL的效果就会完全相反。华三设备的写法略微不同但逻辑相通。IPv6场景下华三使用acl ipv6acl ipv6 number 3001 rule 5 deny ipv6 source 2001:db8:1::/64 destination 2001:db8:2::/64 rule 10 permit ipv6然后在接口下发interface GigabitEthernet1/0/1 packet-filter 3001 inbound你可以看到无论华为还是华三核心都是“先写匹配条件再写动作最后绑定到接口和方向”。5.3 默认流行为为什么最后一行通常是一句permit很多人配完ACL之后会疑惑为什么最后总要放一条permit ip其实这是被“默认流行为”逼出来的。华为设备的ACL末尾有一个隐式规则deny all。也就是说如果流量没有匹配到规则列表里的任何一条最终都会被丢弃。如果你只写了一条deny规则却没有写permit那么被deny条件覆盖到的流量会被丢弃其他所有流量同样会被丢弃整个子网可能直接断网。云平台上的网络ACL默认策略也类似通常都是“默认拒绝”。所以在创建网络ACL时你不仅要确认自己允许了哪些入站流量还要确认出站方向是否允许回包。这是新手最容易忽略的一点我在后面排查章节会重点讲回包问题。顺带提一下“ACL Lite”这类词。部分产品会提供裁剪过的轻量级ACL只支持基础匹配比如源地址、目的地址、协议号不支持端口级细粒度匹配规则条数也有限。两种ACL的结果动作都一样区别在于复杂规则对设备CPU和硬件转发的开销。普通场景用标准ACL没问题但如果规则要多且还要跑满线速尽量把规则拆成简单模式复杂的交给安全设备去处理。5.4 ACL、安全组、策略路由各自管什么怎么配合ACL管的是子网边界的进出流量安全组管的是实例或者弹性网卡边界的流量。很多云主机连不通不是ACL没有放行而是安全组没放行对应端口。反过来也一样。更关键的区别在于有状态和无状态。云平台上的网络ACL通常是无状态的安全组通常是有状态的。什么叫有状态如果你在安全组里放行了入方向80端口那么出方向会自动放行对应的返回流量而无状态的ACL不会做这种“回包自动放行”你必须同时配置入方向和出方向的规则否则数据包容易“进得来、出不去”。策略路由又是另一回事。ACL被用来做流量分类策略路由根据分类结果决定流量送到哪里。比如生产网段访问特定目标网段时你想让它走专用线路而不是默认出口就可以先写ACL匹配这个流量再在策略路由里设置下一跳为专线网关。ACL在这里不是终点而是给路由决策提供识别结果。6. 把整条链路串起来一次访问请求在VPC里怎么走6.1 流量从进入到落地的完整路径我经常被新人问到一个用户在外面访问你公司的网站请求到底经过了哪些网络组件我按实际环境画了一遍流程你用脑补的方式跟我走一遍就好。用户浏览器输入域名先做DNS解析拿到公网IP然后请求到达云平台的弹性公网IP或负载均衡器。流量从公网进入VPC后先经过VPC的网关设备再由VPC路由表决定下一步该去哪个子网。路由表指向目标子网之后流量会先经过子网绑定的网络ACLACL检查这份流量的来源、目的和端口符合规则才放行不符合就直接丢弃。通过ACL之后流量到达目标云主机所在的安全组。安全组再检查一遍确认目标实例是否允许该端口的入站访问。都通过了流量才被宿主机上的虚拟交换机转发到虚拟网卡虚拟网卡把数据包送到虚拟机内部的操作系统协议栈最后交给监听在80或443端口上的Web服务。这个过程你需要记住一个核心逻辑路由表负责决定“往哪走”ACL负责决定“让不让你走到这个子网”安全组负责决定“让不让你进这台机器”虚拟网卡负责决定“机器本身有没有这个网络接口能力”。问题出在四个环节中的任何一环最终表现都是你访问不到业务。6.2 排障顺序一台主机不通先查谁我干活时不太喜欢按所谓的“协议栈由底向上”来排更喜欢从云平台控制台开始一条链路一条链路地扫。首选步骤是这样的排查顺序检查项可能原因1控制台里实例运行状态和网卡状态实例关机或网卡被禁用2子网绑定的ACL入站和出站规则无状态ACL未放行回包3实例绑定的安全组规则端口没有放行或来源IP限制太严4操作系统内网卡的IP和路由网卡没有正确DHCP或默认路由被删5操作系统内应用监听状态服务没启动或监听在错误的地址有一次我排查一个“外面访问不到但控制台一切正常”的案例查了半天发现是ACL上漏了出站规则。原来我把入站80端口放行了ACL默认拒绝出站TCP三次握手里的SYN-ACK包根本回不去。当时我犯的错就是“下意识以为ACL和安全组一样有状态”。后来每次配置网络ACL我都会遵循一个习惯先配出站规则再配入站规则绝不让任何一边是空策略。6.3 我自己的几条网络配置经验第一VPC网段尽量留大一点子网划分要预留“管理子网”和“骨干子网”哪怕第一版业务用不到。后面想加一个堡垒机或跳板机没有管理子网会很别扭。第二尽量不要在生产子网上挂太多“宽松规则”。我看到很多团队图方便在ACL里放一条“permit ip any any”这等于把自己家的门拆了。第三规则命名一定要规范。我在华为和华三设备上见过的ACL大部分都是“rule 5 deny ip source 192.168.1.0 0.0.0.255 destination any”没有注释。两个月后再看根本想不起来当时为什么这么写。华为设备里支持给ACL加描述华三也支持规则里加好description排查效率至少翻一倍。第四模拟一次完整请求。配置完ACL和路由之后别急着收工在控制台里跑一次连通性测试再从系统内telnet一下目标端口。很多问题在真实业务流量进来之前就能暴露别把验证环节省掉。最后再分享一个小技巧修改线上网络ACL时建议先克隆一份原规则再增加新规则把确认无误的规则切换过去。网络ACL是无状态的很多云平台的规则变更会立即生效一旦漏了一条回包规则整个子网秒断。我吃过这个亏希望你不用再吃一次。