====== Создание 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 интерфейсе) {{:linux:1.jpg|}} На сервере задавая имя и пароль следует ставить * через пробел. {{:linux:2.jpg|}} Если у вас, так же как у меня, роутер на базе 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 туннеля закончена.