在 Linux 中,如何在啟動時根據介面的 IPv4 地址自動為介面分配 IPv6 地址?
在 CentOS 6 機器上,我有一個帶有 2 個 NIC、eth0 和 eth1 的伺服器。eth0 的地址為 192.168.0.1。
我想創建一個腳本來解析 eth0 的 IP 地址,並在啟動時為 eth1 分配一個外觀相似的 IPv6 地址。
在這種情況下,我希望 eth1 的地址為 fc00::192:168:0:1/64。
我知道為了分配這個地址,我必須執行命令
ip address add fc00::192:168:0:1/64 dev eth1
但是,我正在嘗試找到一種方法來根據 eth0 的 IP 計算要分配給 eth1 的 IP,並讓該腳本在啟動時執行。
我這樣做而不是為兩個介面靜態分配地址的原因是我試圖將此伺服器轉換為 VM 模板並使用新的 IP 設置自動部署它。不幸的是,我使用的工具並不真正支持 IPv6。
所以我想我的問題有兩個部分:
- 如何計算要分配的 IPv6 地址?
- 如何在啟動時計算此地址並將其分配給 eth1?
不知道這甚至是一個好主意,但是小心翼翼,我會做這樣的事情:
hexip='fe80::' ip=$(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d '/' -f1 | sed 's/\./:/g') hexip="${hexip}${ip}" ip address add "$hexip/64" dev eth1
您需要在執行級別 3 之後執行的某個啟動文件中使用它。我認為 /etc/rc.local 會這樣做嗎?
不是您的問題的答案,而是來自具有大量 IPv6 經驗的人的一些建議…
這個想法可能看起來很有用,但實際上它更容易,例如只獲取 IPv4 地址的最後一部分並在
ifcfg-eth0
.我的一台機器是
83.247.10.7
,它所在的 IPv6 子網是2001:9e0:803::/64
。這個機制會給它2001:9e0:803:0:83:247:10:7
。我只是2001:9e0:803::7
手動給它。容易得多:) 這是我的ifcfg-eth0
:DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=83.247.10.7 NETMASK=255.255.255.224 IPV6INIT=yes IPV6ADDR=2001:9e0:803::7/64
這兩條額外的行不會殺死你,並且比一些試圖自動執行這種微不足道的事情的腳本要好得多。
您在問題中的範例使用
fc00::
的是一個不存在的子網,您在現實生活中不會看到,這確實使這個想法看起來不錯。對於真實地址,這個想法不會有太大幫助,甚至可能會變得更糟……