更改 ifconfig 回傳的 IP 位址的順序?

更改 ifconfig 回傳的 IP 位址的順序?

我有一個 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 的輸出透過管道傳輸,該腳本會將其重新排列為您想要的任何順序嗎?

相關內容