Debian

sysctl.conf 中的 ipv6 max_addresses (Debian 6)

  • January 5, 2012

我想將任意數量的 IPv6 地址分配給 Debian 6 主機,但我看到了以下設置,並且想知道設置更高的後果是什麼,或者這種設置方法是否會通過影響系統性能來限制。

net.ipv6.conf.eth0.max_addresses=16

Linode 和其他一些站點建議將此設置為 32,如果您需要為一個介面分配更多地址,但為什麼要設置 32?如果我願意,我可以分配 64、128、5000 個 IPv6 地址嗎?我這樣做是為了在一定程度上避免基於名稱的 Web 服務託管,這樣我就可以將每個站點綁定到不同 IP 地址的埠 80。

我可以/應該net.ipv6.conf.eth0.max_addresses=3000嗎?為什麼或者為什麼不?

由於效率和時間複雜性。這基本上與我們應該保持路由表簡短(但在不同級別)的原因相同,因為對於接收到的每個數據包,系統都需要遍歷整個路由表來尋找匹配項以了解如何路由該數據包。這導致路由表長度的平均和最壞情況查找時間為 O(n)。

介面地址具有類似含義的相同問題。介面可能必須每秒檢查數千個通過電纜的數據包,以確定哪些數據包發往該主機。簡單的方法是:對於每個到達的數據包,將其目標地址與分配給該介面的每個地址範圍進行比較。請注意,這是另一個順序任務,每個數據包需要 O(n),這意味著:它會花費處理時間,如果您必須每秒處理數千個數據包,可能會花費很多時間。

還有另一個問題:當您向本地連結添加越來越多的地址時,每個新地址都會增加連結中所有其他主機在其鄰居 (ARP) 表中所需的記憶體。這不是什麼大問題(ARP Proxy 也是如此),但您應該注意對整個本地網路的性能仍有一些影響。

這使得將大量地址分配給單個主機不是一個好主意。像 16 或 32 這樣非常保守的限制就足夠了,同時也提醒管理員這些成本。

如果您需要將大量地址路由到一台機器,您應該創建一個子網。選擇一個子網內的所有連續地址,並將整個子網路由到該機器。然後你使用某種形式的內部路由或一些 iptables/route 技巧來完成機器內部的所有工作。這基本上是我們在單個物理伺服器中託管大量虛擬機時所做的。

引用自:https://serverfault.com/questions/346879