2013-03-07 4 views
2

Я назначен/64 IPv6 подсеть моего выделенного хоста через /etc/network/interfaces (распределение Debian Squeeze)Присвоить конкретный адрес IPv6 подсети свернуться

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

Теперь я хочу, чтобы получить CURL (PHP 5.3. 22-1 ~ dotdeb.0), чтобы использовать один конкретный IP-адрес этой подсети, pe 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. Почему это происходит? При определении каждого адреса IPv6, как/128 в /etc/network/interfaces, как:

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 

тогда все нормально и локон использует ::3 IP. Но я намерен использовать много IP-адресов из моей подсети (действительно много IP-адресов), так что это практически невозможно. Кто-нибудь знает, почему cURL не может назначить дополнительный IP-адрес подсети/64?

+1

В '/ etc/network/interfaces', вы имели в виду' up ip -6 addr add ...' вместо 'ip -6 addr add ...'? Я считаю, что это синтаксическая ошибка, как она появляется в вашем вопросе. – Celada

+0

@Celada: вы правы (копирование и вставка), спасибо – rabudde

ответ

4

cURL не может связываться с 2a01: 4f8: XXXX: YYYY :: 3, потому что 2a01: 4f8: XXXX: YYYY :: 3 не является локальным адресом IP, назначенным любому интерфейсу. Хосты могут принимать только пакеты по адресам, которые им назначены, и, соответственно, вы можете привязываться только к этим адресам.

Как вы описали, если вы добавляете 2a01: 4f8: XXXX: YYYY :: 3 в качестве адреса интерфейса, используя ip addr add, он работает. Этого следует ожидать.

Я не знаю, как назначить большую группу адресов локальной системе, не добавляя их по одному. Существует трюк, но он работает только для некоторых операционных систем (возможно, только для Linux) и только для IPv4 и только для интерфейса loopback.

1

Вы неправильно понимаете значение сетевой маски. В обоих примерах вы настраиваете один адрес интерфейса. Сетевая маска, которую вы указываете, является сетью всей сети.

Если вы хотите использовать несколько адресов, вам придется настроить каждый из них отдельно.

 Смежные вопросы

  • Нет связанных вопросов^_^