WireGuard +HA+Raspberry Pi 4 VPN сервер это просто!

09 мая 2020, 08:09

В данной статье мы будем дружить Raspbian, Home Asisstant и модуль WireGuard. 

Что такое WireGuard и зачем он нужен? WireGuard - это современный протокол для организации VPN, бесплатный и с открытыми исходниками. В отличие от «мастодонтов» вроде OpenVPN или IPSec, он намного проще и легче. Это касается и скорости (пере)подключения, и производительности, и требований к ресурсам, и процесса настройки, и объёма кода. Недавно было объявлено, что WireGuard войдёт в состав будущих ядер Linux, а впоследствии попадёт и во все популярные дистрибутивы, что косвенно указывает на зрелость этого решения.

В случае установки модуля в систему умного дома, мы можем получить:

  • Безопасное соединение в локальную сеть дома и ко всем устройствам в ней, без дополнительной настройки. 
  • В случае использования модуля Adguard или Pi-Hole - интернет без рекламы. 
  • При правильной настройки модуля Tor - доступ к заблокированным сайтам. 

Что получил я в результате использования надстройки: 

  • Перекрыл множество портов на роутере, которые раньше использовал для удаленного доступа к личному компьютеру, самому серверу умного дома по разным протоколам. 
  • Уменьшил количество рекламы в телефоне как при серфинге, так и в приложениях. 
  • Доступ к любимым сайтам в обход РКН в процессе, так как постоянное хождение через Tor меня не устраивает, а списки в iptables для меня еще не просто.

Данная статья - это просто попытка собрать все инструкции по установке в одном месте и не претендует на оригинальность.Итак, начнем. Для полноценной работы необходимы следующие модули: Home Assistant WireGuard, Adguard или Pi-hole, Samba для более простого доступа к qr-коду. 

Перед тем, как ставить модули, необходимо подготовить основную систему. Несмотря на то, что разработчики не обязывают ставить какое-либо программное обеспечение на основную систему, могу сказать, что у меня не заработало, пока я не произвел следующие действия. Если вы используете Hass.OS, то поддержка wireguard у нее уже есть. Если вы используете Raspbian, то вам необходимо добавить этот пакет и, к сожалению, apt install wireguard не сработает. Для остальных систем способ загрузки пакетов можно найти тут. Прежде чем пытаться установить WireGuard , необходимо обновить систему и установить заголовки ядра Linux. Команды нужно будет ввести в основной хост системе. Руководство было найдено здесь. Внимание! Содержимое данного shell исключительно для владельцев Raspberry PI с установленной системой Raspbian!

sudo apt update && sudo apt upgrade -y
sudo apt-get install raspberrypi-kernel-headers

sudo apt install dirmngr

echo "deb http://deb.debian.org/debian/ unstable main" | sudo tee --append /etc/apt/sources.list.d/unstable.list

sudo apt-key adv --keyserver   keyserver.ubuntu.com --recv-keys 8B48AD6246925553

printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' | sudo tee --append /etc/apt/preferences.d/limit-unstable

sudo apt-get update

sudo apt-get install wireguard -y --allow-unauthenticated

Также для правильной работы в нашей основной системе необходимо установить IP forwarding. "Переадресация IP - это способность операционной системы принимать входящие сетевые пакеты на одном интерфейсе, распознавать, что она предназначена не для самой системы, а для того, чтобы передавать ее в другую сеть, и затем соответствующим образом пересылать. По сути, он позволяет данным, поступающим с вашего VPN-клиента, направляться в другие места, например, в вашу домашнюю сеть или в Интернет.Чтобы включить переадресацию IP, выполните следующие команды непосредственно в вашей хост-системе.

sudo sysctl -w net.ipv4.ip_forward = 1
 echo  " net.ipv4.ip_forward = 1 "  | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

Не забудьте перегрузиться sudo reboot.

Установка и настройка

Немного перевода со страницы автора:

WireGuard довольно прост, однако может быть довольно сложным для пользователя, который не знаком со всей используемой терминологией. Дополнение заботится о многих вещах для вас (если вы хотите). Выполните следующие шаги для установки и быстрого запуска:

  • Найдите надстройку «WireGuard» в магазине дополнений Supervisor и установите ее.
  • Установите host параметр конфигурации в ваш Hass.io (внешний) адрес, например, myautomatedhome.duckdns.org.
  • Измените имя партнера на что-то полезное, например, myphone.
  • Сохраните конфигурацию.
  • Запустите дополнение "WireGuard". Проверьте журналы дополнения "WireGuard", чтобы увидеть, все ли прошло хорошо.
  • Переадресуйте порт 51820(UDP!) в вашем маршрутизаторе на ваш Hass.io IP.
  • Загрузите / откройте файл, /ssl/wireguard/имя_клиента/qrcode.png, хранящийся на вашем компьютере Hass.io, например, с помощью Samba, Visual Studio Code или надстройки Configurator.
  • Установите приложение WireGuard на свой телефон.Добавьте новое соединение WireGuard в свой телефон, отсканировав QR-код.Connect!
Рассмотрим подробнее наш конфиг на странице модуля:

server:
  host: myhome.ddns.net
  addresses:
    - 10.10.10.1
  dns:
    - 172.30.32.1
  post_up: >-
    iptables -A FORWARD -i %i -j ACCEPT;  iptables -A FORWARD -o %i -j ACCEPT;
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
peers:
  - name: hassio
    addresses:
      - 10.10.10.2/32
    allowed_ips: []
    client_allowed_ips: []
log_level: warning

В строке 

  • host: пишем наш адрес в интернете. Порт не указываем! Как пишут многие пользователи - даже менять со стандартного 51820 нежелательно, так как не всегда это срабатывает. 
  • addresses: - 10.10.10.1 это адрес нашего сервера во вновь созданной нами сети.
  • dns: - 172.30.32.1. Если вы хотите фильтровать рекламу и у вас установлен Adguard или Pi-Hole, укажите этот адрес.

В модуле Pi-hole для корректной работы надо зайти на страницу Settings, вкладку DNS и найти пункт Listen on all interfaces для того, чтобы модуль мог обрабатывать наши запросы. Если Вы не пользуетесь данными приложениями, укажите предпочитаемые Вами сервера, например, так:

dns:
  - 8.8.8.8
  - 1.1.1.1

  • post_up: >- этот параметр настраивает таблицу маршрутизации с помощью iptables, а если вы используете модуль Tor, тогда изменяйте согласно вашим предпочтениям. В данном примере iptable будет применяться точно такой же, даже если вы уберете его из конфига.
  • peers: Это описание наших клиентов для сервера. Указываем имя, ip из той же подсети. Важно использовать маску /32, так как многие жаловались, что, например, /24 маска не работает. Не забываем изменять ip для следующего клиента, если первый клиент - 10.10.10.2/32, то следующий будет - 10.10.10.3/32 и так далее.
  • allowed_ips: [] Эта настройка сервера не влияет на клиента. Тут указываются адреса, с каких будет доступ к вашему серверу. Например, если вы планируете заходить исключительно с работы, и ip вам известен, вы можете ограничить единственным ip или сетью адресов. По умолчанию доступ с любого ip.
  • ip.client_allowed_ips: [] Этот параметр клиентской конфигурации не влияет на сервер. Указывает, какой трафик идет через туннель. Указав там только локальную сеть своего дома, например, 192.168.1.0/24, трафик к сторонним сайтам будет идти напрямую с вашего устройства, не проходя туннель (полезно, если вы экономите трафик сервера), указать можно несколько сетей. По умолчанию весь трафик идет через туннель.При запуске модуля проявите немного терпения и дождитесь появления в логе.
  • peer: ваш_ключ = allowed ips: 10.10.10.2/32 persistent keepalive: every 25 seconds

Приятного серфинга в безопасной сети.

UPD 

Так случилось, что в рабочей сети и домашней сети  у меня одинаковый диапазон адресов вида 192.168.1.*** Что либо менять мне было лень, а рабочий компьютер несмотря на подсоединение к VPN не спешил соединяться с домашним сервером. Выход есть и из такой ситуации. Для этого нам нужно открыть командную строку с привилегиями администратора. Меню "Пуск" поиск набираем "cmd" и на черном квадратике правой кнопкой мыши жмем и выбираем пункт "Запуск от имени Администратора"

В этом нам поможет команда route

 route -p add 192.168.1.35 mask 255.255.255.255 10.10.10.1 

  • route - команда установки нового статического маршрута 
  • -p - маршрут постоянный 
  • 192.168.1.35 - цель нашего пути (домашний сервер) 
  • mask 255.255.255.255 - маска сети, в данном случае целью маршрута является единичный хост 
  • 10.10.10.1 - наш сервер VPN Вполне может так случиться что не всегда нужен постоянный доступ к данному IP. Есть два способа, или не указывать флаг -p и после перезагрузки он сотрется. Или можно написать команду вида route delete 192.168.1.35 это сотрет маршрут вне зависимости был ли он постоянным или временным и перезагрузка не требуется. посмотреть все маршруты в системе можно командой route print


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Евгений Лузин (EvLuz)
    Евгений Лузин (EvLuz) 18 дней назад

    Отличная статья. Поднимал на Кинетике.

    • (ADVENTURER08)
      (ADVENTURER08) 17 дней назад

      Можно узнать по какой инструкции?

К списку статей

Устройства в материале

Raspberry Pi 4

Производитель: Raspberry Pi

Тематические чаты

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
15 ноября 2018, 09:42
Способы автоматизации механических ворот
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
30 августа 2019, 07:28
Несколько нетривиальных способов использования датчика открытия окон/дверей от Xiaomi/Aqara.
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
29 октября 2019, 07:59
Умный домофон на базе nodeMCU с прошивкой ESPHome.
11 мая 2019, 19:57
Как активировать русский язык в Google Assistant для Google Home