Skip to content
← 返回云网络列表
开发与配置实践

云网络:配置双向连通路径与访问规则 · 完整源码、配置与依赖至核对资料与相邻阅读 ​

返回分篇目录

本篇以VPC 双向路径工作表为例;前置是子网/网卡关联、路由、安全组与 NACL。源码与输入与下文配置共用同一份文件,示例未执行。

核对日期2026-10-17;适用范围:以AWS VPC/EC2 2016-11-15 API对象模型为固定示例,核对2026-10-17官方中英文网络ACL/安全组资料;不是跨云通用配置或云端当前最新部署模板。示例未执行;真实环境仍需验证产品配置、权限、连通与恢复结果。先读起点理解前置,再按章节完成推演。

完整源码、配置与依赖 ​

下列文件与README共用同一份仓库内容,保持输入、失败与清理合同一致。示例未执行;以下命令仅供读者在满足前置后自行运行。

dependencies.txt ​

text
No runtime or cloud SDK. JSON fixtures are a saved AWS VPC-style path worksheet, not provider API input.
AWS VPC/EC2 API conceptual contract: 2016-11-15; online references checked 2026-10-17.

topology.json ​

json
{
  "vpc": "10.40.0.0/16",
  "subnets": [
    {
      "id": "app",
      "cidr": "10.40.1.0/24",
      "routeTable": "app-routes"
    },
    {
      "id": "db",
      "cidr": "10.40.2.0/24",
      "routeTable": "db-routes"
    }
  ],
  "routes": [
    {
      "table": "app-routes",
      "destination": "10.40.0.0/16",
      "target": "local"
    },
    {
      "table": "db-routes",
      "destination": "10.40.0.0/16",
      "target": "local"
    }
  ],
  "securityGroups": [
    {
      "id": "app-sg",
      "egress": [
        {
          "protocol": "tcp",
          "port": 5432,
          "toGroup": "db-sg"
        }
      ]
    },
    {
      "id": "db-sg",
      "ingress": [
        {
          "protocol": "tcp",
          "port": 5432,
          "fromGroup": "app-sg"
        }
      ]
    }
  ],
  "nacl": [
    {
      "subnet": "app",
      "inbound": [
        {
          "number": 100,
          "action": "allow",
          "protocol": "tcp",
          "ports": "1024-65535",
          "cidr": "10.40.2.0/24"
        }
      ],
      "outbound": [
        {
          "number": 100,
          "action": "allow",
          "protocol": "tcp",
          "ports": "5432",
          "cidr": "10.40.2.0/24"
        }
      ]
    },
    {
      "subnet": "db",
      "inbound": [
        {
          "number": 100,
          "action": "allow",
          "protocol": "tcp",
          "ports": "5432",
          "cidr": "10.40.1.0/24"
        }
      ],
      "outbound": [
        {
          "number": 100,
          "action": "allow",
          "protocol": "tcp",
          "ports": "1024-65535",
          "cidr": "10.40.1.0/24"
        }
      ]
    }
  ],
  "dns": {
    "privateName": "db.lab.example.invalid",
    "answer": "10.40.2.10",
    "ttl": 60
  }
}

paths.json ​

json
[
  {
    "case": "app-to-db",
    "source": "10.40.1.10:49152",
    "destination": "10.40.2.10:5432",
    "forward": [
      "app-sg egress tcp5432 to db-sg",
      "app NACL outbound tcp5432",
      "app-routes local",
      "db NACL inbound tcp5432",
      "db-sg ingress tcp5432 from app-sg"
    ],
    "return": [
      "db-sg established",
      "db NACL outbound tcp49152",
      "db-routes local",
      "app NACL inbound tcp49152",
      "app-sg established"
    ],
    "expected": "Allowed by this worksheet only; OS firewall, listener and live attachment not evaluated."
  },
  {
    "case": "missing-return-nacl",
    "change": "Remove app inbound ephemeral rule",
    "expected": "Return packet denied by final implicit NACL deny; forward SYN permission is insufficient."
  },
  {
    "case": "public-client",
    "source": "192.0.2.10:49152",
    "destination": "10.40.2.10:5432",
    "expected": "No internet route/public address; no matching security group source; reject."
  }
]

README.md ​

md
# 云网络双向路径审阅工作表

示例未执行,不含云CLI、网络服务或模拟器,无需安装依赖。topology.json是完整教学拓扑,paths.json是逐跳正反向审阅与失败预期;它们是自定义工作表,不可提交给AWS API。私有地址需要读者映射到自己的隔离VPC;192.0.2.10和example.invalid是保留示例,必须替换,不能假称公网可达。

读者自跑方式是离线阅读JSON并画出双方五元组,无命令前置。app的10.40.1.10:49152连接db的10.40.2.10:5432;核对双方子网关联路由表,10.40.0.0/16 local匹配;app-sg出站与db-sg入站允许5432,安全组对已建立返回流量有状态。NACL自定义规则必须另放行app出站5432/db入站5432,以及db出站49152/app入站49152;示例以1024–65535覆盖课堂临时端口,实际须结合客户端OS端口范围缩窄。所有未匹配项隐式拒绝,规则号升序首匹配。

成功预期仅为静态规则允许此路径,不证明接口已关联、OS防火墙允许或数据库正在监听。失败推演:移除app的入站临时端口规则,返回包被NACL拒绝;把DNS答案写成旧私网地址,安全组再宽也不能修复目标错误;公网客户端没有公网地址/互联网路由/来源授权,不能访问DB。

DNS给出私有名称db.lab.example.invalid、10.40.2.10、TTL60;这只是工作表条目,尚未创建任何zone。读者应逐层核对解析器、zone关联、TTL和真实返回答案;VPC AmazonProvidedDNS有专门的过滤边界,NACL不能笼统当作DNS过滤器。

恢复清理:保留变更前路由/关联/规则号,按路径定位最小回退,不通过0.0.0.0/0入站放通排错。此工作表没有真实网络需清理;删除自行创建的副本即可。真实环境要先解除依赖再删除专属路由、接口、网关,防止误删共享VPC资源。

## 完整资源配置



network.yaml完整声明VPC、两个子网、专属路由表与关联、两组安全组、NACL及关联/四条规则、私有zone和A记录。路由表自动具有VPC local路由,不添加公网默认路由、IGW、NAT或计算实例。模板app安全组出站使用10.40.2.0/24目的网段,JSON工作表则用db-sg目标引用表达更窄的身份设计;两者是明确的替代形式,真实部署前应选择符合依赖关系的规则。db组只放行app组入站,显式回环限定出站规则用于防止自动放行全部出站,已建立回流仍依安全组状态;NACL另显式放行回包。

示例example.invalid私有名称与10.40网段必须由读者映射到自有隔离环境,确保地址不重叠。A记录中的10.40.2.10仅预留数据库位置,模板没有数据库或监听程序,所以部署网络后仍不可据此判断应用可达。成功预期仅是网络对象与关联建立;DNS权限/配额/冲突或错误区域会导致失败。日后读者用自有change set流程审阅后执行,本轮未调用;清理先删除专用记录/zone与接口依赖,再删除专用stack,禁止操作共享VPC。

[安全组属性与默认出站规则](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-securitygroup.html)

本篇练习与参考解答 ​

练习:部署network.yaml后访问db域名就能连数据库吗?

参考解答

不能。模板只建网络和私有A记录,没有数据库进程或计算网卡占用10.40.2.10;必须另外验证关联与监听。

核对资料与相邻阅读 ​

继续阅读机制、完整实践、运维、诊断与复习。

继续阅读