Изменить порядок IP-адресов, возвращаемых ifconfig?

Изменить порядок IP-адресов, возвращаемых ifconfig?

У меня есть сервер 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 через скрипт, который перестроит его в нужном вам порядке?

Связанный контент