Задача: с планшета ipad mini wifi получить доступ в интернет и к внутренней сети организации через openvpn через wifi в гостинице и, при отсутствии wifi, через сеть 3G.
Как известно, для iOS нет официального openvpn клиента, и, судя по форуму openvpn (например, https://forums.openvpn.net/topic4568.html) в ближайшее время не появится.
Один вариант решения: jailbreak -> Cydia -> GuizmOVPN.
Этот вариант описан на сайте разработчика http://www.guizmovpn.com/
Но для iOS 6 jailbreak пока не существует, не хочется делать jail, и у меня ipad mini wifi без 3G модуля.
Второй вариант: роутер с запущенным ovpn клиентом и с возможностью коннектиться как через 3G модем, так и через wifi адаптер. Этот вариант и реализован.
Вот как выглядит :
Вот так подаю доп. питание на hub :
По железу:
роутер TP-Link MR3020 (выбран из-за небольшого размера и возможности установить openwrt)/
модем ZTE MF190 от Биланта, разлоченный и перешитый на MTS (как сделать, описано в http://4pda.ru/forum/index.php?showtopic=277903)
Замечание: на прошивке от Movistar не смог заставить модем работать под openwrt: (но, м.б. это мои кривые руки /и нежелание долго ковыряться/)
wifi адаптер, используемый в качестве клиента для подключения к точке доступа в гостинице: ASUS USB-N13 (Ralink rt2870)
usb hub - купил по принципу : цена < 300р и возможность работать с SD/MicroSD картами (на всякий случай :) )
доп. диск в моем случае SD 2Gb, но, естественно, можно использовать usb flash drive.
Как установить openwrt на роутер, описано в http://wiki.openwrt.org/toh/tp-link/tl-mr3020.
Я установил прошивку Attitude Adjustment Beta 2 snapshot (рекоммендуют ее). Но, скорее всего, проблем не будет и с lastest trunk snapshot. Выполнил начальную конфигурацию (доступ в интернет с lan порта (можно и с wlan, непринципиально)). Сделал это через web-интерфейс (так проще) Network->Interfaces->LAN, Network->Firewall.
Заходим telnet-ом на роутер и проверяем, что мы видим удаленные сайты (ping www.ru)
Теперь, собственно, кастомизация:
Замечание: чтобы посмотреть лог в случае проблем, можно использовать команду logread.
1.Т.к. нам нужны доп.пакеты, читаем, как они устанавливаются http://wiki.openwrt.org/doc/packages.
Замечание1: для установки пакетов, нужен доступ в интернет с роутера (см.выше).
Замечание2: После рестарта роутера делаем opkg update (загрузка списка пакетов в tmpfs)
Замечание3: Устанавливаем нужный пакет в NAND командой opkg install <pkg>.
Если нужно устанавливать пакет на usb (а это будет нужно), читаем http://wiki.openwrt.org/doc/recipes/install.packages.on.usb-stick. Чтобы указать, что пакет нужно установить в /opt, указываем opkg install <pkg> -d opt.
Вот /etc/opkg.conf с добавленным /opt в качестве места назначения для установки.
====
src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09-beta2/ar71xx/generic/packages
dest root /
dest ram /tmp
dest opt /opt
lists_dir ext /var/opkg-lists
option overlay_root /overlay
====
Но, чтобы устанавливать пакеты в /opt (flash drive), его надо сначала создать (см. ниже).
Замечание 4: пакеты, содержащие модули ядра, лучше ставить в NAND (а модули для поддержки usb storage только в NAND) чтобы не иметь проблем с их автоматической загрузкой при старте роутера.
Как известно, для iOS нет официального openvpn клиента, и, судя по форуму openvpn (например, https://forums.openvpn.net/topic4568.html) в ближайшее время не появится.
Один вариант решения: jailbreak -> Cydia -> GuizmOVPN.
Этот вариант описан на сайте разработчика http://www.guizmovpn.com/
Но для iOS 6 jailbreak пока не существует, не хочется делать jail, и у меня ipad mini wifi без 3G модуля.
Второй вариант: роутер с запущенным ovpn клиентом и с возможностью коннектиться как через 3G модем, так и через wifi адаптер. Этот вариант и реализован.
Вот как выглядит :
Вот так подаю доп. питание на hub :
По железу:
роутер TP-Link MR3020 (выбран из-за небольшого размера и возможности установить openwrt)/
модем ZTE MF190 от Биланта, разлоченный и перешитый на MTS (как сделать, описано в http://4pda.ru/forum/index.php?showtopic=277903)
Замечание: на прошивке от Movistar не смог заставить модем работать под openwrt: (но, м.б. это мои кривые руки /и нежелание долго ковыряться/)
wifi адаптер, используемый в качестве клиента для подключения к точке доступа в гостинице: ASUS USB-N13 (Ralink rt2870)
usb hub - купил по принципу : цена < 300р и возможность работать с SD/MicroSD картами (на всякий случай :) )
доп. диск в моем случае SD 2Gb, но, естественно, можно использовать usb flash drive.
Как установить openwrt на роутер, описано в http://wiki.openwrt.org/toh/tp-link/tl-mr3020.
Я установил прошивку Attitude Adjustment Beta 2 snapshot (рекоммендуют ее). Но, скорее всего, проблем не будет и с lastest trunk snapshot. Выполнил начальную конфигурацию (доступ в интернет с lan порта (можно и с wlan, непринципиально)). Сделал это через web-интерфейс (так проще) Network->Interfaces->LAN, Network->Firewall.
Заходим telnet-ом на роутер и проверяем, что мы видим удаленные сайты (ping www.ru)
Теперь, собственно, кастомизация:
Замечание: чтобы посмотреть лог в случае проблем, можно использовать команду logread.
1.Т.к. нам нужны доп.пакеты, читаем, как они устанавливаются http://wiki.openwrt.org/doc/packages.
Замечание1: для установки пакетов, нужен доступ в интернет с роутера (см.выше).
Замечание2: После рестарта роутера делаем opkg update (загрузка списка пакетов в tmpfs)
Замечание3: Устанавливаем нужный пакет в NAND командой opkg install <pkg>.
Если нужно устанавливать пакет на usb (а это будет нужно), читаем http://wiki.openwrt.org/doc/recipes/install.packages.on.usb-stick. Чтобы указать, что пакет нужно установить в /opt, указываем opkg install <pkg> -d opt.
Вот /etc/opkg.conf с добавленным /opt в качестве места назначения для установки.
====
src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09-beta2/ar71xx/generic/packages
dest root /
dest ram /tmp
dest opt /opt
lists_dir ext /var/opkg-lists
option overlay_root /overlay
====
Но, чтобы устанавливать пакеты в /opt (flash drive), его надо сначала создать (см. ниже).
Замечание 4: пакеты, содержащие модули ядра, лучше ставить в NAND (а модули для поддержки usb storage только в NAND) чтобы не иметь проблем с их автоматической загрузкой при старте роутера.
2. подключаем доп.раздел на флешке и монтируем в /opt.
Как делается, описано в http://wiki.openwrt.org/doc/howto/usb.essentials
и http://wiki.openwrt.org/doc/howto/usb.storage
В моем случае я установил поддержку для usb2.0 (лишние модули лучше не ставить, т.к. место в NAND ограничено) и поддержку ext2 (kmod-fs-ext4).
На флешке предварительно создал раздел и на нем ext2fs на линуксовой машине (так было проще).
Проверил, что раздел монтируется (dmesg -> смотрим название устройства (в моем случае /dev/sda1), mount /dev/sda1 /mnt)
Теперь указываем, что этот раздел нужно монтировать в /opt при старте роутера:
Это деляется либо правкой /etc/config/fstab, либо из luci (System -> Mount points)
Вот содержание /etc/config/fstab
====
config global automount
option from_fstab 1
option anon_mount 1
config global autoswap
option from_fstab 1
option anon_swap 0
config mount
option target /opt
option device /dev/sda1
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0
====
Перегружаемся, проверяем, что /dev/sda1 смонтирован на /opt
root@tpl3020:/# mount
....
/dev/sda1 on /opt type ext2 (rw,relatime,user_xattr,barrier=1)
Теперь пакеты можно устанавливать как в nand, так и на flash drive.
Чтобы не иметь проблем с загрузкой библиотек с /opt/lib и /opt/usr/lib и с путями, правим
/etc/profile:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/usr/bin:/opt/usr/sbin:/opt/usr/local/bin
export LD_LIBRARY_PATH=/opt/usr/lib:/opt/lib
3. настраиваем wifi адаптер, который будет клиентом
Для этого устанвливаем kmod-rt2x00-usb, kmod-rt2800-usb, wireless-tools (их можно поставить на /opt), перегружаемся и смотрим dmesg:
дожны быть строчки:
rt2x00usb 6848 1 rt2800usb
mac80211 252272 4 ath9k,rt2800lib,rt2x00usb,rt2x00lib
настраиваем /etc/config/wireless (добавляем radio1 и интерфейс wwan):
config wifi-device 'radio1'
option type 'mac80211'
option macaddr 'f4:6d:04:b1:8b:d7'
option hwmode '11ng'
option htmode 'HT20'
list ht_capab 'GF'
list ht_capab 'SHORT-GI-20'
list ht_capab 'SHORT-GI-40'
list ht_capab 'TX-STBC'
list ht_capab 'RX-STBC12'
option country 'US'
option txpower '12'
option disabled '0'
option channel '1'
config wifi-iface
option network 'wwan'
option ssid 'MY_AP' <- имя точки доступа, у которой мы будем клиентом
option encryption 'psk2' <- шифрование
option device 'radio1'
option mode 'sta' <- режим клиента
option bssid '90:F6:52:92:68:5E'
option key 'XXXXXXXXXX' <- ключ
настраиваем /etc/config/network
config interface 'wwan'
option proto 'dhcp' <- в моем случае адрес получаем по DHCP
настраиваем /etc/config/firewall
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wlan1 wwan'
перегружаемся.
После перезагрузки должны увидеть следующее:
root@tpl3020:/# ifconfig wlan1
wlan1 Link encap:Ethernet HWaddr F4:6D:04:B1:8B:D7
inet addr:192.168.10.103 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:190 errors:0 dropped:0 overruns:0 frame:0
TX packets:183 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:32
RX bytes:23056 (22.5 KiB) TX bytes:20258 (19.7 KiB)
На этом с wifi все. Нстройки можно делать и из luci.
Замечание: если мы вынимаем wifi адаптер из хаба, то настройки из конфигов никуда не деваются, они просто не используются.
4. настравиваем 3G модем.
Вместо wifi адаптера вставляем в hub модем (уже перешитый, см.выше) и перегружаемся.
Как настраивать модем, описано в http://wiki.openwrt.org/doc/recipes/3gdongle
Замечание1: chat, luci-proto-3g лучше всего ставить в NAND: они маленькие, и не будет проблем с путями и библиотеками. usb-modeswitch я поставил в /opt и сделал необх. линки на /usr/bin и т.д.
Замечание2: чтобы модем при старте роутера переключался в режим tty, в /etc/rc.local добавил:
export LD_LIBRARY_PATH=/opt/usr/lib:/opt/lib
/opt/usr/bin/usb_modeswitch -c /etc/usb_modeswitch.d/19d2\:0149 -v 19d2 -p 2000
Замечание3: можно еще поставить в /opt minicom для работы с модемом.
После перезагрузки должны увидеть (на прошивке MTS):
root@tpl3020:/# ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
на прошивке от Movistar у меня получилось 5 ttyUSB, и ни один не захотел работать.
Нам для использования нужен будет /dev/ttyUSB3.
Из luci Network->Interfaces (так проще) создаем новую сеть wan1 с интерфейсом 3g-wan1 с протоколом UMTS/GPRS/EV-DO
Из luci Network->Firewall добавляем сеть wan1 в зону wan.
перегружаемся.
После перезагрузки должны увидеть :
root@tpl3020:/# ifconfig 3g-wan1
3g-wan1 Link encap:Point-to-Point Protocol
inet addr:10.197.255.211 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:131 errors:0 dropped:0 overruns:0 frame:0
TX packets:133 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:10558 (10.3 KiB) TX bytes:10220 (9.9 KiB)
Модем настроили.
5. Настраиваем openvpn.
Устанавливаем kmod-tun
Устанавливаем openvpn в /opt
Дополнительно сделал:
root@tpl3020:/# ls -l /etc/init.d/openvpn
lrwxrwxrwx 1 root root 23 Dec 26 12:10 /etc/init.d/openvpn -> /opt/etc/init.d/openvpn
создал /opt/etc/openvpn/config/up.sh
#!/bin/sh
/usr/sbin/iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source $4
exit 0
создал /opt/etc/openvpn/config/down.sh
#!/bin/sh
/usr/sbin/iptables -t nat -D POSTROUTING -o tun0 -j SNAT --to-source $4
exit 0
Эти два скрипта для настройки NAT после установления соединения, т.к. клиент openvpn коннектится к серверу и получает у него некий алрес, с которого можно ходить в частную сеть, а пользователь коннектится к точке доступа и получает адрес, про который openvpn сервер в общем случае ничего не знает.
Как настраивать из консоли, описано в http://wiki.openwrt.org/doc/howto/vpn.openvpn.
Но, т.к. рулить с планшета удобнее через web морду (luci), лучше поставить luci-app-openvpn.
И тут нас подстерегает засада: в trunk нет этого пакета, т.к. он почему-то у разработчиков считается broken.
Я поступил так:
скачал с http://downloads.openwrt.org/ исходинки luci. http://downloads.openwrt.org/sources/luci-0.11%2bsvn9463.tar.gz
из архива вытащил applications/luci-openvpn и разложил то, что там было :
luasrc/controller/openvpn.lua -> /usr/lib/lua/luci/controller/
luasrc/model/cbi/openvpn* -> /usr/lib/lua/luci/model/cbi/
luasrc/view/openvpn/* -> /usr/lib/lua/luci/view/openvpn/
root/etc/config/openvpn_recipes -> /etc/config/openvpn_recipes
и создал пустой /etc/config/openvpn
После этого в luci повилась вкладка Services->OpenVPN. Настраивать клинт можно оттуда.
И самое главное, там есть кнопочка start/stop, позволяющая из GUI управлять vpn соединением.
Замечание: т.к. openvpn ставится на /opt, а при запуске uhttpd нет необходимых LD_LIBRARY_PATH и PATH, я добавил в /opt/etc/init.d/openvpn строчки:
=========
#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2011 OpenWrt.org
# Copyright (C) 2008 Jo-Philipp Wich
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
START=95
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
EXTRA_COMMANDS="up down"
LIST_SEP="
"
export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib
export PATH=$PATH:/opt/usr/bin:/opt/usr/sbin:/opt/usr/local/bin
.....
==========
Еще добавил в /opt/etc/init.d/openvpn в start_instance() для того, чтобы могли запускаться скрипты up.sh/down.sh
==========
service_start /usr/sbin/openvpn --syslog "openvpn($s)" --writepid "$SERVICE_PID_FILE" --script-security 3 $ARGS
==========
После конфигурирования клиента из luci в /etc/config/openvpn
получилось следующее:
config openvpn 'client_tun'
option nobind '1'
option float '1'
option client '1'
option comp_lzo '1'
option reneg_sec '0'
option dev 'tun'
option verb '3'
option persist_tun '1'
option persist_key '1'
option remote_cert_tls 'server'
option remote '111.111.222.222'
option proto 'tcp-client'
option port '1194'
option up '/opt/etc/openvpn/config/up.sh'
option down '/opt/etc/openvpn/config/down.sh'
option ca '/opt/etc/openvpn/keys/ca.crt'
option cert '/opt/etc/openvpn/keys/my.crt'
option key '/etc/openvpn/keys/my.key'
option tls_auth '/opt/etc/openvpn/keys/tls.key 1'
option tls_timeout '30'
option hand_window '160'
option enabled '1'
в /etc/config/network добавлен tun0 с именем openvpn.
config interface 'openvpn'
option proto 'none'
option ifname 'tun0'
в /etc/config/firewall я не создавал отдельную зону для openvpn (но можно и создать отдельную при желании):
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wan1 wlan1 openvpn wwan'
Вот скриншоты, как это выглядит в luci :
интерфейсы:
зоны в firewall:
openvpn клиент:
Если все правильно сконфигурировано, то при нажатии на кнопку start из luci, клиент должен запуститься и появиться инерфейс tun0 (см.рисунок выше).
root@tpl3020:/# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
и должны пинговаться (если разрешено на сервере,естественно) внутренние адреса:
root@tpl3020:/# ping 192.168.110.11
PING 192.168.110.11 (192.168.110.11): 56 data bytes
64 bytes from 192.168.110.11: seq=0 ttl=253 time=107.732 ms
Из консоли клиент можно запустить
/etc/init.d/openvpn up <имя_соединения>. У меня имя client_tun.
6. Включение/выключение openvpn нажатием на кнопку WPS.
web морда для управление это хорошо, но хочется более простого способа. На роутере есть кнопка wps, которую можно использовать для запуска/останова клиента.
Как вообще конфигурировать кнопки и лампочки, написано в
http://wiki.openwrt.org/doc/howto/hardware.button
Замечание: не забываем про установку /etc/hotplug.d/button/00-button
и
http://wiki.openwrt.org/doc/uci/system
Применительно к моему случаю, я сделал следующее:
/etc/config/system
=====
config led 'led_wps'
option name 'WPS'
option sysfs 'tp-link:green:wps'
option trigger 'none'
option default '0'
config button
option button 'wps'
option action 'pressed'
option handler '/opt/etc/init.d/ovpn-trigger'
=====
/opt/etc/init.d/ovpn-trigger:
=====
#!/bin/sh
pid_file=/var/run/openvpn-client_tun.pid
if [ -f $pid_file ]
then
logger 'openvpn client stopping'
/opt/etc/init.d/openvpn down client_tun
/bin/echo 0 >/sys/class/leds/tp-link\:green\:wps/brightness
else
logger 'openvpn client starting'
/opt/etc/init.d/openvpn up client_tun
/bin/echo 1 >/sys/class/leds/tp-link\:green\:wps/brightness
cnt=0
while [ $cnt -lt 30 ]
do
sleep 1
#echo $cnt
cnt=`expr $cnt + 1`
state=`cat /sys/class/leds/tp-link\:green\:wps/brightness`
#echo $state
if [ $state -eq 1 ]
then
echo 0 >/sys/class/leds/tp-link\:green\:wps/brightness
else
echo 1 >/sys/class/leds/tp-link\:green\:wps/brightness
fi
ifconfig tun0 >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo 1 >/sys/class/leds/tp-link\:green\:wps/brightness
break
fi
done
# tun0 did not up: shutdown openvpn
ifconfig tun0 >/dev/null 2>&1
if [ ! $? -eq 0 ]
then
echo 0 >/sys/class/leds/tp-link\:green\:wps/brightness
/opt/etc/init.d/openvpn down client_tun
logger 'openvpn client shutdown (could not connect)'
fi
fi
exit 0
=====
/etc/init.d/openvpn
=====
stop_instance() {
local s="$1"
section_enabled "$s" || return 1
SERVICE_PID_FILE="/var/run/openvpn-$s.pid"
service_stop /usr/sbin/openvpn
rm $SERVICE_PID_FILE <- при остановке клиента pid файл не удалался по-умолчанию.
}
=====
Теперь, если нажать кнопку, когда клиент остановлен, то он будет пытаться запуститься, и при успешном запуске лампочка wps будет включена.
При нажатии на кнопку, если клиент запущен, он будет остановлен.
На этом все.
========================================================================
Использованные доп. ссылки (м.б. найдется что-то интересное)
OpenWrt: Configure WiFi Client as WAN and set up a 2nd AP to redistribute the WAN-Access – http://goo.gl/bIVik: https://gist.github.com/2398728
Piratebox
PirateBox creation based on TP-Link MR3020
http://www.disk91.com/2012/technology/networks/piratebox-creation-based-on-tp-link-mr3020/ Как делается, описано в http://wiki.openwrt.org/doc/howto/usb.essentials
и http://wiki.openwrt.org/doc/howto/usb.storage
В моем случае я установил поддержку для usb2.0 (лишние модули лучше не ставить, т.к. место в NAND ограничено) и поддержку ext2 (kmod-fs-ext4).
На флешке предварительно создал раздел и на нем ext2fs на линуксовой машине (так было проще).
Проверил, что раздел монтируется (dmesg -> смотрим название устройства (в моем случае /dev/sda1), mount /dev/sda1 /mnt)
Теперь указываем, что этот раздел нужно монтировать в /opt при старте роутера:
Это деляется либо правкой /etc/config/fstab, либо из luci (System -> Mount points)
Вот содержание /etc/config/fstab
====
config global automount
option from_fstab 1
option anon_mount 1
config global autoswap
option from_fstab 1
option anon_swap 0
config mount
option target /opt
option device /dev/sda1
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0
====
Перегружаемся, проверяем, что /dev/sda1 смонтирован на /opt
root@tpl3020:/# mount
....
/dev/sda1 on /opt type ext2 (rw,relatime,user_xattr,barrier=1)
Теперь пакеты можно устанавливать как в nand, так и на flash drive.
Чтобы не иметь проблем с загрузкой библиотек с /opt/lib и /opt/usr/lib и с путями, правим
/etc/profile:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/usr/bin:/opt/usr/sbin:/opt/usr/local/bin
export LD_LIBRARY_PATH=/opt/usr/lib:/opt/lib
3. настраиваем wifi адаптер, который будет клиентом
Для этого устанвливаем kmod-rt2x00-usb, kmod-rt2800-usb, wireless-tools (их можно поставить на /opt), перегружаемся и смотрим dmesg:
дожны быть строчки:
rt2x00usb 6848 1 rt2800usb
mac80211 252272 4 ath9k,rt2800lib,rt2x00usb,rt2x00lib
настраиваем /etc/config/wireless (добавляем radio1 и интерфейс wwan):
config wifi-device 'radio1'
option type 'mac80211'
option macaddr 'f4:6d:04:b1:8b:d7'
option hwmode '11ng'
option htmode 'HT20'
list ht_capab 'GF'
list ht_capab 'SHORT-GI-20'
list ht_capab 'SHORT-GI-40'
list ht_capab 'TX-STBC'
list ht_capab 'RX-STBC12'
option country 'US'
option txpower '12'
option disabled '0'
option channel '1'
config wifi-iface
option network 'wwan'
option ssid 'MY_AP' <- имя точки доступа, у которой мы будем клиентом
option encryption 'psk2' <- шифрование
option device 'radio1'
option mode 'sta' <- режим клиента
option bssid '90:F6:52:92:68:5E'
option key 'XXXXXXXXXX' <- ключ
настраиваем /etc/config/network
config interface 'wwan'
option proto 'dhcp' <- в моем случае адрес получаем по DHCP
настраиваем /etc/config/firewall
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wlan1 wwan'
перегружаемся.
После перезагрузки должны увидеть следующее:
root@tpl3020:/# ifconfig wlan1
wlan1 Link encap:Ethernet HWaddr F4:6D:04:B1:8B:D7
inet addr:192.168.10.103 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:190 errors:0 dropped:0 overruns:0 frame:0
TX packets:183 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:32
RX bytes:23056 (22.5 KiB) TX bytes:20258 (19.7 KiB)
На этом с wifi все. Нстройки можно делать и из luci.
Замечание: если мы вынимаем wifi адаптер из хаба, то настройки из конфигов никуда не деваются, они просто не используются.
4. настравиваем 3G модем.
Вместо wifi адаптера вставляем в hub модем (уже перешитый, см.выше) и перегружаемся.
Как настраивать модем, описано в http://wiki.openwrt.org/doc/recipes/3gdongle
Замечание1: chat, luci-proto-3g лучше всего ставить в NAND: они маленькие, и не будет проблем с путями и библиотеками. usb-modeswitch я поставил в /opt и сделал необх. линки на /usr/bin и т.д.
Замечание2: чтобы модем при старте роутера переключался в режим tty, в /etc/rc.local добавил:
export LD_LIBRARY_PATH=/opt/usr/lib:/opt/lib
/opt/usr/bin/usb_modeswitch -c /etc/usb_modeswitch.d/19d2\:0149 -v 19d2 -p 2000
Замечание3: можно еще поставить в /opt minicom для работы с модемом.
После перезагрузки должны увидеть (на прошивке MTS):
root@tpl3020:/# ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
на прошивке от Movistar у меня получилось 5 ttyUSB, и ни один не захотел работать.
Нам для использования нужен будет /dev/ttyUSB3.
Из luci Network->Interfaces (так проще) создаем новую сеть wan1 с интерфейсом 3g-wan1 с протоколом UMTS/GPRS/EV-DO
Из luci Network->Firewall добавляем сеть wan1 в зону wan.
перегружаемся.
После перезагрузки должны увидеть :
root@tpl3020:/# ifconfig 3g-wan1
3g-wan1 Link encap:Point-to-Point Protocol
inet addr:10.197.255.211 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:131 errors:0 dropped:0 overruns:0 frame:0
TX packets:133 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:10558 (10.3 KiB) TX bytes:10220 (9.9 KiB)
Модем настроили.
5. Настраиваем openvpn.
Устанавливаем kmod-tun
Устанавливаем openvpn в /opt
Дополнительно сделал:
root@tpl3020:/# ls -l /etc/init.d/openvpn
lrwxrwxrwx 1 root root 23 Dec 26 12:10 /etc/init.d/openvpn -> /opt/etc/init.d/openvpn
создал /opt/etc/openvpn/config/up.sh
#!/bin/sh
/usr/sbin/iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source $4
exit 0
создал /opt/etc/openvpn/config/down.sh
#!/bin/sh
/usr/sbin/iptables -t nat -D POSTROUTING -o tun0 -j SNAT --to-source $4
exit 0
Эти два скрипта для настройки NAT после установления соединения, т.к. клиент openvpn коннектится к серверу и получает у него некий алрес, с которого можно ходить в частную сеть, а пользователь коннектится к точке доступа и получает адрес, про который openvpn сервер в общем случае ничего не знает.
Как настраивать из консоли, описано в http://wiki.openwrt.org/doc/howto/vpn.openvpn.
Но, т.к. рулить с планшета удобнее через web морду (luci), лучше поставить luci-app-openvpn.
И тут нас подстерегает засада: в trunk нет этого пакета, т.к. он почему-то у разработчиков считается broken.
Я поступил так:
скачал с http://downloads.openwrt.org/ исходинки luci. http://downloads.openwrt.org/sources/luci-0.11%2bsvn9463.tar.gz
из архива вытащил applications/luci-openvpn и разложил то, что там было :
luasrc/controller/openvpn.lua -> /usr/lib/lua/luci/controller/
luasrc/model/cbi/openvpn* -> /usr/lib/lua/luci/model/cbi/
luasrc/view/openvpn/* -> /usr/lib/lua/luci/view/openvpn/
root/etc/config/openvpn_recipes -> /etc/config/openvpn_recipes
и создал пустой /etc/config/openvpn
После этого в luci повилась вкладка Services->OpenVPN. Настраивать клинт можно оттуда.
И самое главное, там есть кнопочка start/stop, позволяющая из GUI управлять vpn соединением.
Замечание: т.к. openvpn ставится на /opt, а при запуске uhttpd нет необходимых LD_LIBRARY_PATH и PATH, я добавил в /opt/etc/init.d/openvpn строчки:
=========
#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2011 OpenWrt.org
# Copyright (C) 2008 Jo-Philipp Wich
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
START=95
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
EXTRA_COMMANDS="up down"
LIST_SEP="
"
export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib
export PATH=$PATH:/opt/usr/bin:/opt/usr/sbin:/opt/usr/local/bin
.....
==========
Еще добавил в /opt/etc/init.d/openvpn в start_instance() для того, чтобы могли запускаться скрипты up.sh/down.sh
==========
service_start /usr/sbin/openvpn --syslog "openvpn($s)" --writepid "$SERVICE_PID_FILE" --script-security 3 $ARGS
==========
После конфигурирования клиента из luci в /etc/config/openvpn
получилось следующее:
config openvpn 'client_tun'
option nobind '1'
option float '1'
option client '1'
option comp_lzo '1'
option reneg_sec '0'
option dev 'tun'
option verb '3'
option persist_tun '1'
option persist_key '1'
option remote_cert_tls 'server'
option remote '111.111.222.222'
option proto 'tcp-client'
option port '1194'
option up '/opt/etc/openvpn/config/up.sh'
option down '/opt/etc/openvpn/config/down.sh'
option ca '/opt/etc/openvpn/keys/ca.crt'
option cert '/opt/etc/openvpn/keys/my.crt'
option key '/etc/openvpn/keys/my.key'
option tls_auth '/opt/etc/openvpn/keys/tls.key 1'
option tls_timeout '30'
option hand_window '160'
option enabled '1'
в /etc/config/network добавлен tun0 с именем openvpn.
config interface 'openvpn'
option proto 'none'
option ifname 'tun0'
в /etc/config/firewall я не создавал отдельную зону для openvpn (но можно и создать отдельную при желании):
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wan1 wlan1 openvpn wwan'
Вот скриншоты, как это выглядит в luci :
интерфейсы:
зоны в firewall:
openvpn клиент:
Если все правильно сконфигурировано, то при нажатии на кнопку start из luci, клиент должен запуститься и появиться инерфейс tun0 (см.рисунок выше).
root@tpl3020:/# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
и должны пинговаться (если разрешено на сервере,естественно) внутренние адреса:
root@tpl3020:/# ping 192.168.110.11
PING 192.168.110.11 (192.168.110.11): 56 data bytes
64 bytes from 192.168.110.11: seq=0 ttl=253 time=107.732 ms
Из консоли клиент можно запустить
/etc/init.d/openvpn up <имя_соединения>. У меня имя client_tun.
6. Включение/выключение openvpn нажатием на кнопку WPS.
web морда для управление это хорошо, но хочется более простого способа. На роутере есть кнопка wps, которую можно использовать для запуска/останова клиента.
Как вообще конфигурировать кнопки и лампочки, написано в
http://wiki.openwrt.org/doc/howto/hardware.button
Замечание: не забываем про установку /etc/hotplug.d/button/00-button
и
http://wiki.openwrt.org/doc/uci/system
Применительно к моему случаю, я сделал следующее:
/etc/config/system
=====
config led 'led_wps'
option name 'WPS'
option sysfs 'tp-link:green:wps'
option trigger 'none'
option default '0'
config button
option button 'wps'
option action 'pressed'
option handler '/opt/etc/init.d/ovpn-trigger'
=====
/opt/etc/init.d/ovpn-trigger:
=====
#!/bin/sh
pid_file=/var/run/openvpn-client_tun.pid
if [ -f $pid_file ]
then
logger 'openvpn client stopping'
/opt/etc/init.d/openvpn down client_tun
/bin/echo 0 >/sys/class/leds/tp-link\:green\:wps/brightness
else
logger 'openvpn client starting'
/opt/etc/init.d/openvpn up client_tun
/bin/echo 1 >/sys/class/leds/tp-link\:green\:wps/brightness
cnt=0
while [ $cnt -lt 30 ]
do
sleep 1
#echo $cnt
cnt=`expr $cnt + 1`
state=`cat /sys/class/leds/tp-link\:green\:wps/brightness`
#echo $state
if [ $state -eq 1 ]
then
echo 0 >/sys/class/leds/tp-link\:green\:wps/brightness
else
echo 1 >/sys/class/leds/tp-link\:green\:wps/brightness
fi
ifconfig tun0 >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo 1 >/sys/class/leds/tp-link\:green\:wps/brightness
break
fi
done
# tun0 did not up: shutdown openvpn
ifconfig tun0 >/dev/null 2>&1
if [ ! $? -eq 0 ]
then
echo 0 >/sys/class/leds/tp-link\:green\:wps/brightness
/opt/etc/init.d/openvpn down client_tun
logger 'openvpn client shutdown (could not connect)'
fi
fi
exit 0
=====
/etc/init.d/openvpn
=====
stop_instance() {
local s="$1"
section_enabled "$s" || return 1
SERVICE_PID_FILE="/var/run/openvpn-$s.pid"
service_stop /usr/sbin/openvpn
rm $SERVICE_PID_FILE <- при остановке клиента pid файл не удалался по-умолчанию.
}
=====
Теперь, если нажать кнопку, когда клиент остановлен, то он будет пытаться запуститься, и при успешном запуске лампочка wps будет включена.
При нажатии на кнопку, если клиент запущен, он будет остановлен.
На этом все.
========================================================================
Использованные доп. ссылки (м.б. найдется что-то интересное)
OpenWrt: Configure WiFi Client as WAN and set up a 2nd AP to redistribute the WAN-Access – http://goo.gl/bIVik: https://gist.github.com/2398728
Piratebox
PirateBox creation based on TP-Link MR3020
http://cookingcomputersandmore.com/?page_id=10
http://piratebox.aod-rpg.de/dokuwiki/doku.php
По модему:
http://forum.ru-board.com/topic.cgi?forum=6&topic=5795&start=20
http://www.hub.ru/wiki/ZTE_MF626
http://lists.debian.org/debian-russian/2009/07/msg00100.html
По роутерам tp-link
http://klseet.com/index.php/tp-link-portable-routers
Привет wifi адаптеру обязательно нужен хаб с доп питанием? Китайскую альфа адаптер пытаюсь подружить отваливается mr3020
ОтветитьУдалитьхаб от сети или юсб достаточно какая моделька у вас?
ОтветитьУдалитьHub (3 порта) без доп. питания, заказан с dx.com. Если подключаю
Удалитьмодем и usb флешку, чтобы хватало питания, в один из usb портов втыкаю usb разьем от БП роутера. Добавил в статью картинку, как это выглядит.
Спасибо за фото тоже думал про второй усб разъем он как раз ксати.
ОтветитьУдалитьПоделитесь пожалуйста конфигами для вай фай адаптера сегодня выяснилось что моя ката отваливается не изапитания network.wireless.firewall.dhsp. мне как новичку будет понятней разобратся
ОтветитьУдалитьnetwork
Удалитьconfig interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'lan'
option ifname 'eth0'
option type 'bridge'
option _orig_ifname 'eth0'
option _orig_bridge 'true'
option proto 'dhcp'
config interface 'wlan'
option _orig_ifname 'radio0.network1'
option _orig_bridge 'false'
option proto 'static'
option ipaddr '192.168.1.254'
option netmask '255.255.255.0'
config interface 'wwan_3g'
option proto '3g'
option device '/dev/ttyUSB3'
option service 'umts'
option apn 'internet.beeline.ru'
option username 'beeline'
option password 'beeline'
option maxwait '45'
wireless
config wifi-device 'radio0'
option type 'mac80211'
option channel '11'
option macaddr 'XX:XX:XX:XX:XX:XX'
option hwmode '11ng'
option htmode 'HT20'
list ht_capab 'SHORT-GI-20'
list ht_capab 'SHORT-GI-40'
list ht_capab 'RX-STBC1'
list ht_capab 'DSSS_CCK-40'
option disabled '0'
option country 'DE'
option txpower '17'
config wifi-iface
option device 'radio0'
option mode 'ap'
option ssid 'MySSID'
option network 'wlan'
option encryption 'psk2+ccmp'
option key 'XXXXXXXX'
dhcp
Удалитьconfig dnsmasq
option domainneeded '1'
option boguspriv '1'
option filterwin2k '0'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option nonegcache '0'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
config dhcp 'lan'
option interface 'lan'
option ignore '1'
config dhcp 'wan'
option interface 'wan'
option ignore '1'
config dhcp
option start '100'
option limit '150'
option interface 'wlan'
option leasetime '1h'
firewall
config defaults
option syn_flood '1'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'REJECT'
config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'REJECT'
option network 'lan wlan'
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wwan_3g'
config forwarding
option src 'lan'
option dest 'wan'
config rule
option name 'Allow-DHCP-Renew'
option src 'wan'
option proto 'udp'
option dest_port '68'
option target 'ACCEPT'
option family 'ipv4'
config rule
option name 'Allow-Ping'
option src 'wan'
option proto 'icmp'
option icmp_type 'echo-request'
option family 'ipv4'
option target 'ACCEPT'
config rule
option name 'Allow-DHCPv6'
option src 'wan'
option proto 'udp'
option src_ip 'fe80::/10'
option src_port '547'
option dest_ip 'fe80::/10'
option dest_port '546'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-ICMPv6-Input'
option src 'wan'
option proto 'icmp'
list icmp_type 'echo-request'
list icmp_type 'echo-reply'
list icmp_type 'destination-unreachable'
list icmp_type 'packet-too-big'
list icmp_type 'time-exceeded'
list icmp_type 'bad-header'
list icmp_type 'unknown-header-type'
list icmp_type 'router-solicitation'
list icmp_type 'neighbour-solicitation'
list icmp_type 'router-advertisement'
list icmp_type 'neighbour-advertisement'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-ICMPv6-Forward'
option src 'wan'
option dest '*'
option proto 'icmp'
list icmp_type 'echo-request'
list icmp_type 'echo-reply'
list icmp_type 'destination-unreachable'
list icmp_type 'packet-too-big'
list icmp_type 'time-exceeded'
list icmp_type 'bad-header'
list icmp_type 'unknown-header-type'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
config include
option path '/etc/firewall.user'
config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option dest_port '22'
option name 'ssh'
Статья очень помогла. Особенно в настройках OpenVPN.
ОтветитьУдалитьОтсюда можно скачать исходники LUCI-0.11.
https://dev.iopsys.eu/feed/openwrt-luci/-/branches/stale