Задача: с планшета 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