На кофе

Вход

Управляйте домашней сетью из любой точки мира с помощью WireGuard

Поделиться статьей

Подключение к домашней сети через WireGuard позволяет безопасно и приватно управлять устройствами и ресурсами из любой точки мира. Преимущества перед облачными сервисами включают:

  1. Безопасность: Все данные передаются через зашифрованный канал, обеспечивая защиту от перехвата.
  2. Приватность: Ваши данные не хранятся на сторонних серверах, что снижает риск утечек.
  3. Контроль: Полный контроль над настройками и доступом без зависимости от сторонних провайдеров.
  4. Скорость: WireGuard обеспечивает быструю и стабильную связь благодаря своему оптимизированному и легковесному коду.

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

Как мы видим на схеме, у нас есть два ноутбука и два сервера. Один сервер это наш NAS - хранилище, а второй сервер - VDS (Virtual Dedicated Server) — виртуальный выделенный сервер. С помощью WireGuard мы будем создавать туннель от нашего ноутбука 1 или 2 ведущий через сервер VDS до нашего домашнего сервера NAS.

Благодаря такой схеме, мы можем попадать в нашу локальную сеть за двумя NAT (NAT - провайдера и нашего роутера), используя ключи подключения и шифрованный трафик и не опасаясь утечке данных. 

Теперь давайте соберем наш стенд:

1) Ноутбук MacBook - 192.168.16.52 (на wi-fi от телефона) / 10.0.0.2 (сеть VPN) [MacOS Sonoma]
2) Сервер NAS - 192.168.31.17 (Домашняя сеть) / 10.0.0.3 (Сеть VPN) [Windows Server 2019]
3) Сервер VDS - 176.114.77.108 (Публичный адрес) / 10.0.0.1 (Сеть VPN) [Astra Linux Orel 1.7.5]
4) Дополнительный ноутбук Laptop - 172.... (Публичный адрес) / 10.0.0.4 (Сеть VPN) [Astra Linux Smolensk 1.7.6]


Создание сервера VDS

Перейдем на любой хостинг по предоставлению серверов. 

Называю наш сервер WireGuard, выбираю Источник - Astra Linux - Orel

Далее выбираю диск - SSD Базовый на 5ГБ (тут вы сами выбираете, то что хотите).

Далее хостинг сразу нас предупреждает, что для AstraLinux нам необходимо создать ssh ключи и указать публичный ключ в момент создания сервера, а так же подсказывает, как нам можно это сделать.

Я создал новую директорию в .ssh под названием wg_server и сгенерировал ключи туда. Далее с помощью cat выводим содержимое публичного ключа, копируем его и вставляем в поле ssh ключи хостинга.

Необходимо также активировать дополнительную услугу по публичному IP адресу. Выбираем ее.

Смотрим итоговую стоимость на сутки и оплачиваем (тут тоже все индивидуально).

Видим что наш сервер создан и ему присвоен публичный ip адрес 176.114.77.108

Теперь давайте подключимся к нему по ssh ключам.

P.s.: нигде не указано, что нужно подключаться под учетной записью astra на данном хостинге, так что имейте ввиду. Обычно используется учетная запись root.

Отлично, мы успешно зашли на наш новый сервер.

Теперь необходимо обновить список пакетов командой

sudo apt update

Дальше нам необходимо установить wireguard, сделаем это командой

sudo apt install -y wireguard

После успешной установки, переходим в root пользователь командой

sudo -i

а затем переходим директорию /etc/wireguard/ командой

cd /etc/wireguard/

Теперь самое интересное, нам необходимо сгенерировать публичный и закрытый ключ. Выполняем это конвеером команд

wg genkey | tee server_privatekey | wg pubkey > server_publickey

wg genkey - генерируем приватный ключ и перенаправляем из stdout в файл server_privatekey
далее командой wg pubkey генерируем открытый ключ и записываем в файл server_publickey

Далее нам необходимо создать конфигурационный файл для нашего wireguard с описанием действий.

Командой

vim /etc/wireguard/wg0.conf

мы создаем и тут же открываем файл wg0.conf

Наполняем его содержимым

[Interface]
PrivateKey = <ServerPrivateKey>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
#MacBook
PublicKey = <MacBookPublicKey>
AllowedIPs = 10.0.0.2/32

[Peer]
#HomePC
PublicKey = <HomePCPublicKey>
AllowedIPs = 10.0.0.3/32

Я думаю тут итак все понятно, но все же объясню

[Interface]

  • PrivateKey = <ServerPrivateKey>: Закрытый ключ сервера, используемый для шифрования и аутентификации.
  • Address = 10.0.0.1/24: IP-адрес и подсеть, назначенные этому интерфейсу VPN.
  • ListenPort = 51820: Порт, на котором сервер будет слушать входящие подключения.

[Peer] (MacBook)

  • PublicKey = <MacBookPublicKey>: Открытый ключ, принадлежащий устройству MacBook, используемый для аутентификации.
  • AllowedIPs = 10.0.0.2/32: IP-адреса, разрешенные для маршрутизации через этот пир. В данном случае это IP-адрес, назначенный MacBook.

[Peer] (Home PC)

  • PublicKey = <HomePCPublicKey>: Открытый ключ, принадлежащий домашнему ПК, используемый для аутентификации.
  • AllowedIPs = 10.0.0.3/32: IP-адреса, разрешенные для маршрутизации через этот пир. В данном случае это IP-адрес, назначенный домашнему ПК.

Таким образом, этот файл конфигурации определяет сервер WireGuard и два клиента (MacBook и домашний ПК), каждый из которых имеет свой уникальный открытый ключ и назначенный IP-адрес.

Сохраняем и выходим. Давайте выведем на экран приватный ключ и вставим его в wg0.conf

Командой cat server_privatekey выводим закрытый ключ и копируем его и вставляем в wg0.conf в раздел [Interface] - PrivateKey

 

Этот набор команд используется для настройки NAT и маршрутизации на сервере с интерфейсом WireGuard.

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo sh -c "echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-sysctl.conf"

Если нет каталога /etc/iptables

mkdir -p /etc/iptables
sudo sh -c "iptables-save > /etc/iptables/rules.v4"

Вот объяснение каждой команды:

Включение пересылки IP и настройка правил iptables:

  1. sudo sysctl -w net.ipv4.ip_forward=1:
    • Включает пересылку пакетов IP на уровне ядра, позволяя серверу маршрутизировать пакеты между интерфейсами.
  1. sudo iptables -A FORWARD -i wg0 -j ACCEPT:
    • Добавляет правило в таблицу FORWARD, разрешающее пересылку всех входящих пакетов с интерфейса wg0 (интерфейс WireGuard).
  1. sudo iptables -A FORWARD -o wg0 -j ACCEPT:
    • Добавляет правило в таблицу FORWARD, разрешающее пересылку всех исходящих пакетов на интерфейс wg0.
  1. sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE:
    • Добавляет правило в цепочку POSTROUTING таблицы nat, которое применяет маскарадинг (NAT) ко всем пакетам, выходящим через интерфейс eth0. Это подменяет исходящий IP-адрес пакетов на IP-адрес сервера.

Сохранение изменений:

  1. sudo sh -c "echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-sysctl.conf":
    • Сохраняет настройку пересылки IP, добавляя ее в файл конфигурации sysctl, чтобы она оставалась после перезагрузки.
  1. sudo sh -c "iptables-save > /etc/iptables/rules.v4":
    • Сохраняет текущие правила iptables в файл, чтобы они автоматически восстанавливались при перезагрузке системы.

Эти команды настраивают сервер для корректной работы в качестве маршрутизатора с NAT, позволяя устройствам в сети WireGuard получать доступ к интернету через интерфейс eth0.

Нам этом пока все, но мы еще вернемся к нашему серверу, нужно будет в конфиг wg0.conf прописать публичные ключи: macbook, сервера NAS (HomePC) и потом дополнительно ноутбук Laptop, а пока перейдем к настройке первого ноутбука.


Создание ключей и настройка WG на MacBook

Для начала, нужно установить WireGuard на MacBook, но учитывая что он у меня уже стоит и установка максимально проста, я опущу этот момент. Перейдем сразу к созданию ключей. Принцип и команды такие же, как и для сервера. Для удобства, создадим отдельный каталог wg_server, в нем и создадим наши ключи.

Создадим конфигурационный файл для создания туннеля wireguard wg_server.conf с содержимым:

[Interface]
PrivateKey = <MacBookPrivateKey>
Address = 10.0.0.2/24

[Peer]
PublicKey = <ServerPublicKey>
Endpoint = <ip public server VDS>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Сохраним и закроем наш конфиг. Теперь давайте создадим наш каталог для удобства командой

mkdir wg_server

и перейдем в нее командой

cd wg_server

далее командой создадим приватный и публичный ключ

wg genkey | tee macbook_privatekey | wg pubkey > macbook_publickey

и выведем на экран приватный ключ для последующего копирования и вставку в конфиг wg_server.conf, а так же вставляем публичный ключ server_publickey

Сохраняем наш конфиг и закрываем, а далее импортируем его в wireguard.

Давайте отредактируем наш конфиг туннеля и допишем DNS = 8.8.8.8 (для работы интернета во время vpn соединения)

Затем нам необходимо скопировать публичный ключ c MacBook и добавить его на наш сервер VDS

Командой cat macbook_publickey выводим публичный ключ и копируем его

Вставляем в конфиг wg0.conf на сервере VDS в секцию Peer Macbook

На устройстве Macbook мы закончили, теперь перейдем к серверу NAS (HomePC).


Создание ключей и настройка WG на HomePC (Домашний NAS сервер)

Установка так же проста, как и на Macbook, по этому перейдем сразу к настройке. 
Ключи генерируются при создании туннеля, так что все еще проще. Открываем wireguard и выбираем добавить пустой туннель.

Откроется окно с конфигом в котором уже будут прописаны поля с ключами. Но все же выложу конфиг

[Interface]
PrivateKey = <HomePCPrivateKey>
Address = 10.0.0.3/24
DNS = 8.8.8.8

[Peer]
PublicKey = <ServerPublicKey>
Endpoint = <server public ip VDS>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Копируем публичный ключ с NAS сервера 

Вставляем его на сервере VDS в конфиг wg0.conf

Отлично, мы собрали все ключи в наш конфиг на сервере VDS WireGuard

Далее находясь на сервере VDS запускаем службу wireguard и добавляем в автозагрузку командами:

sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0

Проверяем службу на успешный запуск

На этом настройки завершены. Давайте активируем на всех устройствах wireguard и проверим работоспособность.


Проверка работы WG

Попробуем с сервера VDS пустить ping до нашего домашнего сервера NAS (HomePC).

Отлично, связь есть.

Перейдем теперь на наш ноутбук Macbook и проверим, что подключены мы к мобильному интернету раздающегося с телефона (что я в не в одной сети с сервером NAS).

Удостоверимся, что MacBook в не в одной сети с сервером NAS и попробуем пустить ping до домашнего сервера по ранее выделенному ему ip.

Пинга нет. Мы в отдельной сети от домашней.

Проверим соединения и увидим, что MacBook подключен к wireguard используя конфиг wg_server:

Тут я немного промахнулся и случайно пинганул сам себя на MacBook 😂.

Сервак уже снесен, скрин с верным пингом не смогу сделать, зато остались скрины с подключением MacBook к сетевому диску на нашем NAS сервере, а также с настройкой соединения к нему по RDP:

Давайте попробуем подключить наш сетевой диск домашнего сервера (HomePC).

Как мы с вами видим, диски успешно подключились.

Давайте теперь попробуем подключиться по RDP к нашему серверу в домашней сети.

Подключение прошло успешно.

Как видно, все прекрасно работает, но что если нужно подключить новое устройство? Давайте покажу добавление еще одного устройства (ноутбук Laptop) на базе Astra Linux Smolensk 1.7.6


Подключение нового устройства в WG

Устанавливаем wireguard на данное устройство командой

sudo apt install -y wireguard

После создаем каталог wg_server (для удобства) и переходим в него командами

mkdir wg_server && cd wg_server

далее командами создаем приватный и публичный ключ

wg genkey | tee laptop_privatekey | wg pubkey > laptop_publickey

и выводим на экран для дальнейшего копирования на удаленный сервер VDS

Теперь подключаем к нашему серверу VDS (предварительно закинув ssh ключи c VDS сервера  на наш ноутбук Laptop)

Дописываем в наш конфиг /etc/wireguard/wg0.conf еще одного [Peer] и присваиваем ему ip 10.0.0.4

Сохраняем и выходим, а после перезапускаем службу wg

sudo systemctl restart wg-quick@wg0

После возвращаемся на наш ноутбук Laptop и создаем конфигурационный файл для wireguard командой

sudo vim /etc/wireguard/wg0.conf

и содержимым

вставив попутно приватный ключ от ноутбук Laptop_privatekey и server_publickey

Сохраняем и закрываем, а после командой

wg-quick up wg0

запускаем наш wireguard

 

Теперь командой ping проверим доступность сервера VDS 

Отлично, доступность к серверу VDS есть.

Теперь давайте тоже проверим RDP подключение к NAS серверу и подключение сетевого диска с него же.

Подключение по RDP прошло успешно, теперь давайте подключим сетевой диск.

Сетевой диск подключился успешно, давайте попробуем даже что-то скопировать тяжелое с него.

Все прекрасно работает.

 

Если Вам понравилась статья, Вы можете отблагодарить автора донатом