Backup to Microsoft OneDrive with Synology’s Hyper Backup

With Microsoft offering 1 TB of OneDrive cloud storage in it’s Office 365 subscription, it would be nice if that storage could be used to backup data from a Synology NAS. Unfortunately, Synology’s own backup solution for DSM, Hyper Backup, does not offer to use OneDrive as a backup destination. So here is my solution to this for those who can run Docker on their Synology NAS.

Update: For OneDrive for Business (SharePoint), see Backup to Microsoft OneDrive for Business (SharePoint) with Synology’s Hyper Backup.

tl;dr Run the basic-to-passport-auth-http-proxy Docker image and configure a WebDAV backup destination in Hyper Backup.

While not offering OneDrive as backup destination, Hyper Backup does offer to configure a WebDAV server as backup destination. OneDrive on the other hand can be accessed via WebDAV. The problem is, that the OneDrive WebDAV API requires authentication with the Passport Server Side Include (SSI) Version 1.4 Protocol, while Hyper Backup’s WebDAV client only supports HTTP Basic authentication and NTLM authentication.

One solution to this is to set up a proxy server that translates all authentication related information from Basic authentication to Passport authentication (and vice versa) and forwards all other information unchanged. For this purpose I wrote the basic-to-passport-auth-http-proxy server.

Installing the proxy server

The first step is to install and configure the proxy server. As the communication between Hyper Backup and the proxy server is not encrypted, their connection should run over a trusted network, e.g. the loopback device (localhost) when installed on the same machine. It is not advisable to install the server on a public VPS or similar without additional security measures. The easiest way to run the basic-to-passport-auth-http-proxy server on a Synology NAS is to use the Docker image published on Docker Hub:

  • Make sure the Docker package is installed on the NAS. If not, you can find it in the DSM Package Center. Unfortunately, it is not available for all Synology devices. (*)
  • Open the Docker app in DSM, choose Registry, ensure you have selected Docker Hub in the Registry Settings and search for skleeschulte. Download skleeschulte/basic-to-passport-auth-http-proxy (select the highest version tag when prompted).
  • Navigate to Image and launch the image you just downloaded. In the Advanced Settings, change the following:
    Advanced Settings: Check Enable auto-restart
    Port Settings: Change Local Port to 3000
    Environment: Add a variable named PROXY_TARGET with the value
    Then hit Apply and finish the Create Container dialog.
  • Navigate to Container, open the details of the newly created container and check the log. It should show something like proxy:info Proxy server listening: { address: '::', family: 'IPv6', port: 3000 } and no errors.

(*) If your NAS does not allow to run Docker images, you could install Node.js directly on your NAS and run the proxy server there, or you could install it on a different machine, e.g. a Raspberry Pi connected to your local network. Instructions for running the server directly with Node.js can be found in the README file in the GitHub repository.

Getting the OneDrive CID

To connect to OneDrive over WebDAV, in addition to the username and password, a character string called CID is needed. The CID can be obtained in one of the following ways:

  • With your web-browser, navigate to and log in to OneDrive. When the browser has finished loading the OneDrive interface, the address bar should show something like Here, ABCDEFG123456789 is your CID. (It is the part after cid= up to the next & sign, if there is one.)
  • Alternatively, if you have the OneDrive client installed on Windows, you can find the CID in Windows‘ Credential Manager: Under Windows Credentials, locate OneDrive Cached Credential – the username is the CID.

The CID is case-insensitive.

Configuring Hyper Backup

Now that the proxy server is up and running and you know your CID, Hyper Backup can be configured to connect to OneDrive over the proxy server:

  • In Hyper Backup, create a new Data backup task, choose WebDAV as the backup destination and hit Next.
  • Enter the following Backup Destination Settings:
    Server address: localhost:3000/ONEDRIVE_CID (replace ONEDRIVE_CID with your CID)
    Username: your OneDrive username (= email address)
    Password: your OneDrive password (if you have two-step verification enabled for your account, you need to generate an app password and use that instead)
  • When you now open the Folder drop-down, you should be presented with a list of the folders in your OneDrive.
  • The rest of the configuration is up to you.

Data recovery

If one day you need to recover data from your backup without the proxy server, you can do so by accessing the backup files directly with Synology’s Hyper Backup Explorer, e.g. with the Windows OneDrive client or after downloading them from the OneDrive webinterface.

Resource consumption

My NAS model is a DS218+ with an Intel Celeron J3355 (2x 2 GHz) and 2 GB RAM. The Docker container idles around 0.1% CPU usage and 60 MB of RAM. The image takes up 90 MB of storage space.

While a backup is running, CPU Usage of the container stays unchanged while RAM usage goes up to 80 to 130 MB.


Although successfully completing a number of tests, the basic-to-passport-auth-http-proxy server is not extensively field-tested yet. Use it at your own risk. If you observe any problems, please create a new issue at the GitHub project page. If you run your own tests, please share the results (e.g. comment here or create an issue on GitHub).

Happy backuping!

13 Gedanken zu „Backup to Microsoft OneDrive with Synology’s Hyper Backup

  1. This doesn’t seem to work with some Office 365 subscriptions that have a different onedrive implementation: After signing in on the Web, it takes me to… and there I have my onedrive space, no CID in the URL. I could get the username from the credential store, but it’s much longer than the CID and when trying to connect with HyperBackup it gives me an Authentication failure.

  2. I get an error:
    proxy:error PROXY_TARGET environment variable is not set.

    export -p output:

    export PROXY_TARGET=““

    What can I do?

  3. Habe das in einer VM-Debian-Installation implementiert und läuft super …
    Danke !
    2x 1TB für umsonst ist schon cool.

  4. Hallo und danke für diesen Beitrag. Bisher habe ich die Datensicherung via Hyper Backup lokal erstellt und dann via Cloud Sync auf OneDrive übertragen. Ich bin aber schon seit längerem auf der Suche nach einem „besseren“ Lösungsansatz, welcher nicht lokal nochmal zusätzlich Speicher belegt. Deine Idee via Proxy finde ich super.
    Danke und viele Grüße

  5. Hallo,
    vielen Dank für das super Script.
    Ich habe das Backup über HyperBackup auf OneDrive über Node.js zum laufen bekommen, so wie hier beschreiben.
    Ich bringe das ganze über folgendes Script über ssh als root zum laufen:

    cd /usr/basic-to-passport-auth-http-proxy-master/
    npm ci –only=production
    export PROXY_TARGET=
    node lib/server.js

    Ich erhalte das folgende als Ausgabe:
    added 17 packages, and audited 18 packages in 7s
    2 high severity vulnerabilities
    To address all issues (including breaking changes), run:
    npm audit fix –force
    Run `npm audit` for details.
    proxy:info Proxy server listening: { address: ‚::‘, family: ‚IPv6‘, port: 3000 } +0ms

    Und schon funktioniert das ganze Backup.

    Sobald ich putty aber beende, wird das obige Script beendet und schon bricht die Verbindung vom OneDrive-Server ab.

    Nun habe ich also als root, das obige Script in den Odner „/usr/local/etc/rc.d/“ gepackt, damit es bei jedem Neustart meiner NAS automatisch ausgeführt wird und die Verbindung zum OneDrive-Server hergestellt wird.

    Das funktioniert auch soweit, ABER irgendwann kommt folgender Fehler:
    proxy:error [19268897/5817] Sending error response: 500 read ECONNRESET +2h <<<— Zeit immer unterschiedlich
    throw new ERR_HTTP_HEADERS_SENT('set');

    Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:526:11)
    at sendResponse (/usr/basic-to-passport-auth-http-proxy-master/lib/server.js:48:17)
    at ProxyServer. (/usr/basic-to-passport-auth-http-proxy-master/lib/server .js:264:5)
    at ProxyServer.emit (/usr/basic-to-passport-auth-http-proxy-master/node_modules/even temitter3/index.js:210:27)
    at ClientRequest.proxyError (/usr/basic-to-passport-auth-http-proxy-master/node_modu les/http-proxy/lib/http-proxy/passes/web-incoming.js:163:18)
    at ClientRequest.emit (events.js:310:20)
    at TLSSocket.socketErrorListener (_http_client.js:426:9)
    at TLSSocket.emit (events.js:310:20)
    at errorOrDestroy (internal/streams/destroy.js:108:12)
    at onwriteError (_stream_writable.js:418:5) {
    … und das Script wird beendet und schon besteht keine Verbindung mehr zum OneDrive-Server.

    Wo liegt der Fehler und wie sorge ich dafür, dass das Script wieder automatisch startet, sobald die Verbindung mal abgebrochen ist?

    Schon mal vielen Dank im Voraus.

    • Benjamin – ich muss vorausschicken, ich bin kein Programmierer und habe mir das, was jetzt folgt, zusammengegoggelt… Also lieber nochmal überprüfen. Ich bin über SSH auf meine DS412 gegangen.

      1. Ich habe im Verzeichnis /etc mit dem VI Editor eine Datei rc.local erstellt. Die wird wohl beim Start des NAS aufgerufen und sorgt dafür, dass dort enthaltene Skript-Befehle ausgeführt werden – diese Datei muss mit chmod +x ausführbar gemacht werden.

      2. mit dem VI Editor habe ich folgendes Skript dort hineingeschrieben – wobei XXXXX einer meiner gemeinsamen Ordner ist, dort liegt das Unterverzeichnis „proxy“ – in das habe ich die entzippten ProxyMaster-Dateien geladen und von dort auch die Installation per SSH angestossen (kann man sicher auch woanders hinlegen, aber da war ich überfragt, wie)

      cd volume1/XXXXXXXX/proxy
      export PROXY_TARGET=
      node lib/server.js

      Ich glaube nämlich, dass der Befehl „npm ci –only=production“ nur einmal zum installieren benötigt wird.

      3. Wenn die Synology neu startet, dann lädt das Skript im Hintergrund die Konfiguration und startet den Server – so erkläre ich mir jedenfalls, dass es funktioniert. Wie gesagt, bin kein Programmierer, deshalb: VORSICHT, und vielleicht kann das hier ja auch jemand erfahrenes noch kommentieren….

  6. Was ist der Unterschied/Nachteil zu mounten von onedrive via Rclone und dann den mount als Ziel für Backup benutzen?
    Vorteil Rclone, man kann es so als „Share“ benutzen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.