Собственный частный интернет с Nanocl и WireGuard
· leone
Хотите быстрый и защищённый доступ к частной сети из любой точки мира? Устали полагаться на сторонние VPN? С WireGuard и Nanocl можно запустить собственный VPN-сервер за минуты без глубоких навыков системного администрирования!
В этом руководстве вы узнаете, как:
- Настроить VPN-сервер WireGuard на любой машине Linux
- Использовать Docker и Nanocl для простого и надёжного развёртывания
- Безопасно подключаться к внутренним сервисам откуда угодно
Nanocl + WireGuard позволяет безопасно публиковать и обнаруживать внутренние сервисы с минимальными затратами на эксплуатацию.
Начнём и возьмём конфиденциальность под свой контроль!
Предварительные требования
- Сервер Linux с публичным IP-адресом
- На нём будет работать VPN WireGuard; он станет защищённым шлюзом.
- Установленный Docker
- Docker запускает сервисы в изолированных контейнерах.
- Установленный Nanocl
- Nanocl упрощает оркестрацию контейнеров и включает прокси и DNS-сервер.
Установка Docker
Следуйте официальному руководству установки Docker для своего дистрибутива Linux. Это быстро и просто!
Установка Nanocl
Скачайте и установите бинарный файл Nanocl CLI этой командой:
curl -fsSL https://download.next-hat.com/scripts/get-nanocl.sh | shЗатем создайте группу Nanocl и установите внутренние сервисы Nanocl:
sudo groupadd nanocl
sudo usermod -aG nanocl $USER
newgrp nanocl
nanocl installРазвёртывание WireGuard (вашего частного VPN)
Перейдём к главному! Используем популярный образ linuxserver/wireguard .
Готовый Statefile доступен в нашем реестре Nanocl .
Он получает пользователей для создания из переменных окружения.
Создайте файл .env со следующим содержимым:
WG_USERS=myuserМожно добавить несколько пользователей через запятую:
WG_USERS=user1,user2,user3Сохраните Statefile 0.18 ниже как wireguard.yml и примените его:
WG_USERS=myuser nanocl state apply -s ./wireguard.ymlРуководство этого Statefile доступно командой:
nanocl state man -s ./wireguard.ymlСодержимое файла:
ApiVersion: v0.18
Args:
- Name: namespace
Kind: String
Default: wireguard
- Name: puid
Kind: String
Default: 1000
- Name: pgid
Kind: String
Default: 1000
- Name: dns
Kind: String
Default: "1.1.1.1"
- Name: config-path
Kind: String
Default: /opt/containers/wireguard
Namespace: ${{ Args.namespace }}
Cargoes:
- Name: wgsrv
PortBindings:
51820/udp:
- HostPort: "51820"
Dns:
# Nanocl replaces $$INTERNAL_GATEWAY with the selected network gateway.
- $$INTERNAL_GATEWAY
- ${{ Args.dns }}
Containers:
- Name: wireguard
Image: lscr.io/linuxserver/wireguard:latest
Cmd:
- -c
- SERVERURL=$NANOCL_NODE_ADDR sh /init
Env:
- PUID=${{ Args.puid }}
- PGID=${{ Args.pgid }}
# Set this to your desired users, they will be created automatically
# When the container start
# You can add multiple users separated by comma
- PEERS=${{ Envs.WG_USERS }}
- PERSISTENTKEEPALIVE_PEERS=all
HostConfig:
CapAdd:
- NET_ADMIN
Binds:
- ${{ Args.config-path }}/config:/config
Sysctls:
net.ipv4.ip_forward: "1"Пространство имён, PUID, PGID, DNS-сервер и путь конфигурации можно настроить аргументами, например:
WG_USERS=myuser nanocl state apply -s ./wireguard.yml -- --config-path /my/custom/path --puid 1001 --pgid 1001 --dns 8.8.8.8Чтобы получить конфигурацию клиента WireGuard, выполните:
cat /opt/containers/wireguard/config/myuser/myuser.confПример конфигурации:
[Interface]
Address = 10.13.13.2
PrivateKey = 4Kgkxcu27g9s69OSYmSbh6jmvu8kCC8h12XxqrI3uH4=
ListenPort = 51820
DNS = 10.13.13.1
[Peer]
PublicKey = O/xFv4cFdrSok+Ujm9r5J6Laf1PcQv0A4u2T8BWQBQ8=
PresharedKey = ZOKnf2Zp30WVuTYgcFO7M0QH5C0c3/XTYqCevC69vOg=
Endpoint = 92.161.136.52:51820
AllowedIPs = 0.0.0.0/0, ::/0Используйте этот файл для подключения к серверу WireGuard
с любого устройства (Windows, Mac, Linux, мобильного) через официальный клиент WireGuard.
Развёртывание внутренних сервисов
Теперь разверните внутренние сервисы с Nanocl.
Они будут доступны через VPN WireGuard.
Например, развернём простой сервис, возвращающий HTTP-заголовки.
ApiVersion: v0.18
Namespace: global
Cargoes:
- Name: deploy-example
Containers:
- Name: web
Image: ghcr.io/next-hat/nanocl-get-started:latest
Env:
- APP=EXAMPLE
Resources:
- Name: dns.my-domain.internal
Kind: ncdns.io/rule/v0.10
Data:
Network: Internal
Entries:
- Name: my-domain.internal
IpAddress: Internal
- Name: my-domain.internal
Kind: ncproxy.io/rule/v0.15
Data:
Rules:
- Domain: my-domain.internal
Network: Internal
Locations:
- Path: /
Target:
Key: global.deploy-example.c
Port: 9000После подключения к VPN откройте http://my-domain.internal .

Рекомендации по безопасности
- Ограничьте UDP-порт 51820 доверенными IP-адресами через межсетевой экран.
- Храните закрытые ключи в тайне и никогда не передавайте их другим!
- Регулярно обновляйте образы Docker, Nanocl и WireGuard.
- Проверяйте журналы сервера на подозрительные действия.
Устранение неполадок
- Если контейнер WireGuard не запускается, проверьте ошибки в журналах Nanocl.
- Убедитесь, что межсетевой экран пропускает UDP-трафик на порт 51820.
- Проверьте наличие пути конфигурации и возможность записи.
- Проверьте работающие экземпляры командами
nanocl psиnanocl cargo list --namespace your_namespace.
Схема установки

Следующие шаги
Готово! Теперь у вас есть собственный высокопроизводительный VPN-сервер. Поделитесь руководством с друзьями и расскажите об успехе, помогая другим управлять своей конфиденциальностью!