私は複数の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
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
はこの場合は間違っています)。この動作のため、たとえベース 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 の出力をスクリプトにパイプして、任意の順序に並べ替えることはできますか?