У меня есть сервер Ubuntu с несколькими IP-адресами, прикрепленными к нему. 127.0.0.1 отображается как venet0 в ifconfig. Я используюШеф-повардля настройки сервера. Проблема в том, что chef указывает 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
маршрут -н
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 через скрипт, который перестроит его в нужном вам порядке?