BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Пт 28 окт, 2016 8:40 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 28 окт, 2016 6:08 pm
Сообщения: 7
Откуда: Москва
Здравствуйте, Уважаемые Форумчане!
В связи с определёнными Обстоятельствами, понадобилось назначить Серваку Два 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)
Заранее Спасибо Всем, кто дочитал до этого места.

_________________
Не существует абсолютно работающих Систем, но иногда встречаются (ещё) недоломанные…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Пт 28 окт, 2016 10:21 pm 
Не в сети

Зарегистрирован: Вт 18 сен, 2007 10:26 am
Сообщения: 896
Откуда: СССР, Красноярск
А если наоборот?
Первый статичный, а алиас динамичный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Сб 29 окт, 2016 11:15 am 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2255
CrazyMihey писал(а):
Здравствуйте, Уважаемые Форумчане!
В связи с определёнными Обстоятельствами, понадобилось назначить Серваку Два IP-Адреса на Один Сетевой Интерфейс:
    1. Динамический, Получается от Провайдера по DHCP.
    2. Статический, Задан для Локалки, известен и не меняется.

<skipped>

В связи с ВышеСказанным, возникает Вопрос: Какие существуют Методы для сохранения 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/devd.conf:

Код:
#
# Try to start dhclient on Ethernet-like interfaces when the link comes
# up.  Only devices that are configured to support DHCP will actually
# run it.  No link down rule exists because dhclient automatically exits
# when the link goes down.
#
notify 0 {
        match "system"          "IFNET";
        match "type"            "LINK_UP";
        media-type              "ethernet";
        action "/etc/rc.d/dhclient quietstart $subsystem";
};


dhclient стартует в случае поднятия линка на интерфейсе $sysbsytem,
если линк упал DOWN, то при подъеме UP -> devd "тихо" стартует dhclient снова
на интерфейсе == $subsystem.
Странно что отваливается alias, правильней было бы выяснить почему?
А решение простое:
- можно ввести в верхнее subsytem "msk0";
- в action вставить скрипт, который будет запускать /etc/rc.d/dhclient quietstart msk0
или $subsystem и по завершении выполнять ifconfig msk0 ... alias

Как сконструируете, так и будет, более удобно или менее, все будет зависеть от
Вашей мысли.
Есть еще один вариант, imho, менее удобный (подумал... а может более удобный):
/sbin/dhclient - всегда вызывает /sbin/dhclient-script, последний в свою очередь,
смотрит наличие /etc/dhclient-enter-hooks и выполняет его - прочитайте
man dhclient-script и жизнь станет проще.

Так что man в руки и любой из вариантов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Сб 29 окт, 2016 4:13 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 28 окт, 2016 6:08 pm
Сообщения: 7
Откуда: Москва
AlexVPetrov писал(а):
А если наоборот?
Первый статичный, а алиас динамичный.
Вообще-то не пробовал, но Это как-то нелогично. Пытаюсь найти Правильное и Универсальное Решение.

_________________
Не существует абсолютно работающих Систем, но иногда встречаются (ещё) недоломанные…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Сб 29 окт, 2016 4:29 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2255
CrazyMihey писал(а):
AlexVPetrov писал(а):
А если наоборот?
Первый статичный, а алиас динамичный.
Вообще-то не пробовал, но Это как-то нелогично. Пытаюсь найти Правильное и Универсальное Решение.


вполне возможно, что статика на алиасе, теряется из-за dhclient,
никто не запрещает попробовать прописать статикой локальный адрес и
поднимать dhcp на алиасе, только надо посмотреть - возможно сие?

Правильное решение Вам уже отписано:
1) вместо dhclient -> свой скрипт, внутри которого вызывается dhclient
и спустя какое-то время или проверка что dhclient уже поднялся
на msk0, тогда -> ifconfig msk0 ... alias
2) dhcp-hook

правите системный devd.conf в случае 1) или 2) ваяете свой hook

Все что нужно, в devd.conf есть - событие LINK_UP, ибо по LINK_DOWN - делать нечего,
разве что logger послать себе уведомление.

Ах да, третий вариант - купить карту на Realtek'е, ибо путно и реально работающие
драйвера во FreeBSD для Realteka - если desktop/worstation и для Intel - в качестве
серверного решения. Одна карта - dhclient, вторая - статика для локалки


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Сб 29 окт, 2016 4:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 28 окт, 2016 6:08 pm
Сообщения: 7
Откуда: Москва
lavr писал(а):
Странно что отваливается alias, правильней было бы выяснить почему?
Надо Полагать, что при "LINK_DOWN" очищаются всякие побочные Эффекты, вроде Alisов (хотя после Выдёргивания «Шнурка» ifconfig продолжает выводить Оба Адреса), или, скорее всего, /etc/rc.d/dhclient, кроме всего прочего, проводит «Уборку Помещения».
lavr писал(а):
А решение простое:
- можно ввести в верхнее subsytem "msk0";
- в action вставить скрипт, который будет запускать /etc/rc.d/dhclient quietstart msk0
или $subsystem и по завершении выполнять ifconfig msk0 ... alias

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 или переезда на Другой Сервак можно будет схватить ещё полную лопату непоняток "Почему?" и "Откуда?". Или Я не просто придираюсь к Мелочам?
Второй Способ сейчас буду пробовать…

_________________
Не существует абсолютно работающих Систем, но иногда встречаются (ещё) недоломанные…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Сб 29 окт, 2016 5:02 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2255
собственно, все расписано ранее, но если Вам нравится мучаться и изобретать
костыли, никто не против.

Тут трогаю, тут не трогаю...

У Вас событие LINK_UP - на него реакция из двух
действий: dhclient и затем ifconfig alias, что тут еще изобретать?
заменяете запуск dhclient На свой скрипт из которого стартуете dhclient и затем ifconfig

Собственно, проделайте "лабораторную" работу и выбирите наиболее
удачный способ:

1) запуск dhclient ... && ifconfig из /etc/devd.conf
или запуск myscript из /etc/devd/conf: dhclient + ifconfig

2) dhcp-hook

3) статика на msk0 и dhclient на alias ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Сб 29 окт, 2016 10:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 28 окт, 2016 6:08 pm
Сообщения: 7
Откуда: Москва
lavr писал(а):
Есть еще один вариант, imho, менее удобный (подумал... а может более удобный):
/sbin/dhclient - всегда вызывает /sbin/dhclient-script, последний в свою очередь,
смотрит наличие /etc/dhclient-enter-hooks и выполняет его - прочитайте
man dhclient-script и жизнь станет проще.

Так что man в руки и любой из вариантов.

Всё таки Второй Вариант кажется Мне более кошерным. Как Я и хотел: ничего не изменять в Стандартных Файлах – только добавить Один Failик для Своих Нужд. Apache, кстати, конфигурится по такому же Принципу. Теперь можно даже /etc/rc.conf оставить в покое, а то Я как-то пару месяцев назад забыл там кавычку закрыть – так Система вообще не запускалась…
Короче, просто состряпал Файлик "/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" до самой Холодной Перезагрузки но Это уже совсем другая История…
Узнал много Нового. Всем Спасибо!
lavr писал(а):
Ах да, третий вариант - купить карту на Realtek'е

Не подходит по ряду Причин. Первая: покрутив NetBook, который у Меня притворяется Серваком, Я с первого взгляда не обнаружил Разъёмов ни PCI, ни PCI-Express… Со второго взгляда – та же фигня…

_________________
Не существует абсолютно работающих Систем, но иногда встречаются (ещё) недоломанные…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Вс 30 окт, 2016 9:12 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 28 окт, 2016 6:08 pm
Сообщения: 7
Откуда: Москва
На Практике выяснилось, что без Надобности не сто́ит лишний раз выполнять Команду "ifconfig msk0 alias…", т.к. при Этом происходит КраткоВременный отвал Интерфейса. А во Время Штатной Работы Сервера (по крайней мере, у Меня) DHClient вывывает этот Скрипт каждые 30 Минут.
В случае Нагрузки на Сеть при каждом выполнении Команды "ifconfig msk0 alias 192.168.1.1/29" теряется по 1315 Пакетов. Тестирование проводилось Pingом в режиме Флуда с Соседней Машины (Linux Mint 4.4.0-45-generic x64). Перед Тестированием во FreeBSD было сброшено Ограничение на Количество ICMP-Ответов на Ping "sysctl net.inet.icmp.icmplim=0".
Код:
sudo ping -c 262144 -s 1472 -l 128 -f 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 1472(1500) bytes of data.
...............                                                               
--- 192.168.1.1 ping statistics ---
262144 packets transmitted, 262129 received, 0% packet loss, time 33540ms
rtt min/avg/max/mdev = 0.634/1.852/74.038/0.933 ms, pipe 84, ipg/ewma 0.127/1.756 ms
Transmitted−Received=262144−262129=15. Условия Теста, конечно, жёсткие, но, как говорится, C'est La Vie. Для устранения этого досадного недоразумения Скрипт "/etc/dhclient-exit-hooks" был немного переработан, так что если, вдруг, Кому-нибудь понадобится, то просба брать Последнюю Версию:
Код:
#!/bin/sh
#
# The Local NetWork Configuration Script. v. 1.3. 30.10.2016.
# 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
  if $IFCONFIG_CMD "${interface}" | grep --ignore-case --only-matching "INet[^0-9]*${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}\" was already assigned to \"${interface}\" during \"${reason}\"."
   else
    $IFCONFIG_CMD "${interface}" alias "${LocalIP}/${LocalBt}"
    E=$?
    if [ "${E}" == "0" ]
     then
      if $IFCONFIG_CMD "${interface}" | grep --ignore-case --only-matching "INet[^0-9]*${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
     else
      warn "Can not assign Local IP \"${LocalIP}\" to \"${interface}\" during \"${reason}\". $IFCONFIG_CMD returned \"${E}\"."
    fi
   unset E
  fi
fi
unset LocalAd LocalIP LocalBt

_________________
Не существует абсолютно работающих Систем, но иногда встречаются (ещё) недоломанные…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Теряется ifconfig_msk0_alias0
СообщениеДобавлено: Ср 28 дек, 2016 10:17 am 
Не в сети

Зарегистрирован: Ср 05 окт, 2016 7:07 pm
Сообщения: 121
Откуда: Санкт-Петербург
я делал чуть хитрее. мне надо было получить адрес на одном из vlan-интерфейсов, но без маршрута по умолчанию и т.п. плюс сервер отвечает только определённому vendor-id, а стандартный клиент FreeBSD не умеет подставлять vendor-id.
написал скрипт, на базе утилиты dhcdrop, который посылает один запрос со своим MAC, парсю ответ и делаю ifconfig с этим адресом. скрипт запускается по cron через каждые x/3 минут, где x - время жизни лизы DHCP сервера.

потери пакетов после ifconfig не проверял, но в таком случаем можно проверять текущий адрес и если он не изменился, то просто ничего не делать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Google Feedfetcher


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика