为什么我使用 ipv6 从本地 php 应用引擎开发连接到云 sql 失败?

Why does my connection to cloud sql from local php app engine development fail using ipv6?

所以我想使用它的免费 ipv6 地址连接到 google 云 sql 实例,而不是购买 ipv4 地址。为此,我查看了 ip 我的 ipv6 地址并允许它。我还查看了我的路由器 ipv6 前缀并允许(afaik 应该允许我家庭网络中的所有电脑访问 sql 实例)。

以下代码会产生问题:

$servername = "2001:6532:1234:1:6a4f:e1d7:5d69:52a3";
$username = "looooool";
$password = "superSecretStuff";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

该代码生成此错误:

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Der angegebene Host ist unbekannt. in C:\Users\kjh\Documents\SF WEBSITE\appengine-try-php-master\connect_db.php on line 8

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Der angegebene Host ist unbekannt. in C:\Users\kjh\Documents\SF WEBSITE\appengine-try-php-master\connect_db.php on line 8
Connection failed: php_network_getaddresses: getaddrinfo failed: Der angegebene Host ist unbekannt.

很抱歉错误消息是德语的,但我什至不知道在哪里更改它。第 8 行也是带有 $conn = new mysqli($servername, $username, $password, $dbname); 的行。我已经更改了 IP 地址,所以如果它看起来很奇怪,这就是原因。希望你能帮助我。

Ninja 编辑:如果我从 google 获得 IPv4 地址,它可以正常工作。

我发现一些 ISP(互联网服务提供商),尤其是那些专注于住宅客户的 ISP,在为他们的客户分配和持久化 IPv6 地址和范围方面非常随意——而对于 IPv4,更容易知道一个人的立场(通常需要为持久的静态 IPv4 地址支付一笔可选费用——如果您不支付该费用,那么默认情况下您将获得一个动态 IPv4 地址并且您知道 可能随时更改)。我已经通过使用 whatismyip.com 等多种服务验证了这种不当行为。结果,我无法从我的家庭网络(通过 AT&T)可靠地使用 Cloud SQL,而我在办公室没有问题(静态 IP 地址,v4 或 v6 都可以正常工作)。

您可能想再问一次有关 serverfault 的问题,因为它完全是关于网络管理,而不是关于软件开发(尤其是关于云 SQL)——包含有关什么的所有详细信息ISP 可供您使用,并专注于 "how to get predictable, non-fluidly-changing IPv6 externally visible addresses" w/the 给定的 ISP(对于 AT&T,我已经放弃了该任务,至少现在是这样)。

所以我认为答案只是将 $servername = "2001:6532:1234:1:6a4f:e1d7:5d69:52a3"; 更改为 $servername = "[2001:6532:1234:1:6a4f:e1d7:5d69:52a3]"; 也就是说,如果您的网络或 ISP 没有像我的那样对您的 IPv6 地址做一些疯狂的事情。