Настройка OpenVPN с форвардингом на роутере Zyxel Keenetic Giga II

Хотите получить из роутера практически полноценный Linux сервер с некоторым набором базовых программ на базе NDMS? В свое время, мой выбор пал на "Zyxel Keenetic Giga", он бюджетный и простой в настройке, да и в целом я в нем не разочаровался.
Однако, два года назад я так и не написал статью о том как получить из него полноценный Linux. Теперь же, мы купили себе вторую версию этого роутера "Zyxel Keenetic Giga II" и я всетаки заставил себя написать о настройке статью, поехали!
О прошивке
Сразу скажу, я усердно пробовал работать с прошивкой V2 (конкретно 2.04), но как бы я не пытался, так и не смог завести dropbear.
Почитав в интернетах о прошивке "V2", я понял что она сырая и не годится для расширения. В итоге я наткнулся на комментарий на 4pda и установил себе на Giga II прошивку "V1.11" (брал от сюда, ставил "Firmware-KEENETIC_GIGA_II-V1.11.RU.NDMS_140108210221.bin"), если файл уже не доступен, то пишите и я расшарю. Некоторые подробности о работе V1 на Giga II можно подчерпунть тут. Прошивку можно поменять в разделе "Система > Конфигурация", подробнее можно ознакомится тут.
Из-за того что мы установили прошивку V1.11 — дальнейшие инструкции также корректны и для первой версии Giga.
Расширяем Keenetic, добавляем sshd и opkg
Берем флешку от 1Гб, форматируем её в ext3 (например в GParted). Можете ознакомится с официальными требованиями к USB носителю.
Далее, идем на страницу документации о системе opkg, действуем по их инструкциям и скачиваем нужный архив тут, у меня это был "ext_init.sh-r2.tar.gz".
Теперь создаем каталоги и копируем содержимое архива:
cd </path/to/you/flash/drive> mkdir -p system/bin cd system/bin wget tar -xzf ext_init.sh-r2.tar.gz chmod +x ext_init.sh
Проверяем права на файл "ext_init.sh", главное чтобы он был исполняемым (это мы сделали в последней строчке).
Теперь вставляем флешку в первый USB-слот (определится как "DISK_A1"), на главной странице панели администрирования Zyxel, в разделе "USB-накопитель" должна появится наша флешка. Переходим в раздел "Система > Журнал" и ожидаем примерно такую запись:
root Starting opkg/linux install root All errors are logged in a file /media/DISK_A1/tmpinstall/err.log root Extracting busybox root Unpacking busybox root Extracting system root Unpacking system root Generating rsa/dss keys for dropbear root Starting dropbear dropbear[2428] Running in background root Connect to keenetic using ssh and run finish_install.sh to finish installation
Теперь вы можете подключится по SSH.
Завершаем установку
Подключаемся по ssh:
ssh root@192.168.1.1 пароль "zyxel"
Теперь перво-наперво сменим пароль:
# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Запускаем finish_install.sh для завершения установки:
# finish_install.sh Creating swap file. Please wait... 128+0 records in 128+0 records out Setting up swapspace version 1, size = 134213633 bytes Loading current packages list Downloading Inflating Updated list of available packages in /media/DISK_A1/system/var/opkg-lists/packages.
Обновление системы и установка нужных приложений
Обновляем установленные пакеты:
# opkg update # opkg upgrade
И доустановливаем нужные:
# opkg list | grep <нужный пакет> # opkg install mc screen nano htop openvpn-openssl
Теперь настроим OpenVPN
Создадим файл /media/DISK_A1/system/etc/firewall.d/fw.sh с правилами для iptables со следующим содержимым:
#!/bin/sh iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -p tcp -j ACCEPT iptables -A INPUT -p udp -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -t nat -F iptables -I FORWARD 1 -i br0 -o tun0 -j ACCEPT iptables -I FORWARD 2 -i tun0 -o br0 -j ACCEPT iptables -I FORWARD 3 -s 192.168.1.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Чтобы вы могли зайти на свой сервер из под VPN, добавьте перед последней строчкой:
iptables -t nat -A POSTROUTING -o eth2.2 -d "АДРЕС_VPN_СЕРВЕРА" -j MASQUERADE
Сделаем этот файл исполняемым:
# chmod +x /media/DISK_A1/system/etc/firewall.d/fw.sh
В каталоге /media/DISK_A1/system/etc/openvpn надо создать конфиг клиента openvpn.conf и положить туда предварительно сгенерированные (или полученные от какого-либо сервиса) ключи. Вот пример возможного конфига:
client remote <IP-адрес OpenVPN-сервера> port 1194 dev tun proto udp resolv-retry infinite nobind pull user nobody group nogroup persist-key persist-tun ca /media/DISK_A1/system/etc/openvpn/ca.crt cert /media/DISK_A1/system/etc/openvpn/example.crt key /media/DISK_A1/system/etc/openvpn/example.key tls-client tls-auth /media/DISK_A1/system/etc/openvpn/ta.key 1 cipher DES-EDE3-CBC comp-lzo mute 10 verb 0 log openvpn.log
Подробности опций и как сгенерировать нужные ключи можно почитать в моей статье о OpenVPN.
Если вы захотите запустить openvpn без init-скрипта, то столнетесь с проблемой с устройством tun:Эту проблему я быстро решил при помощи этой статьи, для этого надо создать каталог /dev/net и создать там файл устройства:Wed Jun 10 12:41:09 2015 ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)Но после этого произошла новая проблема:# mkdir /dev/net # mknod /dev/net/tun c 10 200Я проверил через lsmod наличие модуля "tun" и не обнаружил его:Wed Jun 10 12:41:50 2015 ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such device (errno=19)Значит надо его подгрузить, т.к. modprobe не идет в поставку с нашим Linux, то я воспользовался insmod. Я нашел подходящий модуль и загрузил его:# lsmod | grep tunТеперь все впорядке, lsmod говорит что модуль подгружен.# find / -name "*tun*.ko" /lib/modules/2.6.22-tc/tun.ko /media/DISK_A1/system/lib/modules/2.6.23-rt/tun.ko # insmod /lib/modules/2.6.22-tc/tun.ko
Запускаем OpenVPN
Для того, чтобы после перезапуска системы у нас запускался демон OpenVPN самостоятельно, надо переименовать его init-скрипт из K11openvpn в S11openvpn:
# cd /media/DISK_A1/system/etc/init.d/ # mv K11openvpn S11openvpn
Добавлять вызов /media/DISK_A1/system/etc/firewall.d/fw.sh никуда не надо, он запустится автоматически.
Я столкнулся с проблемой запуска модуля tun.ko в init-скрипте. Тот что был там указан выдавал следующее:в результате я нашел альтернативный и он корретно заработал:insmod: cannot insert '/media/DISK_A1/system/lib/modules/2.6.23-rt/tun.ko': invalid module format (-1): Exec format errorпосле чего я поменял в файле S11openvpn на альтернативный модуль:# find / -name "*tun*.ko" /lib/modules/2.6.22-tc/tun.ko /media/DISK_A1/system/lib/modules/2.6.23-rt/tun.ko # insmod /lib/modules/2.6.22-tc/tun.ko#insmod $MOUNT/lib/modules/2.6.23-rt/tun.ko insmod /lib/modules/2.6.22-tc/tun.ko ... #rmmod $MOUNT/lib/modules/2.6.23-rt/tun.ko rmmod /lib/modules/2.6.22-tc/tun.ko
Впринципе всё, перезапустите роутер и должно все заработать как надо!
Обновление с zyxware на entware
Не особо рекомендую обновляться до entware, т.к. при запуске OpenVPN через init-скрипт я получал Segmentation Fault (правда если просто запускать openvpn openvpn.conf, то проблемы не наблюдалось), разбираться с этим мне не хотелось, т.к. для себя особого смысла обновляться я не видел. Главное отличие entware это большее количество пакетов чем в zyxware, так что если хочется, то попробовать всетаки можно. Ниже расскажу как это сделать:
Для этого вынем нашу флешку из роутера и запишем туда архив, который можно взять отсюда. Снова подключите флешку в первый USB-слот. В сети рекомендуют обновлятся через telnet, но я обновлялся по ssh:
# cd /media/DISK_A1 # wget # tar -xzf entware_keenetic.tgz # chmod +x ./entware_keenetic_install.sh # ./entware_keenetic_install.sh
После чего перезапустите роутер из веб-панели Zyxel. На вашей флешке, помимо каталога /system появится еще /opt. Все, теперь вы счастливый обладатель entware!
Комментарии
Дополнение: у меня были проблемы с качеством работы wifi, я грешил на многое, в том числе аппартаные проблемы (перегрев, флюс проводящий эл-во и т.д.). В итоге все было проще, в БЦ мешали друг-другу сети, а авто-режим выбирал всегда 1-ый канал. Но с помощью программы wifi-radar я выявил какой канал мне использовать (рекомендую выбирать из "неперекрывающихся" каналов 1/6/11):
А также оставил только 802.11n, выбрал короткую преамбулу и уменьшил мощность сигнала до 12%. После чего исчезли коллизии.
Ещё полезно почитать http://habrahabr.ru/post/117761/ и http://habrahabr.ru/post/149447/
Вы не могли бы мне скинуть tun.ko ?
У меня ошибка
insmod: cannot insert '/media/DISK_A1/system/lib/modules/2.6.23-rt/tun.ko': invalid module format (-1): Exec format error
Но альтернативных модулей нет!
Помогите разобраться. Кинетик белый, при запуске демона пишет : Starting OpenVPN in daemon mode....failed. Где посмотреть в чем ошибка чего не хватает? Тунель не поднимает, модуль tun загружен.
Оставьте свой комментарий