All Projects → runfalk → Synology Wireguard

runfalk / Synology Wireguard

Licence: mit
WireGuard support for some Synology NAS drives

Programming Languages

shell
77523 projects

Labels

Projects that are alternatives of or similar to Synology Wireguard

synology
My Synology automation scripts. Making Synology NAS command line usable
Stars: ✭ 45 (-86.96%)
Mutual labels:  synology
redpill-tool-chain
这是一个测试项目,可能会有不可预测的事情发生(比如:毁损数据、烧毁硬件等等),请谨慎使用。
Stars: ✭ 490 (+42.03%)
Mutual labels:  synology
synoter
A node library to get data from Synology NoteStation.
Stars: ✭ 16 (-95.36%)
Mutual labels:  synology
synology-open-vm-tools
VMware Tools for Synology DSM
Stars: ✭ 93 (-73.04%)
Mutual labels:  synology
spkrepo
Synology Package Repository
Stars: ✭ 100 (-71.01%)
Mutual labels:  synology
synology-update-plex
Script to Auto Update Plex Media Server on Synology NAS
Stars: ✭ 89 (-74.2%)
Mutual labels:  synology
synology-api
A Python wrapper around Synology API
Stars: ✭ 116 (-66.38%)
Mutual labels:  synology
Ftpgrab
Grab your files periodically from a remote FTP or SFTP server easily
Stars: ✭ 300 (-13.04%)
Mutual labels:  synology
phpvirtualbox4dsm
PhpVirtualbox package for Synology DSM
Stars: ✭ 28 (-91.88%)
Mutual labels:  synology
synology-pihole
Install or Update Pi-Hole as Docker Container on a Synology NAS with a Static IP Address
Stars: ✭ 22 (-93.62%)
Mutual labels:  synology
synology-csi
Container Storage Interface (CSI) for Synology
Stars: ✭ 136 (-60.58%)
Mutual labels:  synology
docker-telegraf-influxdb-grafana
Docker Image with Telegraf, InfluxDB and Grafana
Stars: ✭ 17 (-95.07%)
Mutual labels:  synology
synology-dlm-rarbg
RarBG search module for Synology Download Manager
Stars: ✭ 73 (-78.84%)
Mutual labels:  synology
AirConnect-Synology
Updated AirConnect packages for Synology NAS and Synology Router
Stars: ✭ 200 (-42.03%)
Mutual labels:  synology
hpool-miner
chia chia-miner hpool hpool-miner hpool-og-miner hpool-pp-miner Synology RaspberryPi
Stars: ✭ 22 (-93.62%)
Mutual labels:  synology
synology-decrypt
An open source implementation/description of the Synology Cloud Sync encryption/decryption algorithm
Stars: ✭ 91 (-73.62%)
Mutual labels:  synology
FileBasedMiniDMS
This php script sorts your documents (by using hardlinks) into subfolders based on the hashtags it finds in your documents filenames.
Stars: ✭ 35 (-89.86%)
Mutual labels:  synology
Homebridge Syno Spk
This third-party Synology Package simplifies the process of running oznu/docker-homebridge on DSM 6.1.3 or later.
Stars: ✭ 302 (-12.46%)
Mutual labels:  synology
Syno
Simple Node.js wrapper and CLI for Synology DSM REST API 5.x and 6.x.
Stars: ✭ 255 (-26.09%)
Mutual labels:  synology
homebridge-synology
Control your Synology Diskstation with Homekit
Stars: ✭ 135 (-60.87%)
Mutual labels:  synology

WireGuard support for Synology NAS

This package adds WireGuard support for Synology NAS drives. It provides the WireGuard kernel module and the wg/wg-quick commands.

Disclaimer

You use everything here at your own risk. I am not responsible if this breaks your NAS. Realistically it should not result in data loss, but it could render your NAS unaccessible if something goes wrong.

If you are not comfortable with removing your drives from the NAS and manually recover the data, this might not be for you.

FAQ/Known issues

  • The Dns = x.x.x.x setting is unsupported. If you try it you will get the following message: /usr/local/bin/wg-quick: line 31: resolvconf: command not found
  • IPv6 is probably not supported (at least not using wg-quick). Due to the system version of iproute2 being too old <https://lists.zx2c4.com/pipermail/wireguard/2018-April/002687.html>_. You'll get the error message Error: argument "suppress_prefixlength" is wrong: Failed to parse rule type.
  • Everything appears to be OK when running wg show but no traffic is flowing through the tunnel. Apparently there is some kind of race when setting up the interface. The simplest known workaround is to append ; sleep 5; ip route add 10.0.0.0/16 dev wg0 to the PostUp rule. This assumes that your WireGuard IP subnet is 10.0.x.x. See issue #10 <https://github.com/runfalk/synology-wireguard/issues/10>_ for more information.

PRs that solve these issues are welcome.

Compatibility list

All models marked Is working have been confirmed by users to work. If your model has the same platform as one of the working ones, chances are it will work for you too.

========= ========== =========== =========================== Model Platform DSM Version Is working?


DS1019+ apollolake 6.2 Yes DS114 armada370 N/A No (Kernel version too old) DS115j armada370 N/A No (Kernel version too old) DS116 armada38x 6.2 Yes DS1511+ x64 6.2 Yes DS1618+ denverton 6.2 Yes DS1817+ avoton 6.2 Yes DS1815+ avoton 6.2 Yes DS213j armada370 N/A No (Kernel version too old) DS213j armada370 N/A No (Kernel version too old) DS214play armada370 N/A No (Kernel version too old) DS214se armada370 N/A No (Kernel version too old) DS216+II braswell 6.2 Yes DS216se armada370 N/A No (Kernel version too old) DS216Play monaco 6.2 Yes DS218 rtd1296 6.2 Yes DS218+ apollolake 6.2 Yes DS218j armada38x 6.2 Yes DS3617xs broadwell 6.2 Yes DS414slim armada370 N/A No (Kernel version too old) DS415+ avoton 6.2 Yes DS418play apollolake 6.2 Yes DS713+ cedarview 6.2 Yes DS716+II braswell 6.2 Yes DS718+ apollolake 6.2 Yes DS916+ braswell 6.2 Yes DS918+ apollolake 6.2 Yes RS214 armada370 N/A No (Kernel version too old) RS816 armada38x 6.2 Yes ========= ========== =========== ===========================

The minimum required kernel version is 3.10. If you have a kernel version lower than that, WireGuard will not work. You can check your kernel version by logging in through SSH and running the uname -a command.

This project is also confirmed to be compatible with other brand NAS stations using XPEnology <https://xpenology.com/forum/topic/9392-general-faq/>_.

========= ================ ========== =========== =========================== Model Hardware version Platform DSM Version Is working?


HP54NL DS3615xs bromolow 6.2 Yes ========= ================ ========== =========== ===========================

Installation

Check the releases <https://github.com/runfalk/synology-wireguard/releases>_ page for SPKs for your platform. If there is no SPK you have to compile it yourself using the instructions below.

  1. In the Synology DSM web admin UI, open the Package Center and press the Settings button.
  2. Set the trust level to Any publisher and press OK to confirm.
  3. Press the Manual install button and provide the SPK file. Follow the instructions until done.

Now you just need to figure out how to configure WireGuard. There are lots of good guides on how to do that.

To put my WireGuard configuration on the NAS, I used SSH and created a wg-quick configuration in /etc/wireguard/wg0.conf. Then I opened the Control panel, opened the Task scheduler and created Triggered task that runs wg-quick up wg0 on startup.

When running iptables in the PostUp and PostDown rules I needed to toggle the interface to make it work. My full startup task looks like this:

.. code-block:: bash

sleep 60
wg-quick up wg0
sleep 5
wg-quick down wg0
sleep 5
wg-quick up wg0

My /etc/wireguard/wg0.conf looks like this:

.. code-block::

[Interface]
Address = 10.0.1.1/16
PrivateKey = <nas-private-key>
ListenPort = 16666
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <peer-public-key>
AllowedIPs = 10.0.1.2/32

Note that you need to modify the rules if your network interface is not eth0. You can check which name your interface has by running ip a in an SSH session.

Compiling

I've used docker to compile everything, as pkgscripts-ng clutters the file system quite a bit. First create a docker image by running the following command in this repository:

.. code-block:: bash

git clone https://github.com/runfalk/synology-wireguard.git
cd synology-wireguard/
sudo docker build -t synobuild .

Now we can build for any platform and DSM version using:

.. code-block:: bash

sudo docker run --rm --privileged --env PACKAGE_ARCH=<arch> --env DSM_VER=<dsm-ver> -v $(pwd)/artifacts:/result_spk synobuild

You should replace <arch> with your NAS's package arch. Using this table <https://www.synology.com/en-global/knowledgebase/DSM/tutorial/General/What_kind_of_CPU_does_my_NAS_have>_ you can figure out which one to use. Note that the package arch must be lowercase. <dsm-ver> should be replaced with the version of DSM you are compiling for.

For the DS218j that I have, the complete command looks like this:

.. code-block:: bash

sudo docker run --rm --privileged --env PACKAGE_ARCH=armada38x --env DSM_VER=6.2 -v $(pwd)/artifacts:/result_spk synobuild

If everything worked you should have a directory called artifacts that contains your SPK files.

Avoiding timeouts when downloading build files

It can take a long time to pull development files from SourceForge, including occasional timeouts. To get around this, create a folder locally and map it to the /toolkit_tarballs Docker volume using the following command: -v $(pwd)/<path/to/folder>:/toolkit_tarballs to the docker run command listed above. This will allow the development files to be stored on your host machine instead of ephemerally in the container. The image will check for existing development files in that folder and will use them instead of pulling them from SourceForge when possible. You can also download the files directly and put them in the folder you created by downloading them from here: https://sourceforge.net/projects/dsgpl/files/toolkit/DSM<DSM_VER> (e.g. https://sourceforge.net/projects/dsgpl/files/toolkit/DSM6.2)

Credits

I based a lot of this work on this guide <https://www.reddit.com/r/synology/comments/a2erre/guide_intermediate_how_to_install_wireguard_vpn/>_ by Reddit user akhener <https://www.reddit.com/user/akhener>_. However, I had to modify their instructions a lot since my NAS has an ARM CPU which made cross compilation a lot trickier.

GitHub user galaxysd <https://github.com/galaxysd>_ made a guide <https://galaxysd.github.io/linux/20170804/2017-08-04-iptables-on-Synology-DSM-6>_ on how to enable iptables NAT support.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].