Всем привет!!!
Давно хотели запустить Wireguard на своем Synology NAS, но не могли найти как это сделать? Тогда вам сюда. В этой статье я выложу готовые сборки пакетов SPK WireGuard для DSM 7 и расскажу, где скачать пакеты для DSM 6.
А в самом низу инструкция от другого автора: wg-easy и управлять wireguard клиентами через GUI

!!! ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ !!!
Вы используете все здесь на свой страх и риск. Я не несу ответственности, если это сломает ваш NAS. Реально это не должно привести к потере данных, но это может сделать ваш NAS недоступным, если что-то пойдет не так.
Нужно отметить, что запуск и настройка пакета WireGuard для Synology NAS осуществляется через командную строку по протоколу SSH. Графического интерфейса нет!!! Поэтому вы должны обладать навыками работы в консоли Linux.
Стоит начать с того, откуда я это все взял. На github выложены исходники Wireguard и собраны готовые пакеты в релизах для DSM 6. Что бы узнать архитектуру вашего процессора перейдите на сайт помощи Synology. Скачать готовые пакеты для DSM 6 лучше с сайта github. А вот для DSM 7 автор не выложил готовые пакеты. Поэтому я взялся за это дело самостоятельно, благо автор расписал как скомпилировать данные пакеты самостоятельно. Как это сделать я опишу в конце статьи.

Скачать готовые SPK пакеты WireGuard для DSM 7 можно отсюда. Если вашей архитектуры нет там, то пишите в комментариях, я сделаю.
Установка выполняется вручную через Центр пакетов в DSM. Но только для DSM 7 нужно во время установки убрать галочку “Запустить после установки”. В противном случаи пакет установится поврежденным. Это связано с предотвращением запуска пакетов, не подписанных Synology, с привилегиями root.

Затем, что бы запустить пакет нужно подключиться к NAS по SSH и ввести команду:
sudo /var/packages/WireGuard/scripts/start
Если вы разбираетесь в настройке WireGuard то дальнейшие шаги для вас будут понятными:
$ sudo su – # sudo mkdir /etc/wireguard # cd /etc/wireguard # umask 077; wg genkey | tee privatekey | wg pubkey > publickey # vi wg0.conf (конфигурацию ниже вы можите скопировать и вставить в редактор) [Interface] Address = 10.0.1.1/16 PrivateKey = (server private key) ListenPort = 51820 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o -%i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = (client public key) AllowedIPs = 10.0.1.2/32 # cat privatekey (copy the privatekey) # vi wg0.conf (paste the private key in the PrivateKey line)
После настройки клиента введите открытый ключ клиента в конфигурацию на Synology NAS. Добавьте открытый ключ клиента в соответствующий раздел PEER файла конфигурации сервера и сохраните изменения.
$ sudo vi /etc/wireguard/wg0.conf
Команды для управления сервисом:
$ sudo wg-quick up wg0 (Запустить WireGuard сервис) $ sudo wg show wg0 (Проверка работы WireGuard) $ sudo wg-autostart enable wg0 (Запускать WireGuard сервис при старте системы) $ sudo wg-autostart disable wg0 (Отключить авто старт WireGuard при старте системы)
Теперь как собрать самостоятельно. Для этого нам понадобится Linux, я использую Ubuntu 22.04 сервер. Установить ее можно на виртуальную машину, подключиться по SSH и ввести команды:
# Подготовка sudo -i cd /opt/ apt update apt upgrade apt install docker.io apt install git # Скачиваем и создаем необходимые файлы с GitHub git clone https://github.com/runfalk/synology-wireguard.git cd synology-wireguard/ docker build -t synobuild . # Что бы скомпилировать пакет SPK выполним команду (одна строка) docker run --rm --privileged --env PACKAGE_ARCH=<arch> --env DSM_VER=<dsm-ver> -v $(pwd)/artifacts:/result_spk synobuild # Мой пример docker run --rm --privileged --env PACKAGE_ARCH=geminilake --env DSM_VER=7.0 -v $(pwd)/artifacts:/result_spk synobuild
Начнется процесс сборки, который выглядит примерно так:

Процесс не быстрый, поэтому дождитесь завершения.
Если все пройдет гладко, то в папке artifacts будет лежать готовый spk пакет. Скачайте его с Ubuntu по SFTP (FTP поверх SSH). Это умеет делать без проблем FileZilla.
Установка WireGuard на Synology NAS в DSM 7 и DSM 6
Ниже дополнительная инструкция от dom7800, который написал ее в комментариях, а я не удержался и перенес ее сюда. Написано все довольно подробно и главное я проверял, работает.
wg-easy и управлять wireguard клиентами через GUI
Дополню инструкцией, как установить wg-easy и управлять wireguard клиентами через GUI
На руках у вас должен быть .spk пакет (скачать можно из этой статьи, спасибо Александру) и белый WAN-адрес, ну или DynDNS на крайняк, ссылка на мануал автора https://bafista.ru/synology-nastrojka-ddns/
Идем на NAS:
Открываем доступ к NAS по SSH, если еще не открыт, а затем качаем Докер и ставим spk:
Панель управления > Терминал и SNMP > Включить службу SSH
Центр пакетов > Устанавливаем Docker
Центр пакетов > Установка вручную > WireGuard-geminilake-1.0.20220627.spk > Обязательно снимаем галку “Запустить после установки”
File Station > и в Docker создаем подпапку wg-easy
Все на NAS закончили, он нам больше не нужен. Теперь идем в терминал на компе
Подключаемся по SSH: ssh nasadmin@192.168.70.4
Запускаем WireGuard, что установили вручную из .spk:
sudo /var/packages/WireGuard/scripts/start
Затем вставляем этот код целиком (т.к. wg-easy не установлен, то скачает последнюю версию автоматически. В репах Docker’a он есть): Но только предварительно замените на свои myhomeip.synology.me и Pa$$w0rd, остальное не трогаем.
sudo docker run -d \ --name=wg-easy \ -e WG_HOST=myhomeip.synology.me \ -e PASSWORD=Pa$$w0rd \ -v /volume1/docker/wg-easy:/etc/wireguard \ -p 51820:51820/udp \ -p 51821:51821/tcp \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --sysctl="net.ipv4.ip_forward=1" \ --restart unless-stopped \ weejewel/wg-easy
Закрываем терминал, на нем тоже закончили, идем в браузер.
Открываем http://192.168.70.4:51821 вводим Pa$$w0rd и убеждаемся, что работает. Создаем для себя первого клиента, качаем конфиг на комп.
Рекомендации по настройке конфига клиента, после того как создадите юзера и скачаете к себе на комп:
замените DNS вместо 1.1.1.1 на 8.8.8.8
PersistentKeepalive = 20, потому как, скорее всего, ваш peer будет за NAT-ом (ваш телефон или нотик в кафешке),
чтобы туннель не упал. Часто на рукопожатие, пир уже не отвечает, а так, ваш NAS каждые 20 сек. будет посылать пустой пакет, чтобы держать входящее подключение на вашем пире.
PS: Если не хотите весь трафик гнать через wireguard, то также измените AllowedIPs = 0.0.0.0/0, ::/0 на
AllowedIPs = 10.8.0.1/32, 192.168.70.0/24
PPS: Не забудь на роутере пробросить udp 51820 на 192.168.70.4. Высовывать наружу tcp 51821 не советую, нет смысла.
2Александр: Я проводил эксперимент. Канал 100 Мбит/сек. поднят L2TP/IPsec. Делаю нагрузку на канал. Через туннель на максимуме идет 40 Мбит/сек. Выключаю L2TP/IPsec, теперь поднимаю WireGuard. Повторяю нагрузку и на WireGuard туннель на все 100 Мбит/сек. Вот и вся разница 🙂 Там еще OpenVPN был и древний PPTP, но не о них сейчас речь. Обрати внимание на WG, он в лине на уровне ядра уже давно реализован Торвальдсом. Крутой протокол!
подключился к nas по ssh скопировал команду для старта и вот такой ответ
sudo: /var/packages/WireGuard/scripts/start: command not found
либо убрать кавычке, либо что-то не так установили
220+ DSM 6.2 на скрине у тебя версия 1.0.20220627 у меня установилось 1.0.20201221
может в этом проблема? кавычки не ставил
Я компилил только для DSM 7. вам нужно скачать для DSM 6 и эту команду вам не нужно, у вас из центра пактов можно запускать сервис.
запускать можно, а как настраивать и управлять вот чем вопрос
Я писал и говорил, через командную строку, даже пример привел.
Спасибо Александр. буду тренироваться
Чтобы не мучаться с консолью можно через Task Scheduler поставить wg-easy и через веб интерфейс управлять клиентами.
Пример команды для установки:
docker run -d \
–name=wg-easy \
-e WG_HOST=YOUR_HOST \
-e PASSWORD=YOUR_PASSWORD \
-v /volume1/docker/wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
–cap-add=NET_ADMIN \
–cap-add=SYS_MODULE \
–sysctl=”net.ipv4.conf.all.src_valid_mark=1″ \
–sysctl=”net.ipv4.ip_forward=1″ \
–restart unless-stopped \
weejewel/wg-easy
Причем здесь докер, таск шедулер и нативный sdk пакет? Дайте более полный мануал ваших мыслей!
Это не мысли, это мануал. И делается он через докер.
Александр, именно так у меня сейчас и реализовано. На убунту сервер, через докер, через wg-easy. Я хотел бы без виртуальных машин на синолоджи иметь WG. Но мне больше всего импонирует wg-easy, т.к. он нагляден и быстр в конфигурировании. Вот именно его (wg-easy) есть возможность крутить на синолоджи?
Docker это не виртуалка и он был нужен только что бы создать пакет spk для сино, причем создать пакет на другом сервере, а потом установить spk через центр пакетов. Я не любитель wireguard, не буду говорить тут почему. Первый раз слышу про wg-easy, поищу в яндексе, возможно сделаю мануал по установке, спасибо за идею.
По-моему мы с вами о разном говорим. Я изначально ответил на коммент Alex, который через докер и предлагал развернуть wg-easy, я и отписал изначально, что причем здесь его мануал на разворачивание wg-easy в докере, когда пакет .spk ставится нативно в сино, Вы, Александр, написали под моим комментом, что собирали пакеты spk через докер. Затем я уже отвечаю на ваш коммент, что сейчас у меня как раз на сино 720+ крутится виртуалка ubuntu server 22.04, в которой развернут докер и внутри его крутится уже wg-easy, что изначально и предложил Alex скопипастив инструкцию с гитхаба weejewel (автора wg-easy). Вот именно ему я и отписал, что причем здесь его коммент про докер, таск шедулер и попросил развернуть его коммент более развернуто, т.е. если я его правильно понял, то он хотел предложить в довесок к spk-пакету вот такой вариант. Хотя этот вариант самостоятельный и как мне видится нативно его не установить .
Спасибо за развернутый ответ. Видимо я напутал кто чего и про что. Надо мне быть внимательнее.
Александр, подскажите пожалуйста у меня DS418 и в нем нет докера в пакетах, где можно взять ручной инсталлятор подскажите пожалуйста.
Вам не подходит версия из пакетов synocommunity ? Где взять докер я точно не знаю для вашего устройства.
На мою версию нет докера на 7dsm с завода 🙁 лутше бы вообще не покупал эту модель, столько бабок отдал и все на ветер.
К сожалению не все что мы покупаем оправдывает наше ожидание и тут не всегда поможет тщательное прочтение документации, характеристик и прочего. Я так рено дастер взял в 2015 году, жалел 5 лет об этом, а когда продавал понял, что в принципе машина норм, но в своем смысле, в своем сегменте ценовом.
Александр, если разрешите, то
Дополню инструкцией, как установить wg-easy и управлять wireguard клиентами через GUI
Спасибо, добавил в статью.
Привет! Скомпилируй, пожалуйста, под DS3615xs, Bromolow. Заранее спасибо.
Здравствуйте. Должен подойти этот WireGuard-broadwellnk-1.0.20220627.spk, он есть в ссылке
Не работает, я его уже пробовал. Пытался сам скомпилировать, но при установке, выдаёт ошибку. Есть идеи, как скомпилировать рабочий билд?
Какую ошибку выдает? Вы его ставите на DSM 7 ?
Да, на DSM 7.1.0-42661. Скриншот по ссылкам.
1. https://ibb.co/MDNcfYP
2. https://ibb.co/CbHxpQ8
Попробуйте от дсм 6 с гитхаба скачать и установить, вдруг ….
Добрый день!
Спасибо Вам оргромное за проделанный труд. При запуске сервиса столкнулся с проблемой:
`
[#] resolvconf -a wg0 -m 0 -x
/usr/local/bin/wg-quick: line 32: resolvconf: command not found
`
Не сталкивался с таким. От имени рута запускаете?
Разобрался проблема была в формате AllowedIPs, необходимо было указать: `AllowedIPs = 0.0.0.0/1, 128.0.0.0.1`
Пример конфига с удаленным VPN:
[Interface]
Address = 0.0.0.0/0 // Тут свой адрес
PrivateKey = $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ // Тут свой ключ
MTU = 1500 // см. MTU на удалённом сервере
[Peer]
PublicKey = $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ // Тут свой ключ
PresharedKey = $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ // Тут свой ключ
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1 // Весь трафик через WireGuard
Endpoint = 0.0.0.0:00000 // Адрес и порт удаленного сервера
PersistentKeepalive = 25 // Keepalive может отличаться
После данной команды, NAS исчез из сети, и не пингуется, упал наглухо. Что делать?)
“sudo docker run -d \
–name=wg-easy \
-e WG_HOST=myhomeip.synology.me \
-e PASSWORD=Pa$$w0rd \
-v /volume1/docker/wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
–cap-add=NET_ADMIN \
–cap-add=SYS_MODULE \
–sysctl=”net.ipv4.conf.all.src_valid_mark=1″ \
–sysctl=”net.ipv4.ip_forward=1″ \
–restart unless-stopped \
weejewel/wg-easy”
Попробуйте перегрузить, если не выйдет запустите Synology Assistent