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
Сообщения: 822
Откуда: СССР, Красноярск
А если наоборот?
Первый статичный, а алиас динамичный.


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

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2201
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
Сообщения: 2201
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
Сообщения: 2201
собственно, все расписано ранее, но если Вам нравится мучаться и изобретать
костыли, никто не против.

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

У Вас событие 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
Сообщения: 101
Откуда: Санкт-Петербург
я делал чуть хитрее. мне надо было получить адрес на одном из vlan-интерфейсов, но без маршрута по умолчанию и т.п. плюс сервер отвечает только определённому vendor-id, а стандартный клиент FreeBSD не умеет подставлять vendor-id.
написал скрипт, на базе утилиты dhcdrop, который посылает один запрос со своим MAC, парсю ответ и делаю ifconfig с этим адресом. скрипт запускается по cron через каждые x/3 минут, где x - время жизни лизы DHCP сервера.

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


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

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


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

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


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

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