ifconfig によって返される IP アドレスの順序を変更しますか?

ifconfig によって返される IP アドレスの順序を変更しますか?

私は複数のIPアドレスが割り当てられたUbuntuサーバーを持っています。127.0.0.1はifconfigでvenet0としてリストされています。私はシェフサーバーを設定します。問題は、chef がサーバーの「実際の」IP の 1 つではなく、サーバーの IP アドレスとして 127.0.0.1 をリストしていることです。(明らかに、「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

ohairouteデフォルト ゲートウェイ (宛先 0.0.0.0) を検索して、「デフォルト インターフェイス」を見つけるために使用します。

network[:default_interface] = from("route -n \| grep -m 1 ^0.0.0.0 \| awk \'{print \$8\}\'")

(から現時点では21行目

問題は、インターフェイスのエイリアス(およびインターフェイスのエイリアス)routeを気にしないことです。エイリアスを介して送信されるものはすべて同じデバイスから送信されると想定しているため、送信インターフェイスとしてリストされます。これは、インターフェイスが物理インターフェイスの場合は論理的ですが、仮想インターフェイスの場合は間違っている可能性があります(およびvenet0:0venet0:1venet0venet0この場合は間違っています)。この動作のため、たとえベース IP アドレスが 127.0.0.1 でなかったとしても、ohai がこれに依存して「正しい」 IP アドレスを決定するのは技術的に間違っています。

/usr/lib/ruby/1.8/ohai/plugins/linux/network.rb理想的な修正方法は、ネットワーク設定を再構成して、エイリアス化されていない venet0 インターフェースが「プライマリ IP」になるようにすることです。何らかの理由で venet0 を 127.0.0.1 にする必要がある場合 (私は venet* インターフェースに詳しくないので、なぜこのように設定しているのか、または venet0が127.0.0.1 ではなくプライマリ IP アドレスである場合に何が起こるのかはわかりません)、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 の出力をスクリプトにパイプして、任意の順序に並べ替えることはできますか?

関連情報