Статьи → Сервера → Часть 5. WireGuard + VDS: обход двойного NAT …
Сервера Актуальная

Часть 5. WireGuard + VDS: обход двойного NAT провайдера для удалённого доступа

Andrew ⚡ Администратор
(обновлено 30.06.2026)
839 v1.0
Вот мы подобрались к завершающей стадии. Здесь мы будем работать не только с нашим сервером, но и с сервером VDS, а так же конечными устройствами.

Настройки сервера VDS

Начнем мы с сервера VDS. Предположим, что вы уже приобрели любой сервер с белым IP адресом, а может он у вас уже был, не важно. Нам нужен сервер с белым IP адресом.

1. Настраиваем маршрутизацию через iptables, но чтобы она после перезагрузки не слетела, мы ее сохраним в /etc. Выполним ряд команд. Но перед этим, незабываем узнать название сетевого интерфейса и подставляем в команду свое название! В моем случае это ens3. Чтобы узнать название, можно воспользоваться простой командой ip -br a

sudo sysctl -w net.ipv4.ip_forward=1

sudo iptables -A FORWARD -i wg0 -j ACCEPT

sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

sudo sh -c "echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-sysctl.conf"

mkdir -p /etc/iptables

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

2. Устанавливаем wireguard

sudo apt install -y wireguard

установка wireguardустановка wireguard

Переходим в /etc/wireguard

cd /etc/wireguard/

Теперь сгенерируем открытую и закрытую часть (ключей) для сервера wireguard. Они понадобятся для создание туннелей между устройствами.

wg genkey | tee server_privatekey | wg pubkey > server_publickey

Данной командой мы сразу сгенерировали и записали в файл server_privatekey (закрытую часть) и server_publickey (открытую часть).

генерируем ключи

Теперь создадим конфиг, wireguard по нему будет понимать, кто есть кто (пиры) и какой ip адрес давать хосту.

Так как у меня на сервере настроен еще firewall в виде ufw, то я добавлю в исключение порт, по которому будет работать wireguard.

ufw allow 51820/udp

ufw

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

cat server_privatekey

Откроем конфиг и заполним ключи

sudo nvim /etc/wireguard/wg0.conf

Пример готового конфига wireguard.

[Interface] - ваш сервер с wireguard, а [Peer] - ваши устройства (компьютеры, планштеы, телефоны итд).

Там где PrivateKey, вставляем приватный ключ, что копировали ранее, а PublicKey с устройств (будет дальше по статье).

Незабываем заменить название интерфейса в конфиге /etc/wireguard/wg0.conf с ens3 на свой!
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey =
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

# Клиент 1 (NextCloud)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.2/32

# Клиент 2 (Home-PC)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.3/32

# Клиент 3 (MacBook Air)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.4/32

# Клиент 4 (Xiaomi 13)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.5/32

Конфиг wg0.conf

Пока заполним только данные сервера, сохраняем и выходим. [Peer] можно оставить, как узнаем публичные ключи устройств, изменим и допишем в конфиге.

После выхода из конфига, запустим wireguard и добавим в автозагрузку.

systemctl start wg-quick@wg0

systemctl enable wg-quick@wg0


Сервер NextCloud

Теперь переходим к настройке клиента wireguard на сервере с nextcloud (Intel NUC). Так же ставим wireguard.

sudo apt install -y wireguard

установка wireguard

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

mkdir wg_server && cd wg_server

Генерируем ключи

wg genkey | tee nextcloud_privatekey | wg pubkey > nextcloud_publickey

генерируем ключи

Выводим содержимое закрытого ключа. Тут аналогия точно такая же как с сервером wireguard. Приватный ключ мы записываем в [Interface], а публичный пойдет в конфиг сервера wireguard, а вот публичный сервера wireguard пойдет в наш конфиг nextcloud.

sudo nvim /etc/wireguard/wg0.conf

Создаем конфиг (ниже представлен готовый конфиг)

[Interface]
PrivateKey = ВАШ_ПРИВАТНЫЙ_КЛЮЧ(nextcloud_SERVER)
Address = 10.0.0.2/24

[Peer]
PublicKey = ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ(wireguard_SERVER)
Endpoint = БЕЛЫЙ_АЙПИ_СЕРВЕРА_WIREGUARD:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

Идем на сервер wireguard, копируем вывод значения публичного ключа server_publickey и вставляем в конфиг на сервере nextcloud в секцию [Peer]. Так же указываем белый ip адрес вашего сервера vds с wireguard. P.s.: ip адреса 10.0.0.0/24 можете написать любые.

Команда на сервере [Wireguard (VDS)]

cat server_publickey

конфиг nextcloud wg0

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

Запускаем службу и добавляем в автозагрузку.

sudo systemctl start wg-quick@wg0

sudo systemctl enable wg-quick@wg0

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

sudo wg-quick up wg0 - включить

sudo wg-quick down wg0 - выключить

запуск службы


Клиентская машина

Теперь перейдем к настройке первого клиента для подключения к серверу nextcloud через посредника, сервера wireguard (vds).

По аналогии, ставим wireguard на клиенте.

sudo apt install -y wireguard

Создаем так же директорию для хранение ключей (рекомендую спрятать их).

mkdir wg_server && cd wg_server

Генерируем ключи

wg genkey | tee homePC_privatekey | wg pubkey > homePC_publickey

Выводим и копируем приватный ключ для конфига.

cat homePC_privatekey

Создаем конфиг wg0.conf

sudo nvim /etc/wireguard/wg0.conf

Ниже представлен готовый wg0.conf

[Interface]
PrivateKey = ВАШ_ПРИВАТНЫЙ_КЛЮЧ(homePC)
Address = 10.0.0.3/24

[Peer]
PublicKey = ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ(wireguard_SERVER)
Endpoint = БЕЛЫЙ_АЙПИ_СЕРВЕРА_WIREGUARD:51820:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

Как уже делали ранее.

Идем на сервер wireguard, копируем вывод значения публичного ключа server_publickey и вставляем в конфиг на клиенте в секцию [Peer]. Так же указываем белый ip адрес вашего сервера vds с wireguard. P.s.: ip адреса 10.0.0.0/24 можете написать любые.

Команда на сервере [Wireguard (VDS)]

cat server_publickey

Запускаем службу и добавляем в автозагрузку.

sudo systemctl start wg-quick@wg0

sudo systemctl enable wg-quick@wg0


Дописываем конфиг wg0.conf на сервере wireguard

У нас есть:

  • Сервер WireGuard;
  • Сервер NextCloud;
  • Клиент HomePC.

Приватные ключи и публичные на сервере NextCloud и HomePC мы прописали в конфигах wg0.conf. Наша задача теперь взять публичные ключи NextCloud и HomePC и добавить их в конфиг wg0.conf сервера WireGuard в секции Peer.

После того, как вы прописали ключи, сохраните конфиг и перезапустили службу wg-quick@wg0 на сервере wireguard.

systemctl restart wg-quick@wg0

Для проверки кто подключен к серверу wireguard можно воспользоваться командой

sudo wg show


Тестирование

Теперь завершающий этап, перейдем к тестированию.

В моей локальной сети находятся: HomePC и сервер Nextcloud. На HomePC я создам директорию и расшарю ее. Попробую подключиться с помощью wireguard к ней. Для этого за кадром я добавлю macbook air в качестве еще одного клиента (peer) на сервере wireguard, все по аналогии, ничего нового.

Macbook я подключу к мобильному интернету и попробую подключиться к nextcloud и homePC.

создание шары на homePC

Я перешел в раздел Музыка, создал файл Работает.txt с содержимым =)

Теперь я этот файл сделаю доступным с помощью python.

python сервер

С помощью python server я сделал общедоступной папку Музыка. Если находясь в локальной сети зайти по адресу моего HomePC и вбить порт 8000, то в браузере я увижу файл Работает.txt, но с интернета я этого никак не смогу сделать. Теперь включим wireugard на HomePC и Macbook air.

Как можно заметить, я успешно подключился по адресу из подсети wireguard 10.0.0.3 и зашел на порт 8000, тем самым получил доступ. Проще говоря, я зашел с macbook который подключен к мобильному интернету на общедоступную папку которая находится в домашней сети по адресу 192.168.31.

общедоступная папка музыка

А теперь попробуем подключиться к nextcloud с этого же ноутбука.

подключение к nextcloud из интернета

Видим, что тоже успешно зашел и авторизовался по адресу 10.0.0.2:8443

Наша схема полностью работает! Теперь мы можем подключаться в нашу домашнюю сеть, к любому проекту который вы развернете у себя дома, необязательно nextcloud. Как я уже говорил ранее, у меня используются еще 3 проекта. 

Теперь подключим телефон. Я использую Android телефон, загрузил с плеймаркета wireguard, все интуитивно понятно там, указал так же настройки, перекинул ключ на сервер wireguard, создал еще один peer, перезапустил службу. Попробуем подключиться с телефона (так же с мобильной сетью).

приложение nextloud на android

Как видим, я добавил еще один аккаунт, где адрес подключения не внутрней сети 192.168.31.60 а 10.0.0.2. Так же видим, что я успешно подключен как раз к 10.0.0.2.

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

финальный конфиг подключения

статус подключения

Что по итогу мы имеем? Полностью защищенное хранение данных. Все файлы хранятся у нас дома, доступ осуществляется по зашифрованному туннелю только тогда, когда мы включим его. Есть ли минусы при такому домашнем облаке? Ну конечно есть, как и везде) Первый минус - это то что нужно постоянно включать туннель. Хочешь зайти с телефона, сначала нужно зайти в приложение wireguard, перевести ползунок на wg0 на вкл, потом уже открывать приложение nextcloud или через браузер вбивать 10.0.0.2:8443. Не всегда быстро и удобно. Я уверен, что можно оптимизировать этот процесс и ускорить его с помощью сторонних настроек или приложений. Второй момент, случай реальной эксплуатации. На момент написания этой статьи, сервер работает уже 2 месяца и за все время случился один раз, когда жена протерла пыль на шкафу где стоит Intel NUC, из-за плохого контакта пропала сеть на нем. Когда мне понадобилось подключиться с интернета к моему nextcloud, я не смог этого сделать, так как сервер был недоступен. Вернее туннель до VDS работал, а вот сам Intel NUC был недоступен. Благо жена была дома, пошевелила провод и он стал доступен. Потом переобжал кабель и проблем больше не было. Третий минус - это конечно же потеря данных. Есть большой риск потери данных в отличии от готовых решений. Но все эти минусы можно решить. Можно купить диски, настроить RAID, поставить ИБП итд итп, но разом это очень затрано, а если постепенно улучшать свою хранилку, то минусов у нее будет крайне мало.

Если Вам нравятся контролировать свои файлы, то конечно я бы рекомендовал свое облачное хранилище на базе NextCloud. Если вы дочитали до этого момента, то мне очень приятно, что вы решили развернуть NextCloud у себя дома/на работе по моей инструкции) Удачного пользования!

0
Andrew

DevOps Engineer

1 50 статей
Комментарии (0)
Войдите, чтобы оставить комментарий

Пока нет комментариев. Будьте первым!