Теряется ifconfig_msk0_alias0

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-28 20:39:03

Здравствуйте, Уважаемые Форумчане!
В связи с определёнными Обстоятельствами, понадобилось назначить Серваку Два IP-Адреса на Один Сетевой Интерфейс:
  • 1. Динамический, Получается от Провайдера по DHCP.
    2. Статический, Задан для Локалки, известен и не меняется.
Вся Информация, найденная по данному Вопросу сводится к добавлению Алиаса в /etc/rc.conf вида:

Код: Выделить всё

ifconfig_msk0="DHCP"
ifconfig_msk0_alias0="inet 192.168.1.1 netmask 255.255.255.248"
и перезапуску Сети

Код: Выделить всё

/etc/rc.d/netif restart

Код: Выделить всё

root@Server:~# ifconfig
ath0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 2290
        ether 00:34:36:cc:5c:3b
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
        status: no carrier
msk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8010a<TXCSUM,VLAN_MTU,TSO4,LINKSTATE>
        ether 00:38:54:c1:bb:a0
        inet 192.168.1.1 netmask 0xfffffff8 broadcast 192.168.1.7
        inet 23.262.46.102 netmask 0xffffe000 broadcast 23.262.63.255
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex,flowcontrol,rxpause,txpause>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Но данное Решение «не переживает» передёргивания Сетевого Кабеля (EtherNet) или, как вариант, временного отключения Питания на Сетевом Коммутаторе. То есть после подобных Происшествий ifconfig показывает только Один IPшник, полученный по DHCP, а про Алиас «забывает». Если сделать

Код: Выделить всё

ifconfig msk0 down && ifconfig msk0 up
, то указанный Алиас сохраняется. Также примечательно, что если в /etc/rc.conf написать что-нибудь вроде

Код: Выделить всё

ifconfig_msk0_alias0="ether 00:38:54:c1:bb:a2"
, то после /etc/rc.d/netif restart новый MAC-Адрес присваивается и запоминается при любых Действиях, до Перезагрузки.
В связи с ВышеСказанным, возникает Вопрос: Какие существуют Методы для сохранения ifconfig_msk0_alias0 после временного пропадания Связи или какие Скрипты запускаются автоматически, когда FreeBSD обнаруживает Установление Подключения?
В /var/log/messages появляются Сообщения вида:

Код: Выделить всё

Oct 28 17:44:59 Server kernel: msk0: link state changed to DOWN
Oct 28 17:45:01 Server kernel: msk0: link state changed to UP
Oct 28 17:45:01 Server devd: Executing '/etc/rc.d/dhclient quietstart msk0'
Oct 28 17:45:09 Server dhclient: New IP Address (msk0): 23.262.46.102
Oct 28 17:45:09 Server dhclient: New Subnet Mask (msk0): 255.255.224.0
Oct 28 17:45:09 Server dhclient: New Broadcast Address (msk0): 23.262.63.255
Oct 28 17:45:09 Server dhclient: New Routers (msk0): 23.262.32.1
Но Мне как-то не очень хочется редактировать /etc/rc.d/dhclient (добавлять туда Команду типа ifconfig msk0 alias 192.168.1.1/29), т.к. Это ИдеаЛогически НеПравильно.
Также приходит на Ум Решение проверять Состояние Сети по Cronу и, в случае НеСоответствия запускать всё тот же /etc/rc.d/netif restart, но такое решение выглядит достаточно Топорным, а хочется сделать Изящно и Правильно, да так чтобы лишний раз не дёргать CPU и не отваливать Сеть на 5 Секунд (Время выполнения /etc/rc.d/netif restart)
Заранее Спасибо Всем, кто дочитал до этого места.
Последний раз редактировалось f_andrey 2016-10-28 20:41:22, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Neus
капитан
Сообщения: 1814
Зарегистрирован: 2008-09-08 21:59:56

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение Neus » 2016-10-28 21:20:23

Oct 28 17:45:01 Server devd: Executing '/etc/rc.d/dhclient quietstart msk0'
devd.conf поправь.
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-29 14:55:29

devd.conf поправь.
Спасибо, почитал. Вроде всё просто и логично, а вот не получается:
devd.conf трогать постеснялся, вместо этого создал Файл /etc/devd/LocalNetWork.conf следующего содержания:

Код: Выделить всё

notify 0 {
	match "system"		"IFNET";
	match "subsystem"	"(msk0)";
	match "type"		"(LINK_DOWN)";
	media-type		"EtherNet";
	action "/usr/bin/logger Achtung! Now $subsystem is Going Down!";
};

notify 0 {
	match "system"		"IFNET";
	match "subsystem"	"(msk0)";
	match "type"		"(LINK_UP)";
	media-type		"EtherNet";
	action "/usr/bin/logger Achtung! Now $subsystem is Going Up!";
};
Ну так вот (Выполнять "/etc/rc.d/devd restart" не забываю), Первое срабатывает при Выдёргивании «Шнурка», а вместо Второго при Подключении срабатывает только Стандартное "Executing '/etc/rc.d/dhclient quietstart msk0'". Если меняю "notify 0", скажем, на "notify 200", то Моя Команда срабатывает, но в "/var/log/messages" не вижу Стандартного "Executing '/etc/rc.d/dhclient quietstart msk0'". В Документации написано, что Правило с Бо́льшим Приоритетом перекрывает Дефолтные. А как добавить Своё Правило, чтобы не перекрывало Дефолтное – непонятно. Может существует Правило "Продолжить Обработку" – не нашёл? Просто не хотелось бы поломать DHCP, а то Мой SSH отвалится и будет не Good.
Конструкция типа

Код: Выделить всё

	action "/etc/rc.d/dhclient quietstart $subsystem ; ifconfig msk0 alias 192.168.1.1/29";
выглядит костыльно, т.к. (возможно) после Обновления FreeBSD или переезда на Другой Сервак можно будет схватить ещё полную лопату непоняток "Почему?" и "Откуда?". Или Я не просто придираюсь к Мелочам?
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Аватара пользователя
Neus
капитан
Сообщения: 1814
Зарегистрирован: 2008-09-08 21:59:56

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение Neus » 2016-10-29 16:30:26

Не костыльно, а не правильно.
Правильно написать в своём конфиге нужные экшены, включая стандартный, а чтобы срабатывало именно твоё правило, естественно приоритет выставить выше дефолтного.
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-29 17:22:17

Neus писал(а):Не костыльно, а не правильно.
Правильно написать в своём конфиге нужные экшены, включая стандартный, а чтобы срабатывало именно твоё правило, естественно приоритет выставить выше дефолтного.
Конструкцию типа

Код: Выделить всё

   action "/etc/rc.d/dhclient quietstart $subsystem ; ifconfig msk0 alias 192.168.1.1/29";
Я, естественно имел в виду внутри Файла "/etc/devd/LocalNetWork.conf", а не "/etc/devd.conf". Считаю, что гораздо Правильнее добавить НеСуществовавший Файл на Сервак (Чтобы не было всяких "OverWrite"/"Skip"/"Append"?), чем редактировать Готовые Конфиги от Разработчиков Системы. Опасения же касаются только того, что в последующих Версиях (например) Конструкция "/etc/rc.d/dhclient quietstart $subsystem" может как-либо мутировать (Бывает и такое, станет, например "/usr/share/bsdconfig/networking/Run{Oracle,Google,MicroSoft}_DHCP_Client QuietFastStartAndStayResident $subsystem" :ROFL: или типа того), а в Моём Конфиге, который перекрывает Дефолтные Действия, будет вызываться «уже Устаревшая» Конструкция. Поэтому и хотел сделать так, чтобы Действие не перекрывало Дефолтное, а добавляло Необходимый Мне Функционал.
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-29 21:59:24

На Соседнем Форуме подсказали, IMHO, более Джедайский Путь, который сводится к добавлению одного Failика:
"/etc/dhclient-exit-hooks":

Код: Выделить всё

#!/bin/sh
#
# The Local NetWork Configuration Script.
# CopyLeft(C) by CrazyMihey, All Rights Ignored.
#
LocalAd="msk0"
LocalIP="192.168.1.1"
LocalBt="29"
if [ "${interface}" == "${LocalAd}" ]
 then
  # Include Standart Script Functions, like info and warn.
  . /etc/rc.subr
  . /etc/network.subr
  $IFCONFIG_CMD "${interface}" alias "${LocalIP}/${LocalBt}"
  if $IFCONFIG_CMD "${interface}" | grep --extended-regexp --ignore-case "INet[ ]+${LocalIP}" > /dev/null
   then	# Prints nothing to Log By Default. To register this Event, set rc_info to "Yes" in /etc/rc.conf or use warn instead of info here.
    info "Local IP \"${LocalIP}\" successfully assigned to \"${interface}\" because of \"${reason}\"."
   else
    warn "Can not assign Local IP \"${LocalIP}\" to \"${interface}\" during \"${reason}\"."
  fi
fi
Только вот Сетевуха "e1000phy0: <Marvell 88E3016 10/100 Fast Ethernet PHY> PHY 0 on miibus0" после десятка «ПереТыкиваний» дохнет в "status: no carrier" до самой Холодной Перезагрузки но Это уже совсем другая История…
Узнал много Нового. Всем Спасибо!
Не понятно только, почему подобный Способ не поместили в различные FAQи – везде только рекомендуют "/etc/rc.conf" править на предмет Добавления Алиасов…
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35288
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение Alex Keda » 2016-11-02 7:05:34

Постоянно используемый альяс, на интерфейсе с DHCP - лично мне такого не надо было никогда.

Наверное, разработчикам тоже ;)
Убей их всех! Бог потом рассортирует...