В период свирепой удаленки котировки мамкиных админов локалхоста выросли и скоро могут достигнуть суровых Одминов трансконтинентальных магистралей. Ну тех, которые бородатые в свитерах с оленями. На наши же хрупкие плечи возлегла обязанность обеспечения непрерывного онлайна. Для этого нужен надежный провайдер, а лучше два. Желательно один со шлангом в подвал, второй - на чердак. Ибо не затопят, так сломают. И провов за месяц я перебрал больше чем женщин перед первой женитьбой (данная интимная подробность разглашена дабы эмоционально акцентировать муки выбора).
Вот свершилось, в домашний сервак воткнуто два относительно надежных провода - основной толстый задорого и резерв пожиже. Оказалось, что прогресс не стоит на месте. И теперь даже если затребуешь у прова публичную статику, то она все равно будет выдаваться по dhcp. Мне триста лет, я выполз из тьмы (C). Еще это все надо маршрутизировать, желательно не вручную. И снаружи должно быть доступно, поскольку админ мамкин не постоянно и иногда на работе.
В таких случаях, я слышал, все админы пишут скрипты. Но редко когда их показывают. То-ли от стыда, то-ли для поддержания ЧСВ. В моем случае свезло и получилось украсть идею тута. Далее творчески ее развить получилось тоже.
Что делает получившееся:
- При подъеме первого из интерфейсов локалки загружает правила nftables. (Про него будет ниже)
- По событию dhclient для внешних интерфейсов манипулирует с таблицами и правилами iproute2.
- Препятствует принудительному добавлению default route в main для всех внешних интерфейсов кроме первого.
- С оказией формирует список адресов, которые будут пинговаться для определения рабочести внешних интерфейсов.
- Периодически и по событиям dhcp формирует список рабочих внешних интерфейсов.
- При необходимости меняет default route в main на первый рабочий интерфейс.
- Несколько раз мерзко пищит спикером порядковый номер интерфейса при смене маршута, при отсутствии доступных интерфейсов - заходится еще более мерзким писком.
- Ведет свой лог. (чуть не написал "блог")
За файервол: В процессе противоестественного общения с первым провайдером (чинил две недели - не починил) было скучно. Отчего были изучены nftables. Оказалось что их маскарад работает как не шустрее snat от iptables. Поэтому куча кода по манипуляции с ними была выкинута, хотя места оборудованные остались. Пример правил для nft включен.
Хуки dhclient отрабатываются врапперами, запускающими bash. Ибо в dhcient-script #!/bin/sh и source. Изначально было нахулиганено исправление на #!/bin/bash и симлинки, и даже работало. Но в оконцовке решил более внимательно отнестись к чужой интеллектуальной собственности.
Там много лишнего мною понагороженно в части обработки хуков и сохранения всякческих значений. Оно может пригодиться при расширении и углублении, посему пусть пока будет.
Для непосредственной фиксации выдергивания/перерезания проводов необходим желателен ifplugd. (Тут Поттеринг таки догнал.) Кто ж знал, что udev link up/down сама не умеет.
Возня с днс-ами у меня отрублена. (Файлика в поставке нет, но он гуглится.) Юзаю dnscrypt, он как выяснилось, весьма лояльно относится к появлению и исчезновению интерфейсов. Даже рестартовать не надо.
Ну мы-то все знаем: Чихнул - выкладывай на гитхаб!
Ну и вот: https://github.com/dimbor-ru/network-scripts
А теперь предлагаю бородатым админам дружно повозить меня мордой по столу. С высоты своего сетевого опыта и вообще, с целью наущения и недопущения.