Инструменты пользователя

Инструменты сайта


blog:2013:0103_openwrt_yota

Раздача 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

blog/2013/0103_openwrt_yota.txt · Последнее изменение: 2022-02-19 18:16 — 127.0.0.1