Pull to refresh

Создание VPN туннеля между двумя квартирами на базе роутеров с dd-wrt

Reading time 3 min
Views 60K

Предыстория:


Собственно, задача — объединить дом 1 и дом 2. На вооружении имеем схемы:

Дом 1: -internet пров. Beeline l2tp; psTV (196.168.2.13); dir615С2 (внут: 192.168.2.1, внеш: 95.24.х.х (будет клиентом VPN))

Дом 2: -internet пров. Interzet с белым ip; PS4 (192.168.1.13); dir615Е4 (внеш st.IP: 188.Х.Х.Х, внут: 192.168.1.1 (будет сервер VPN)

На обоих роутерах были установлены прошивки от dd-wrt. Процедура установки не сложная, в интернете много информации на эту тему.

Цель чтобы оборудование dir615с2 (далее «В») было доступно в локальной сети dir615Е4 (далее «А») и обратно.

Подготовка, проблемы, решение:


После установки dd-wrt и настройки подключения к интернету было замечено на роутере А отсутствие ping между клиентами, подключенными по lan (по wifi такой проблемы нет). Решается данная проблема двумя способами:

1. Установки прошивки dd-wrt от 04-18-2014-r23919

2. Заход во вкладку «Администратор — Команды » и выполнение команды:

swconfig dev eth0 set enable_vlan 1 
swconfig dev eth0 set apply

Увлекшись настройками, почувствовал желание сделать автоматическое отключение и включение WIFI, то ли с целью эксперимента, то ли для уменьшения количества излучающих приборов в квартире. Для это было найдено несколько решений:

1. Использование команд ifup,ifdown и командами cron. Для это во вкладке «Администратор» в пункте Cron пишем:

0 7 * * * root /sbin/ifconfig ath0 up 
0 0 * * * root /sbin/ifconfig ath0 down

Это позволит вкл. в 7:00 утра и выкл. 00:00 ночи. Но у меня как и у многих она не работала.

2. Этот метод заключается в использовании кнопки WPS/Перезагрузки на корпусе роутера. Для это в меню Services в пункте SES/AOSS/EZ-SETUP/WPS Button следует вкл. Turning off radio. Но каждый раз нажимать кнопку это не очень интересно.

3. Использование команды расписания работы WIFI:

nvram set radio0_timer_enable=1  
nvram set radio0_on_time=000000011111111111111111  
nvram commit 

Где 0 — выкл, 1 — вкл., в моем примере он вкл. в 7:00 а выкл. в 01:00.

Теперь можно и приступить к настройке VPN. На «А» поднят сервер PPTP, а на «В» клиент. Убедится в работе VPN можно на вкладке «Статус — lan». В самом низу указывается, что клиент «В» подключен к серверу «А».

(Настройки сервера и клиента проводились в Web интерфейсе)



На сервере задавая имя и пароль следует ставить * через пробел.



Если у вас, так же как у меня, роутер на базе Atheros AR7240, то возможно клиент VPN будет при подключении оставаться со своим локальным IP (не принимая ip из диапазона сервера). В этом случае необходимо добавить noipdefault в поле мппе шифрование. Также не лишним будет добавить --nobuffer в поле ип пптп сервера через пробел для выкл. буферизации.

Теперь, когда у нас есть VPN-туннель, нам надо прописать маршрут в соседнею сеть.

«А» имеет сеть 192.168.1.0/24 и ip как сервер VPN 172.16.1.1
«В» имеет сеть 192.168.2.0/24 и ip как клиент VPN 172.16.1.51

Для доступа из «А» в «В» нужно задать:

route add -net 192.168.2.0 netmask 255.255.255.0 gw 172.16.1.1

Для доступа из «В» в «А» нужно задать:

route add -net 192.168.1.0 netmask 255.255.255.0 gw 172.16.1.51

Так как при переподключении клиента к серверу VPN маршрут будет сброшен и его надо будет повторно задавать, было принято решение о написании Shell-скрипта. Он бы проверял периодически на наличие маршрута и в случае его отсутствия проверял поднятие туннеля, и при его наличии задавал бы маршрут.

Выглядит он для сервера так:

#!/bin/sh 
if 
PPTP=`ip ro | awk '/192.168.2.0/ {print $1}'`; 
test "$PPTP" = "192.168.2.0/24" 
then 
exit; 
#Тут мы указали если есть в ip ro маршрут на сеть 192.168.2.0 то скрипт заканчивается иначе идем дальше
else 
if 
PPTPup=`ip ro | awk '/172.16.1.51/ {print $1}'`; 
test "$PPTPup" != "" 
then 
route add -net 192.168.2.0 netmask 255.255.255.0 gw 172.16.1.1 
else 
exit;
# тут мы указали если в ip ro "VPN" соединение  не равно пустоте то добавить маршрут и закончить скрипт
fi 
fi 
exit;

Для клиента меняем 192.168.2.0 на 192.168.1.0, 172.16.1.51 на 172.16.1.1, 172.16.1.1 на 172.16.1.51.

Теперь нам нужно сделать так, чтобы этот скрипт срабатывал по заданному интервалу. Это возможно сделать во вкладке «Администратор» в пункте Cron, пишем:

*/3 * * * * root /tmp/custom.sh

Это нам даст запуск скрипта каждые 3 минуты, каждый час и каждый день. На этом настройка VPN туннеля закончена.
Tags:
Hubs:
+2
Comments 8
Comments Comments 8

Articles