Две сети vpn роутер

Связываем две локальные сети с помощью Wireguard VPN на выделенном сервере

Эта статья — продолжение Настройка маршрутизации в сети с неподконтрольным роутером. Итак имеем домашнюю локальную сеть, роутер от провайдера без возможности прошивки и почти без возможности настройки. Ставим в локальной сети сервер. Настраиваем на сервере Wireguard VPN и связываем две локальные сети. Другая локальная сеть — маршрутизатор Xiaomi Mi Router 3G с прошивкой Padavan и установленным Entware.

В принципе инструкций по настройке Wireguard — масса. Но меня долго смущал дополнительный частный диапазон адресов для wireguard. Лично я долго не мог понять, да и сейчас не понимаю, зачем нужно каждому wg устройству назначать адрес из частного диапазона. Могу понять зачем это нужно для одного клиента — ему же нужен какой-то адрес. Но зачем это нужно для связывания двух разных сети — непонятно. У специалистов настройка wireguard вообще не вызывает никаких проблем, но я не они. Кстати мне больше всего понравилась инструкция на сайте keenetic — по ней я все и делал. Возможно данная статья кому-то поможет.

  • Локальная сеть — 192.168.2.0/24
  • Роутер — 192.168.2.1
  • Сервер в локальной сети — 192.168.2.4, ethernet интерфейс — enp1s0
  • Другая локальная сеть (за xiaomi mi router) — 192.168.3.0/24
  • wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) — 10.253.1.0/24
    • сервер wireguard address — 10.253.1.2
    • android клиент — 10.253.1.10
    • xiaomi mi router wireguard address — 10.253.1.3

    Dnsmasq

    Чтобы все работало в локальной сети необходимо добавить два новых маршрута, которые мы анонсируем через DHCP, чтобы трафик в другую локальную сеть и wireguard device network шел через наш сервер: /etc/dnsmasq.d/dhcp.conf

    На клиенте, который использует DHCP для получения IP адреса и конфигурации это должно выглядеть так:

    # ip route
    default via 192.168.2.1 dev enp3s0 proto dhcp metric 100
    10.252.0.0/14 via 192.168.2.4 dev enp3s0 proto dhcp metric 100
    192.168.2.0/24 dev enp3s0 proto kernel scope link src 192.168.2.30 metric 100
    192.168.3.0/24 via 192.168.2.4 dev enp3s0 proto dhcp metric 100

    Для Windows клиента таблицу маршрутизации можно посмотреть командой route print.

    Видим, что трафик для соседней LAN (192.168.3.0/24) и wg private interace (10.252.0.0/14) маршрутизируется через наш сервер (192.168.2.4). Строго говоря wg private interace у меня 10.253.1.0/24, но подсеть 10.254.0.0/16 используется для других нужд и тоже маршрутизируется через сервер, поэтому я написал одно более общее правило вместо двух.

    Wireguard сервер

    Ставим на сервер пакет wireguard: sudo apt install wireguard .

    Генерируем пару ключей (открытый + закрытый) для сервера:

    cd /etc/wireguard
    wg genkey > private-key
    wg pubkey > public-key < private-key

    Запускаем wireguard sudo systemctl start wg-quick@wg0.service .

    Включаем автозапуск для wireguard sudo systemctl enable wg-quick@wg0.service .

    В ubuntu все работает — создается интерфейс wg0, создаются маршруты.

    Проверить статус можно командой ` wg showconf wg0 `, ` wg show `, маршруты командой ` ip route `.

    В настройках роутера пробрасываем wireguard порт до нашего сервера.

    Android client

    Нет смысла еще раз писать то, что уже неплохо написано до нас. Генерируем ключи на Android клиенте, публичный ключ с клиента добавляем в соответствующую секцию конфигурации wireguard сервера.

    Padavan + Entware

    Для работы Entware на прошивке Padavan нужна USB флешка. Как ставить entware написано в padavan wiki.

    Ставим пакет wireguard-go: ` opkg install wireguard-go `. Теоретически можно использовать утилиту ` wg-quick ` для настройки интерфейса и маршрутизатора, но у меня оно почему-то правильно не заработало. В принципе wg-quick — это простой bash скрипт, можно было и разобраться что именно не работает, но разбираться я не стал.

    Итак настраиваем wireguard вручную как написано на официальном сайте. Создаем файл конфигурации /opt/etc/wireguard/wg0.conf. Я закоментировал строчку «Address=. » конфигурации wg0.conf из секции [Interfaces]. Это потому что по какой-то причине ` wg setconf ` ее не принял, ну и ладно, настроим адрес вручную (командой ip address add dev wg0 10.253.1.3/24 ).

    wireguard-go wg0
    ip address add dev wg0 10.253.1.3/24
    wg setconf wg0 /opt/etc/wireguard/wg0.conf
    ip link set up dev wg0
    ip route add 192.168.2.0/24 dev wg0 src 192.168.3.1
    iptables -t filter -A INPUT -i wg0 -j ACCEPT
    iptables -t filter -A FORWARD -i wg0 -j ACCEPT

    Маршрут ` ip route add 10.253.1.0/24 dev wg0 src 10.253.1.3 ` добавился сам, поэтому ручками добавляем только маршрут для 192.168.2.0/24 .

    Переопределяем iptables policy по умолчанию для цепочек INPUT, FORWARD таблицы filter — у меня значения по-умолчанию были DROP, с ними маршрутизация из локальной сети 192.168.2.0/24 в 192.168.3.0/24 (в мою локальную сеть) не работала.

    Все эти команды для запуска и остановки wireguard сохраняем в /opt/etc/init.d/S50wireguard — теперь должно автоматически запускаться при старте маршрутизатора.

    Настройка iptables

    После некоторых обновлений конфигурации маршрутизатора (например обновление правил белых/черных списков по mac адресу — web интерфейс маршрутизатора -> Advanced settings -> Firewall -> MAC Filter) маршрутизатор с прошивкой padavan сбрасывает правила iptables. Чтобы все продолжало работать в прошивке есть файлик `/opt/etc/init.d/S10iptables` (softlinkg) -> `/opt/bin/update_iptables.sh`, который запускается после обновления конфигурации. В него заносим все правила iptables — у меня там правила для wireguard и правила, которые я настроил для прозрачного использования tor в локальной сети, который настроил по этой инструкции.

    Доступ к роутеру из VPN

    Поскольку на неподконтрольном роутере нашей основной сети таблицу маршрутизации мы настроить не можем, то не можем и получить к нему доступ из VPN напрямую. Чтобы получить web доступ к роутеру можно добавить nginx reverse proxy configuration. Можно поставить на любой хост из основной локальной сети — но логично поставить на сервер. Например на порту 8081. Ссылку на файл конфигурации надо добавить в директорию /etc/nginx/sites-enabled — обычно сам файл настроек помещают в /etc/nginx/sites-available/ а в sites-enabled создают символическую ссылку` ln -s /etc/nginx/sites-available/local ./ `.

    Перезагружаем конфигурацию nginx на сервере: ` sudo systemctl reload nginx `.

    Источник

    Создание 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_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/ '`; 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/ '`; 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 минуты, каждый час и каждый день. На этом настройка VPN туннеля закончена.

    Источник

    Читайте также:  Настройка роутера iskratel rt gm 3 ростелеком
Оцените статью
Adblock
detector