Содержание
Раздача Yota через WiFi
Как получить доступ в Интернет через USB-модем Yota сразу с нескольких устройств? Например, в машине хочется и чтобы почта приходила на телефон, и чтобы пробки подкачивались в навигатор. Ответ - подключить модем к маршрутизатору и раздавать Интернет через WiFi! Есть даже устройства, предназначенные именно для такой задачи, например, микророутер TP-Link TL-MR3020. Он работает, но довольно часто подвисает, особенно если подключаться на максимальной скорости или с двух и более устройств. В попытке избавиться от проблем я решил заменить стандартную прошивку роутера на OpenWRT и кратко описать процесс.
Роутер TP-Link TL-MR3020 питается от 5V через стандартный miniUSB-порт. Для подключения модема есть обычный USB-разъём. Роутер имеет несколько режимов работы: раздача Интернета с модема (режим 3G) или с витой пары (режим AP). Режимы переключаются тумблером.
Рабочую версию прошивки OpenWRT для TL-MR3020 можно взять тут.
Процесс перепрошивки и сопутствующие вопросы описаны здесь.
Безопасность
После установки и перезагрузки у роутера будет работать только проводной интерфейс. Адрес роутера: 192.168.1.1, пароль у root пустой. Первым делом нужно задать пароль для root, а лучше настроить аутентификацию по ключу.
После завершения всех настроек рекомендую полностью отключить web-интерфейс:
/etc/init.d/uhttpd stop /etc/init.d/uhttpd disable
Подключение модема
Для установки необходимых пакетов необходимо предоставить роутеру выход в сеть. Можно, например, подключить его к своей домашней WiFi сети. Пакеты, которые необходимо установить, чтобы определился USB-модем Yota1):
opkg update opkg install kmod-usb-net kmod-usb-net-asix kmod-usb-net-cdc-ether kmod-usb-net-rndis
Для того, чтобы работал йотовский captive portal (перехватывающая страница приветствия), в конфиг /etc/config/dhcp
нужно добавить строку2):
- /etc/config/dhcp
config dnsmasq ... list rebind_domain yota.ru # Whitelist domain to allow Yota captive portal to work ...
Тумблер переключения режимов
Очень удобно иметь возможность переключать режим работы роутера с помощью тумблера. Например, если надо расшарить проводной интернет через WiFi, то в стандартной прошивке достаточно установить переключатель в положение AP и подключить провод от провайдера в разъём роутера. Чтобы получить такой же еффект с прошивкой OpenWRT необходимы дополнительные действия.
Пусть режим работы с USB-модемом будет 3G, а режим раздачи проводного интернета через WiFi - AP.
Тогда схема работы в режиме 3G:
- зона WAN = интерфейс yota (устройство eth1) получает адрес по DHCP
- зона LAN = на интерфейсе lan (мост из устройств eth0 + wlan0) раздаются адреса по DHCP
- маскарадинг из LAN в WAN
В режиме AP:
- зона WAN = интерфейс wan (устройство eth0) получает адрес по DHCP
- зона LAN = на интерфейсе wifi (новое устройство wifi, вместо wlan0) раздаются адреса по DHCP
- маскарадинг из LAN в WAN
Конфигурационные файлы
Копируем конфиги:
cd /etc/config cp dhcp dhcp_3g; cp dhcp dhcp_ap cp firewall firewall_3g; cp firewall firewall_ap cp network network_3g; cp network network_ap cp wireless wireless_3g; cp wireless wireless_ap
В конфиге dhcp_ap относительно dhcp_3g меняем:
--- dhcp_3g 2013-01-04 06:31:08.064504047 +0400 +++ dhcp_ap 2013-01-04 06:05:44.920527649 +0400 @@ -20,8 +20,7 @@ #list notinterface lo #list bogusnxdomain '64.94.110.11' - list rebind_domain yota.ru # Whitelist domain to allow Yota captive portal to work config dhcp lan - option interface lan + option interface wifi option start 100 option limit 150
В конфиге firewall_ap относительно firewall_3g меняем:
--- firewall_3g 2013-01-04 06:06:01.332527394 +0400 +++ firewall_ap 2013-01-04 06:06:01.336527394 +0400 @@ -8,5 +8,5 @@ config zone option name 'lan' - option network 'lan' + option network 'wifi' option input 'ACCEPT' option output 'ACCEPT' @@ -15,5 +15,5 @@ config zone option name 'wan' - option network 'yota' + option network 'wan' option input 'REJECT' option output 'ACCEPT'
В конфиге network_ap относительно network_3g меняем:
--- network_3g 2013-01-04 06:40:59.008494893 +0400 +++ network_ap 2013-01-04 06:37:09.292498451 +0400 @@ -6,12 +6,10 @@ option netmask '255.0.0.0' -config interface 'lan' - option type 'bridge' - option ifname 'eth0' +config interface 'wifi' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' -config interface 'yota' - option ifname 'eth1' +config interface 'wan' + option ifname 'eth0' option proto 'dhcp'
В конфиге wireless_ap относительно wireless_3g меняем:
--- wireless_3g 2013-01-04 06:06:18.996527119 +0400 +++ wireless_ap 2013-01-04 06:06:19.000527119 +0400 @@ -19,4 +19,4 @@ option mode 'ap' option ssid 'kolanp' - option network 'lan' + option network 'wifi'
Скрипты включения режимов
Конфигурационные файлы готовы. Теперь, чтобы переключиться в режим AP, нужно перезаписать конфиги и перезапустить сервисы. Например, таким скриптом:
- /sbin/sw_ap_mode
#!/bin/sh /bin/cp -f /etc/config/dhcp_ap /etc/config/dhcp /bin/cp -f /etc/config/firewall_ap /etc/config/firewall /bin/cp -f /etc/config/network_ap /etc/config/network /bin/cp -f /etc/config/wireless_ap /etc/config/wireless /bin/sync /etc/init.d/network reload /etc/init.d/firewall restart /etc/init.d/dnsmasq restart
Чтобы вернуться обратно в режим 3G, аналогичный скрипт:
- /sbin/sw_3g_mode
#!/bin/sh /bin/cp -f /etc/config/dhcp_3g /etc/config/dhcp /bin/cp -f /etc/config/firewall_3g /etc/config/firewall /bin/cp -f /etc/config/network_3g /etc/config/network /bin/cp -f /etc/config/wireless_3g /etc/config/wireless /bin/sync /etc/init.d/network reload /etc/init.d/firewall restart /etc/init.d/dnsmasq restart
Работа с кнопками
Далее, следуя инструкциям на сайте OpenWRT по работе с кнопками3) разрешим запуск скриптов из /etc/hotplug.d/
при переключении тумблера. Убираем значок «^» перед button в файле /etc/hotplug2.rules
:
- /etc/hotplug2.rules
... SUBSYSTEM ~~ (^net$|^input$|button$|^usb$|^ieee1394$|^block$|^atm$|^zaptel$|^tty$) { exec /sbin/hotplug-call %SUBSYSTEM% } ...
Следующий шаг - определить как система идентифицирует кнопки. Для этого создадим каталог:
mkdir -p /etc/hotplug.d/button
Добавим туда файл:
- /etc/hotplug.d/button/buttons
#!/bin/sh logger $BUTTON logger $ACTION
Теперь можно переключить тумблер туда-сюда и посмотреть лог через logread
:
logread | tail Jan 1 00:01:15 OpenWrt user.notice root: BTN_1 Jan 1 00:01:15 OpenWrt user.notice root: pressed Jan 1 00:01:16 OpenWrt user.notice root: BTN_0 Jan 1 00:01:16 OpenWrt user.notice root: released
Как видно из лога BTN_0 и BTN_1 - названия кнопок (состояний тумблера) каким его видит система. Изменения состояния сопровождаются событиями pressed и released. После определения кнопок файл /etc/hotplug.d/button/buttons
можно удалить.
rm /etc/hotplug.d/button/buttons
Добавляем скрипт /etc/hotplug.d/button/00-button
для работы с кнопками:
- 00-button
#!/bin/sh . /lib/functions.sh do_button () { local button local action local handler local min local max config_get button $1 button config_get action $1 action config_get handler $1 handler config_get min $1 min config_get max $1 max [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && { [ -z "$min" -o -z "$max" ] && eval $handler [ -n "$min" -a -n "$max" ] && { [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler } } } config_load system config_foreach do_button button
Для активации кнопок надо выполнить команды:
uci add system button uci set system.@button[-1].button=BTN_0 uci set system.@button[-1].action=pressed uci set system.@button[-1].handler="/sbin/sw_ap_mode" uci commit system uci add system button uci set system.@button[-1].button=BTN_1 uci set system.@button[-1].action=released uci set system.@button[-1].handler="/sbin/sw_3g_mode" uci commit system
И перезагрузить роутер.
Ссылки
Использованные материалы:
На будущее
3G-модем
У меня нет под рукой именно 3G-модема, поэтому данные настройки будут работать только с Yota LTE «свистком». Возможно для 3G-модемов в кофигурационные файлы достаточно будет добавить интерфейс ppp, но может быть понадобятся какие-то дополнительные телодвижения.
Батарейка
К роутеру можно добавить батарею, тогда получится автономная точка доступа. Например, такую: http://dx.com/p/portable-usb-rechargeable-1400mah-emergency-battery-pack-29590