Настройки сервера 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


Переходим в /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

Далее нам необходимо записать закрытый ключ в конфиг wg0.conf, выведем его на экран и скопируем.
cat server_privatekey
Откроем конфиг и заполним ключи
sudo nvim /etc/wireguard/wg0.conf
Пример готового конфига wireguard.
[Interface] - ваш сервер с wireguard, а [Peer] - ваши устройства (компьютеры, планштеы, телефоны итд).
Там где PrivateKey, вставляем приватный ключ, что копировали ранее, а PublicKey с устройств (будет дальше по статье).
[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

Пока заполним только данные сервера, сохраняем и выходим. [Peer] можно оставить, как узнаем публичные ключи устройств, изменим и допишем в конфиге.
После выхода из конфига, запустим wireguard и добавим в автозагрузку.
systemctl start wg-quick@wg0
systemctl enable wg-quick@wg0
Сервер NextCloud
Теперь переходим к настройке клиента wireguard на сервере с nextcloud (Intel NUC). Так же ставим wireguard.
sudo apt install -y 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

После заполнения всех полей с приватными и публичными ключами, сохраняем конфиг и выходим из него.
Запускаем службу и добавляем в автозагрузку.
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
Как уже делали ранее.
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.

Я перешел в раздел Музыка, создал файл Работает.txt с содержимым =)
Теперь я этот файл сделаю доступным с помощью python.

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

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

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

Видим, что тоже успешно зашел и авторизовался по адресу 10.0.0.2:8443
Наша схема полностью работает! Теперь мы можем подключаться в нашу домашнюю сеть, к любому проекту который вы развернете у себя дома, необязательно nextcloud. Как я уже говорил ранее, у меня используются еще 3 проекта.
Теперь подключим телефон. Я использую Android телефон, загрузил с плеймаркета wireguard, все интуитивно понятно там, указал так же настройки, перекинул ключ на сервер wireguard, создал еще один peer, перезапустил службу. Попробуем подключиться с телефона (так же с мобильной сетью).

Как видим, я добавил еще один аккаунт, где адрес подключения не внутрней сети 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 у себя дома/на работе по моей инструкции) Удачного пользования!