- PVSM.RU - https://www.pvsm.ru -

OpenWrt + VPNclient для роутера с 4mb ROM

Доброго времени суток!

Недавно у меня появилась необходимость обеспечить доступ в интернет всех пользователей домашней сети через OpenVPN. Изначально для этих целей использовался древний IBM NetVista 6646-Q1G c Linux Centos 6 на борту.

Справлялся он с данной задачей хорошо, но, как говорится, нет предела совершенству. Захотелось заменить его на что-либо более компактное. Изначально выбор пал на Raspberry Pi Model B, но смущала цена в 50$, ведь с задачей, которую он должен был выполнять, успешно справлялся и текущий сервер. Я приступил к изучению альтернативных вариантов. И нашел, как мне показалось, идеальное решение – роутер + прошивка DD-WRT [1], которая содержит клиент OpenVPN. Далее настал черед выбора роутера. Я остановился на TP-Link WR841N [2]. Поиск по базе [3] показал, что DD-WRT его поддерживает.

Буквально в тот же день девайс был приобретен и прошит. Но тут меня ждало разочарование – в веб интерфейсе на вкладке VPN отсутствовала возможность настройки клиента OpenVPN. Найти причину данной несправедливости помог google очень быстро: “OpenVPN is only available on units with at least 8mb flash (except the Broadcom VPN build.) [4]”.
Как говорят мудрейшие, внимательно читайте договор документацию.

Ладно, так даже интереснее. Беглый поиск альтернативных прошивок привел меня к OpenWRT [5]. Ее отличие от DD-WRT в том, что в ней есть менеджер пакетов opkg [6] с неплохим репозиторием и имеется возможность гибко настроить систему под свои нужды. Фактически, это очень сильно облегченная версия linux.

В OpenWRT настроить OpenVPN из коробки не получилось – проблема та же, что и с DD-WRT. Но, благодаря архитектуре данной прошивки, надежда, что все получится, была. Довольно много свободного места было обнаружено в tmpfs:

root@OpenWrt:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    1088       352       736  32% /
/dev/root                 2048      2048         0 100% /rom
tmpfs                    14608      3256     11352  22% /tmp
tmpfs                      512         0       512   0% /dev
/dev/mtdblock3            1088       352       736  32% /overlay
overlayfs:/overlay        1088       352       736  32% /

Как понятно из названия, в /tmp монтируется оперативная память роутера. Несколько минут гугления привели меня на страницу [7] с вариантом решения данного вопроса.
К сожалению, мне он не подошел, так как после установки пакетов kmod-tun, liblzo и libopenssl в корневой файловой системе осталось критически мало места. Поэтому было принято решение немного модернизировать этот мануал. Вот что у меня получилось.

1. Подключаемся к роутеру по ssh и выполняем команды:

opkg  update
opkg install kmod-tun zlib liblzo
mkdir /etc/openvpn
touch /etc/init.d/openvpn
chmod +x /etc/init.d/openvpn

2. Редактируем init скрипт:

vi /etc/init.d/openvpn

#!/bin/sh /etc/rc.common

START=99

start() {
    local TMPPATH=/tmp/openvpn
    [ ! -d ${TMPPATH} ] && mkdir ${TMPPATH}
    cd ${TMPPATH}
    opkg update || exit 1 
    tar xzf $(opkg download libopenssl | grep Downloaded | cut -d  -f4 | sed '$s/.$//') 
    tar xzf data.tar.gz 
    tar xzf $(opkg download openvpn | grep Downloaded | cut -d  -f4 | sed '$s/.$//')
    tar xzf data.tar.gz                                                              
    rm -f pkg.tar.gz data.tar.gz control.tar.gz debian-binary getopenvpn.sh          
    for i in $(ls ${TMPPATH}/usr/lib)                                                                              
        do                                                                                                         
        [ ! -f /usr/lib/$i ] && ln -s  /tmp/openvpn/usr/lib/$i  /usr/lib/$i                                        
        done                                                                                                       
    ${TMPPATH}/usr/sbin/openvpn  --writepid /tmp/ovpn_ciberterminal.pid --daemon --cd /etc/openvpn --config my.conf
        }                                                                                                           
                                                                                                                   
stop() {                                                                                                           
       PIDOF=$(ps | egrep openvpn | egrep  -v grep | awk '{print $1}')                                             
       kill ${PIDOF}                                                                                               
       }   

3. Копируем в папку /etc/openvpn файл конфигурации (в нашем случае my.conf), сертификаты и ключ.

4. Запускаем openvpn:

/etc/init.d/openvpn start

Если все прошло успешно, то при выполнении команды ifconfig увидим новый tun или tap интерфейс. Пример:

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.54  P-t-P:10.8.0.53  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:100558 errors:0 dropped:0 overruns:0 frame:0
          TX packets:78362 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:85115045 (81.1 MiB)  TX bytes:16184384 (15.4 MiB

Если соединение не установилось, можно попробовать найти ошибку с помощью команды:

logread -f

Далее необходимо добавить сетевой интерфейс и настроить фаервол для того, чтобы пустить трафик клиентов через VPN. Это можно выполнить с помощью веб интерфейса. Примеры на скриншотах ниже:

image

image

Данное решение успешно протестировано работает на роутере TP-Link WR841N, так же оно подойдет для других поддерживаемых OpenWRT устройств [8], имеющих ROM 4 мегабайта.

Автор: cyreex

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/54134

Ссылки в тексте:

[1] DD-WRT: http://www.dd-wrt.com/site/index

[2] TP-Link WR841N: http://www.tp-linkru.com/products/details/?model=TL-WR841N

[3] базе: http://www.dd-wrt.com/site/support/router-database

[4] OpenVPN is only available on units with at least 8mb flash (except the Broadcom VPN build.): http://www.dd-wrt.com/wiki/index.php/OpenVPN)

[5] OpenWRT: https://openwrt.org/

[6] opkg: http://wiki.openwrt.org/doc/techref/opkg

[7] страницу: http://blog.ciberterminal.net/2013/06/18/openvpn-in-the-tp-link-wr841nd/

[8] поддерживаемых OpenWRT устройств: http://wiki.openwrt.org/ru/toh/start

[9] Источник: http://habrahabr.ru/post/211174/