2013-03-07 75 views
2

我已經通過/etc/network/interfaces分配/ 64的IPv6子網到我的專用主機(分佈是Debian的擠壓)分配特定的IPv6地址捲曲

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

現在,我想捲曲(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。爲什麼會發生? 當用作/ 128在/etc/network/interfaces定義每個IPv6地址,如:

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無法分配/ 64子網的子IP?

+1

在'/ etc/network/interfaces'中,你的意思是'up ip -6 addr add ...'而不是'ip -6 addr add ...'?我相信這是一個語法錯誤,因爲它出現在你的問題中。 – Celada 2013-03-07 11:57:16

+0

@Celada:你說得對(複製並粘貼失敗),謝謝 – rabudde 2013-03-07 13:37:01

回答

4

cURL無法綁定到2a01:4f8:XXXX:YYYY :: 3,因爲2a01:4f8:XXXX:YYYY :: 3不是分配給任何接口的IP本地地址。主機只能在分配給它們的地址上接收數據包,因此,您只能綁定到這些地址。如您所述,如果您在界面上使用ip addr add添加2a01:4f8:XXXX:YYYY :: 3作爲地址,則它可以正常工作。這是可以預料的。

我不知道如何將大量地址分配給本地系統,而無需逐一添加地址。有一個技巧,但它只適用於某些操作系統(可能只有Linux),並且僅適用於IPv4,並且僅適用於環回接口。

1

您誤解了網絡掩碼的含義。在這兩個示例中,您都可以在界面上配置一個地址。您指定的網絡掩碼是整個網絡的掩碼。

如果你想使用多個地址,你將不得不分別配置每個地址。