[freebsd] default router для wlan со статической ip

Eugene Grosbein eugen at grosbein.net
Fri Apr 17 16:54:28 EEST 2020


17.04.2020 18:39, Nick Kostirya wrote:

> Привет.
> Подскажите, пожалуйста, как правильно указывать default router для wlan со статической ip.
> 
> В /etc/rc.conf прописано.
> defaultrouter="192.168.0.1"
> ifconfig_wlan0="WPA inet 192.168.0.50 netmask 255.255.255.0"
> 
> На момент запуска routing wpa_supplicant еще не успевает поднять сеть и получаю в лог:
> add net default: gateway 192.168.0.1 fib 0: Network is unreachable
> 
> DHCP с привязкой к MAC использовать не хочется, так как это USB-WiFi их всегда путаешь.

К сожалению, из штатных средств есть только возможность создать скрипт /etc/start_if.wlan0
такого содержания:

#!/bin/sh

waitfor_wlanif() {
  local _i _s

  ifconfig_up "$1"
  _i=30
  while [ $_i -gt 0 ]
  do
    _s=$(ifconfig "$1" | awk '/status:/ {print $2}')
    [ "$_s" = associated ] && break
    _i=$(($_i - 1))
    sleep 1
  done
  return 0
}
waitfor_wlanif "$1"
# EOF

При загрузке, обнаружив скрипт с таким именем, системные скрипты вызывают его
через команду "точка" .

Поэтому у него есть доступ к внутренним функциям системной библиотеки скриптов
и он может вызвать функцию ifconfig_up для интерфейса, которая уже штатным образом
конфигурирует интерфейс и запускает для него wpa_supplicant как обычно.
После этого скрипт до 30 секунд ждёт, пока суппликант не подключится к точке доступа
и после этого уже маршруты добавятся нормально.

У этого решения есть небольшой косячок: ifconfig_up будет вызван повторно штатными
скриптами и запустит wpa_supplicant ещё раз, но вторая копия увидит, что для интерфейса
суппликант уже запущен, ругнётся на консоль и выйдет, так что мешать не будет.



More information about the freebsd mailing list