Задорная удаленка на костылях (multihomed страдания)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модератор: SLEDopit

Ответить
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Задорная удаленка на костылях

Сообщение dimbor »

Поддерживания традиции писать каждый новый год новую фигню пост.

В период свирепой удаленки котировки мамкиных админов локалхоста выросли и скоро могут достигнуть суровых Одминов трансконтинентальных магистралей. Ну тех, которые бородатые в свитерах с оленями. На наши же хрупкие плечи возлегла обязанность обеспечения непрерывного онлайна. Для этого нужен надежный провайдер, а лучше два. Желательно один со шлангом в подвал, второй - на чердак. Ибо не затопят, так сломают. И провов за месяц я перебрал больше чем женщин перед первой женитьбой (данная интимная подробность разглашена дабы эмоционально акцентировать муки выбора).

Вот свершилось, в домашний сервак воткнуто два относительно надежных провода - основной толстый задорого и резерв пожиже. Оказалось, что прогресс не стоит на месте. И теперь даже если затребуешь у прова публичную статику, то она все равно будет выдаваться по dhcp. Мне триста лет, я выполз из тьмы (C). Еще это все надо маршрутизировать, желательно не вручную. И снаружи должно быть доступно, поскольку админ мамкин не постоянно и иногда на работе.

В таких случаях, я слышал, все админы пишут скрипты. Но редко когда их показывают. То-ли от стыда, то-ли для поддержания ЧСВ. В моем случае свезло и получилось украсть идею тута. Далее творчески ее развить получилось тоже.

Что делает получившееся:
  • При подъеме первого из интерфейсов локалки загружает правила nftables. (Про него будет ниже)
  • По событию dhclient для внешних интерфейсов манипулирует с таблицами и правилами iproute2.
  • Препятствует принудительному добавлению default route в main для всех внешних интерфейсов кроме первого.
  • С оказией формирует список адресов, которые будут пинговаться для определения рабочести внешних интерфейсов.
  • Периодически и по событиям dhcp формирует список рабочих внешних интерфейсов.
  • При необходимости меняет default route в main на первый рабочий интерфейс.
  • Несколько раз мерзко пищит спикером порядковый номер интерфейса при смене маршута, при отсутствии доступных интерфейсов - заходится еще более мерзким писком.
  • Ведет свой лог. (чуть не написал "блог")
Хреновина написана на баше без использования внешних программ (кроме ip, разумеется). Не совсем unix way, но быстрее раз в пять получается. Все эти ваши системды остались за бортом. Ибо серверу - серверово. Другая крайность - пятипортовые китайские зверьки - не затронута тоже. Птичку жалко. Да и если у железки хватит мозгов/ресурсов молотить два гигабитных потока, то и баш под опенврт туда встанет. Да еще там вроде есть ubus, которая множество вещей упрощает.

За файервол: В процессе противоестественного общения с первым провайдером (чинил две недели - не починил) было скучно. Отчего были изучены 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

А теперь предлагаю бородатым админам дружно повозить меня мордой по столу. С высоты своего сетевого опыта и вообще, с целью наущения и недопущения.
Последний раз редактировалось dimbor 02.01.2021 16:12, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Задорная удаленка на костылях

Сообщение Bizdelnick »

dimbor писал:
02.01.2021 06:48
Для непосредственной фиксации выдергивания/перерезания проводов необходим ifplugd. (Тут Поттеринг таки догнал.) Кто ж знал, что udev link up/down сама не умеет.
А если линк есть, а интернет потерялся?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Задорная удаленка на костылях

Сообщение dimbor »

Bizdelnick писал:
02.01.2021 14:39
А если линк есть, а интернет потерялся?
Все будет но попозжа. Описывал же. Отвалился/сменился ip - проверяем пингами, меняем.
Залипло - то же самое, но по крону. Три минуты вроде стоит сейчас.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Задорная удаленка на костылях

Сообщение Bizdelnick »

dimbor писал:
02.01.2021 06:48
если у железки хватит мозгов/ресурсов молотить два гигабитных потока, то и баш под опенврт туда встанет
В OpenWRT есть mwan3, там велосипедить не нужно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Задорная удаленка на костылях

Сообщение dimbor »

Bizdelnick писал:
02.01.2021 15:40
В OpenWRT есть mwan3, там велосипедить не нужно.
Буду посмотреть. Может труды мои были совсем напрасными и все можно было стибрить оттудова.
Спасибо сказали:
dimbor
Ведущий рубрики
Сообщения: 1569
Статус: Подвинутый участник

Re: Задорная удаленка на костылях

Сообщение dimbor »

Глянул одним глазом. Сильно openwrt-специфичная вещь. Мои костылики поближе к классике будут. Функционально похоже плюс балансировка трафика хитровыделаная. Средствами ip+tc+nft еще и не то замутить можно - доков вагон гуглится. Задачи такой пока нет. Но почему, скажем, я рабочие интерфейсы всегда списком получаю, тогда как используется только первый. А чтобы иметь возможность вышеперечисленных извращений. В таблицы маршрутизации, опять-же, throw локальные автоматом тычу для возможности заворачивать туда хосты из локалки. Пытаюсь, кароч, думать о будущем и не переписывать потом с нуля.
Спасибо сказали:
Ответить