无法访问在 vpc 的子网 cidr 范围为 100.0.0.0/26 的私有子网中创建的 mysql

Posted

技术标签:

【中文标题】无法访问在 vpc 的子网 cidr 范围为 100.0.0.0/26 的私有子网中创建的 mysql【英文标题】:Not able to access mysql created in private subnet where vpc is having subnet cidr range of 100.0.0.0/26 【发布时间】:2021-12-23 23:14:38 【问题描述】:

我创建了一个 VPC,它有 2 个公共子网和 2 个私有子网。

公共的cidr_range[100.0.0.0/26, 100.0.0.64/26],私人的[100.0.0.128/26, 100.0.0.192/26]

现在我在私有子网中创建了一个 mysql 实例,其私有 IP 为 10.85.0.2

要访问私有数据库,首先在同一 VPC 中创建具有公共和私有 ip 的堡垒,然后在私有子网中创建主实例(只有私有 ip)。

现在,如果我想从 master 访问 mysql,则会出现错误

ERROR 2003 (HY000): Can't connect to MySQL server on '10.85.0.2:3306' (110)

如果我在192.168.0.0/26 范围内更改子网的cidr_range,那么我就可以访问数据库了。

有什么解决方案可以在不改变cidr_range(access in range of 100.0.00/26)的情况下访问db吗?

【问题讨论】:

在您的问题中,您的 IP 地址以 100.10.192. 开头,是否真的打算同时拥有这三个地址? CIDR 100.0.0.128/26 不是有效的私有 IP 地址。这是一个有效的可路由公共 IP 地址。请参阅 RFC 1918 以创建有效地址。 datatracker.ietf.org/doc/html/rfc1918 如果没有网关/代理,公共 IP 无法连接到私有 IP。 你检查this GCP docs了吗?你有什么特别的原因要使用100.0.0.0/26100.0.0.64/26吗?请检查 VPC here 的 GCP 有效 IP 范围,因为您看到有效范围是:10.0.0.0/8 172.16.0.0/12192.168.0.0/16 我使用 cidr_range 作为 100.0.0.64/26 因为所有 cidr 范围都已在另一个运行数据库的 vpc 中使用。所以我不能使用系列 10 或 192 或 172 范围的 cidr_range。 CIDR 块 10.0.0.0 非常大(24 位或 1600 万个地址)。通常,您可以从该块创建多个 VPC。 【参考方案1】:

将其写为 Community Wiki 以获得更好的可见性。

这个问题的答案是John Hanley在评论区写的。

CIDR 100.0.0.128/26 不是有效的私有 IP 地址。这是一个有效的可路由公共 IP 地址。请参阅 RFC 1918 以创建有效的寻址。datatracker.ietf.org/doc/html/rfc1918 如果没有网关/代理,公共 IP 无法连接到私有 IP。

GCP Documentation - Virtual Private Cloud 中有Valid Ranges 部分,它提供了可供使用的默认Private IP 范围。

私有 IP 地址RFC 1918

10.0.0.0/8

172.16.0.0/12

192.168.0.0/16

这就是您将 CIDR 设置为 192.168.0.0/26 的原因。

关于你的问题:

有没有办法在不改变cidr_range的情况下访问db(访问范围为100.0.00/26)

IMO,最好的解决方案是在 GCP 项目中重新配置整个网络。不使用 default VPC,而是使用 custom 并根据您的特定需求自定义 VPC

【讨论】:

以上是关于无法访问在 vpc 的子网 cidr 范围为 100.0.0.0/26 的私有子网中创建的 mysql的主要内容,如果未能解决你的问题,请参考以下文章

在实例安全组的入站部分使用 VPC 的 CIDR 会阻止负载均衡器到达它

具有相同 CIDR 块的多个 VPC 和子网

在 AWS 中确定或计算 VPC 的 Cidr 的标准公式 [关闭]

在 CloudFormation 模板中以编程方式生成子网 CIDR 块(或将整数相加)

一个 VPC 与使用最长前缀匹配的两个 VPC 具有对等关系

VPC 中的 Elastic Beanstalk 应用程序无法公开访问