Имеется такая задача, к компьютеру в локальной сети подключается 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