【问题标题】:Assign specific IPv6 address of subnet to cURL将子网的特定 IPv6 地址分配给 cURL
【发布时间】:2013-02-22 12:39:01
【问题描述】:

我已经通过/etc/network/interfaces 为我的专用主机分配了一个 /64 IPv6 子网(分发是 Debian Squeeze)

iface eth0 inet6 static
  address 2a01:4f8:XXXX:YYYY::2
  netmask 64
  gateway fe80::1

现在,我想让 cURL (PHP 5.3.22-1~dotdeb.0) 使用该子网的一个特定 IP 地址,即 p.e. 2a01:4f8:XXXX:YYYY::3 所以我的代码看起来像:

curl_setopt($this->_curl, CURLOPT_INTERFACE, '2a01:4f8:XXXX:YYYY::3');
curl_setopt($this->_curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);

运行curl_exec 时,我得到bind failed with errno 99: Cannot assign requested address。为什么会这样? 在/etc/network/interfaces 中将每个 IPv6 地址定义为 /128 时,如:

iface eth0 inet6 static
  address 2a01:4f8:XXXX:YYYY::2
  netmask 128
  up ip -6 addr add 2a01:4f8:XXXX:YYYY::3/128 dev eth0 preferred_lft 0
  gateway fe80::1

然后一切正常,cURL 使用::3 IP。但是我的意图是使用我子网中的很多 IP(真的很多 IP),所以这是不切实际的。 有谁知道为什么 cURL 不能分配 /64 子网的子 IP?

【问题讨论】:

  • /etc/network/interfaces 中,您的意思是up ip -6 addr add ... 而不是ip -6 addr add ...?我确实认为这是您的问题中出现的语法错误。
  • @Celada:你是对的(复制和粘贴失败),谢谢

标签: php curl ip-address ipv6 subnet


【解决方案1】:

cURL 无法绑定到 2a01:4f8:XXXX:YYYY::3,因为 2a01:4f8:XXXX:YYYY::3 不是分配给任何接口的 IP 本地地址。主机只能在分配给它们的地址上接收数据包,因此,您只能绑定到这些地址。

正如您所描述的,如果您使用ip addr add 在接口上添加 2a01:4f8:XXXX:YYYY::3 作为地址,它就可以工作。这是意料之中的事。

我不知道有一种方法可以将一大组地址分配给本地系统,而不必一个一个地添加它们。有一个技巧,但它仅适用于某些操作系统(可能仅适用于 Linux)并且仅适用于 IPv4 并且仅适用于环回接口。

【讨论】:

    【解决方案2】:

    您误解了网络掩码的含义。在您的两个示例中,您都在接口上配置了一个地址。您指定的网络掩码是整个网络的掩码。

    如果您想使用多个地址,则必须分别配置它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      相关资源
      最近更新 更多