- PVSM.RU - https://www.pvsm.ru -
Доброго времени суток!
Недавно у меня появилась необходимость обеспечить доступ в интернет всех пользователей домашней сети через 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. Это можно выполнить с помощью веб интерфейса. Примеры на скриншотах ниже:
Данное решение успешно протестировано работает на роутере 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/
Нажмите здесь для печати.