Как запрограммировать поведение сетевых интерфейсов

Имеется такая задача, к компьютеру в локальной сети подключается USB WiFi адаптер, при этом компьютер автоматически превращается в прозрачный мост для подключемых WiFi устрайств(ноутбуки). А после отключения адаптера, компьютер должен восстановить своё исходное состояние. Оказывается это делается довольно просто, по крайней мере в *Debian подобных системах, вот тут инструкция по настройке псевдошлюза на ручном управлении

В файле /etc/network/interfaces находятся описания настроек интерфейсов, а так же способы запуска

Например такая запись, заставляет автоматически включать eth0 и настраивать его по DHCP

auto eth0
iface eth0 inet dhcp
   post-down ip addr flush dev eth0 dhcp # удаляем привязанный IP

Ещё там есть интересная опция allow-hotplug которая срабатывает в момент подключения устаройства с заданным именем, это опция позволяет решить поставленную задачу, нужно всего лишь чётко представить последовательность действий нужных для переключения режимов, а так же использовать функции запуска скриптов в соответствии со стадией жизни интерфейса. В моём случае в файл /etc/network/interfaces появится вот такая конструкция

iface wlan0 inet manual
    pre-up ifdown eth0 # стопим eth0, нужно для включения его в bridge
    pre-up brctl addbr bridge
    pre-up brctl addif bridge eth0
    pre-up brctl addif bridge wlan0
    pre-up ifconfig eth0 up
    pre-up dhclient3 bridge
    pre-up ifconfig wlan0 down
    pre-up iwconfig wlan0 mode ad-hoc freq 2.437GH essid ffhome channel 6
    pre-up ifconfig wlan0 up
    post-down brctl delif bridge eth0
    post-down ifconfig bridge down # стопим bridge, нужно для его удаления
    post-down brctl delbr bridge
    post-down ifup eth0 # снова включаем eth0
allow-hotplug wlan0

Здесь чётко видна последовательность которая слегка напоминает программу на Python - объявление функции и даже отступы. Итак

Объявляем новое соединение wlan0 и последовательность событий-действий связанных с ним, я использую только 2 из низ, 1 собитие происходит перед инициализацией интерфейс

В этот момент нужно остановить eth0, сбросить у него IP, подготовить и запустить мост, а затем иницилизировать WiFi адаптер в режиме точки

А в после отключения WiFi адаптера необходимо удалить мост и восстановить eth0. В принципе всё просто, особенно для питонёров. ниже "названия" интерфейса располагаются простые команды которые запускую его, а после выключения востанавливают состояние. Очевидно, что подобный "код" можно легко оптимизировать, например выделить "функцию" управленияе мостом в отдельную секцию

Ну а опция allow-hotplug инициализирует интерфейс wlan0 в момент когда ядро его определяет

Комментариев 0
Нужна авторизация с помощью
Об авторе
Илья Илья

меня можно найти тут