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

от автора


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

Собственно, задача — объединить дом 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_on_time=100000011111111111111111  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 туннеля закончена.

ссылка на оригинал статьи http://habrahabr.ru/post/270563/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *