У меня есть сервер Ubuntu с несколькими подключенными к нему IP-адресами. 127.0.0.1 отображается как venet0 в ifconfig. я использую Повар настроить сервер. Проблема в том, что шеф-повар указывает 127.0.0.1 в качестве IP-адреса сервера вместо одного из «реальных» IP-адресов сервера. (очевидный "ohai ipaddress" использует первый IP-адрес, указанный ifconfig для определения IP-адреса сервера).
Как я могу изменить порядок, чтобы основной IP-адрес серверов был указан первым вместо 127.0.0.1?
Можно ли удалить venet0 и "повысить" venet0: 0, чтобы занять его место, поскольку 127.0.0.1 уже указан в интерфейсе "lo"?
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
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
interface), предполагается, что все, что отправлено через псевдонимы, все идет с одного и того же устройства, поэтому он перечисляет 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
в Lucid) и редактируем, чтобы читать
network[:default_interface] = "venet0:0"
(или любой другой интерфейс, который вы хотите сообщить как правильный адрес). Я не знаю, удаляет ли from () новую строку, которую команда будет печатать в конце, поэтому может потребоваться "venet0:0\n"
чтобы охай работал правильно. Обратите внимание, что он будет заменен при обновлении пакета, в котором он был.
Мне лично любопытно, ip route list
(из iproute
package) показывает ваш маршрут «по умолчанию» с использованием интерфейса venet0 или venet0: 0. Точно так же netstat -r
. Если какой-либо из них показывает venet0: 0, то вы можете предложить в отчете об ошибке ohai сначала попробовать эти команды, а если они не работают, попробуйте еще раз с помощью «нормальной» команды маршрута.
Возможно, это не более чем совпадение, но мне кажется, что это происходит буквенно-цифровая сортировка по имени интерфейса. Я вижу то же самое на своих ящиках с Linux.
Я ничего не знаю о Chef, но можете ли вы передать вывод ifconfig через сценарий, который изменит его в любом порядке?
Что меня странно и беспокоит, так это то, что у вас есть один и тот же IP-адрес, определенный как на вашем lo, так и на вашем виртуальном интерфейсе venet0.
Мое единственное предположение относительно того, почему это было бы настроено таким образом, заключается в том, что вы не смогли вызвать интерфейс без адреса, хотя это могло быть сделано с IP-адресом 0.0.0.0.
Удаление адреса 127. на venet0, скорее всего, решит эту проблему, а также исправит потенциальную дыру в безопасности / производительности (почти уверен, что повар достаточно умен, чтобы не захватить ваш адрес обратной петли).
Вы можете изменить положение вещей, переставив записи в /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"
Я не знаю, как это сделать, если только вы не удалите устройство обратной петли. Не для любопытства, но почему все равно, в каком порядке они находятся?