我有一個 Ubuntu 伺服器,上面附加了多個 IP 位址。 127.0.0.1 被 ifconfig 列為 venet0。我在用著廚師配置伺服器。問題在於 Chef 將 127.0.0.1 列為伺服器的 IP 位址,而不是伺服器的「真實」IP 位址之一。 (明顯的「ohai ipaddress」使用ifconfig列出的第一個IP來決定伺服器的IP)。
如何更改順序,以便先列出伺服器主 IP,而不是 127.0.0.1?
由於 127.0.0.1 已在「lo」介面中列出,是否可以刪除 venet0 並「提升」venet0:0 來取代其位置?
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:334 errors:0 dropped:0 overruns:0 frame:0
TX packets:334 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16700 (16.7 KB) TX bytes:16700 (16.7 KB)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:7622207 errors:0 dropped:0 overruns:0 frame:0
TX packets:8183436 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2102750761 (2.1 GB) TX bytes:2795213667 (2.7 GB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:XXX.XXX.XXX.XX1 P-t-P:XXX.XXX.XXX.XX1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
venet0:1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:XXX.XXX.XXX.XX2 P-t-P:XXX.XXX.XXX.XX2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
路線-n
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.0.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 venet0
0.0.0.0 192.0.2.1 0.0.0.0 UG 0 0 0 venet0
答案1
ohai
用於route
透過尋找預設閘道(目標 0.0.0.0)來尋找「預設介面」:
network[:default_interface] = from("route -n \| grep -m 1 ^0.0.0.0 \| awk \'{print \$8\}\'")
(從截至目前第 21 行)
問題是,它route
不關心介面上的別名(venet0:0
並且venet0:1
是介面的別名venet0
),它假設透過別名發送的任何內容都從同一裝置發出,因此它列為venet0
傳出介面。當介面是實體介面時,這是合乎邏輯的,但當它是虛擬介面時,它可能是錯誤的(並且是在這種情況下是錯誤的)。由於這種行為,ohai 依賴它來確定要使用的「正確」IP 位址在技術上也是錯誤的,即使基本 IP 位址不是 127.0.0.1。
理想的修復方法是重新配置網路設置,以便未別名的 venet0 接口成為您的“主 IP”。如果你因為某些原因真的需要 venet0 為 127.0.0.1(我不熟悉 venet* 接口,所以我不知道為什麼你這樣做,或者如果 venet0 是主 IP 位址而不是 127.0 會發生什麼) .0.1),那麼您可以嘗試尋找該network.rb檔案(/usr/lib/ruby/1.8/ohai/plugins/linux/network.rb
在清醒)並編輯它來閱讀
network[:default_interface] = "venet0:0"
(或您希望它報告為正確地址的任何介面)。我不知道 from() 是否會刪除命令在末尾打印的換行符,因此"venet0:0\n"
ohai 可能需要它才能正常工作。請注意,當您升級它所在的軟體包時,它將被替換。
ip route list
我個人很好奇(從套件中)是否iproute
使用 venet0 介面或 venet0:0 介面顯示您的「預設」路由。同樣地,netstat -r
。如果其中一個顯示 venet0:0,那麼您可能會在向 ohai 提交的錯誤報告中建議他們首先嘗試這些命令,如果它們不起作用,請使用「正常」路由命令重試。
答案2
我不知道有什麼辦法可以做到這一點,除非你只是刪除你的環回設備。不想多管閒事,但為什麼它們的順序很重要?
答案3
您也許可以透過重新排列 中的條目來改變情況/etc/udev/rules.d/70-persistent-net.rules
。
如果那裡沒有任何條目,您可以嘗試新增自己的條目。這是一個例子:
# PCI device 0xXXXX:0xXXXX (XXXX)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:00:00:00", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
答案4
這可能只是巧合,但在我看來,它是按介面名稱的字母數字順序排序的。我在我的 Linux 機器上看到了同樣的事情。
我對 Chef 一無所知,但是您可以透過腳本將 ifconfig 的輸出透過管道傳輸,該腳本會將其重新排列為您想要的任何順序嗎?