Установка WireGuard на Synology NAS в DSM 7 и DSM 6

Всем привет!!!

Давно хотели запустить 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.

Установка wireguard на Synology NAS в DSM 7 и DSM 6

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


У этой записи 32 комментариев

  1. turbocopy

    подключился к nas по ssh скопировал команду для старта и вот такой ответ
    sudo: /var/packages/WireGuard/scripts/start: command not found

  2. turbocopy

    220+ DSM 6.2 на скрине у тебя версия 1.0.20220627 у меня установилось 1.0.20201221
    может в этом проблема? кавычки не ставил

    1. Я компилил только для DSM 7. вам нужно скачать для DSM 6 и эту команду вам не нужно, у вас из центра пактов можно запускать сервис.

  3. turbocopy

    запускать можно, а как настраивать и управлять вот чем вопрос

  4. turbocopy

    Спасибо Александр. буду тренироваться

  5. Alex

    Чтобы не мучаться с консолью можно через 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

    1. dom7800

      Причем здесь докер, таск шедулер и нативный sdk пакет? Дайте более полный мануал ваших мыслей!

        1. dom7800

          Александр, именно так у меня сейчас и реализовано. На убунту сервер, через докер, через wg-easy. Я хотел бы без виртуальных машин на синолоджи иметь WG. Но мне больше всего импонирует wg-easy, т.к. он нагляден и быстр в конфигурировании. Вот именно его (wg-easy) есть возможность крутить на синолоджи?

          1. Docker это не виртуалка и он был нужен только что бы создать пакет spk для сино, причем создать пакет на другом сервере, а потом установить spk через центр пакетов. Я не любитель wireguard, не буду говорить тут почему. Первый раз слышу про wg-easy, поищу в яндексе, возможно сделаю мануал по установке, спасибо за идею.

        2. dom7800

          По-моему мы с вами о разном говорим. Я изначально ответил на коммент Alex, который через докер и предлагал развернуть wg-easy, я и отписал изначально, что причем здесь его мануал на разворачивание wg-easy в докере, когда пакет .spk ставится нативно в сино, Вы, Александр, написали под моим комментом, что собирали пакеты spk через докер. Затем я уже отвечаю на ваш коммент, что сейчас у меня как раз на сино 720+ крутится виртуалка ubuntu server 22.04, в которой развернут докер и внутри его крутится уже wg-easy, что изначально и предложил Alex скопипастив инструкцию с гитхаба weejewel (автора wg-easy). Вот именно ему я и отписал, что причем здесь его коммент про докер, таск шедулер и попросил развернуть его коммент более развернуто, т.е. если я его правильно понял, то он хотел предложить в довесок к spk-пакету вот такой вариант. Хотя этот вариант самостоятельный и как мне видится нативно его не установить .

          1. Спасибо за развернутый ответ. Видимо я напутал кто чего и про что. Надо мне быть внимательнее.

          2. Денис

            Александр, подскажите пожалуйста у меня DS418 и в нем нет докера в пакетах, где можно взять ручной инсталлятор подскажите пожалуйста.

            1. Вам не подходит версия из пакетов synocommunity ? Где взять докер я точно не знаю для вашего устройства.

              1. Денис

                На мою версию нет докера на 7dsm с завода 🙁 лутше бы вообще не покупал эту модель, столько бабок отдал и все на ветер.

                1. Александр Linux

                  К сожалению не все что мы покупаем оправдывает наше ожидание и тут не всегда поможет тщательное прочтение документации, характеристик и прочего. Я так рено дастер взял в 2015 году, жалел 5 лет об этом, а когда продавал понял, что в принципе машина норм, но в своем смысле, в своем сегменте ценовом.

      1. dom7800

        Александр, если разрешите, то
        Дополню инструкцией, как установить wg-easy и управлять wireguard клиентами через GUI

      1. Вася Дуркин

        Не работает, я его уже пробовал. Пытался сам скомпилировать, но при установке, выдаёт ошибку. Есть идеи, как скомпилировать рабочий билд?

  6. Добрый день!

    Спасибо Вам оргромное за проделанный труд. При запуске сервиса столкнулся с проблемой:

    `
    [#] resolvconf -a wg0 -m 0 -x
    /usr/local/bin/wg-quick: line 32: resolvconf: command not found
    `

      1. Разобрался проблема была в формате AllowedIPs, необходимо было указать: `AllowedIPs = 0.0.0.0/1, 128.0.0.0.1`

      2. Пример конфига с удаленным 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 может отличаться

  7. Илья

    После данной команды, 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”

Добавить комментарий

12 + 5 =