1. Introduction

./pic/synology-ds114-nas.jpg

./pic/info01.png

cat /proc/cpuinfo
///
Processor       : Marvell PJ4Bv7 Processor rev 1 (v7l)
///

2. DNS server

2.1. screenshots

./pic/dns01.png

./pic/dns02.png

./pic/dns03.png

2.2. config files

cat /volume1/@appstore/DNSServer/named/etc/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/zone/zone.load.conf

//include "/etc/default/named.default-zones.conf";
include "/etc/conf/named.options.conf";
include "/etc/conf/named.log.conf";
include "/etc/conf/named.rndc.conf";
include "/etc/conf/named.key.conf";
include "/etc/zone/zone.load.conf";
include "rndc.key";
vi /volume1/@appstore/DNSServer/named/etc/zone/zone.load.conf
include "/etc/zone/data/d01.net";
include "/etc/zone/data/1.2.10.in-addr.arpa";
vi /volume1/@appstore/DNSServer/named/etc/zone/data/d01.net
zone "d01.net" {
        type master;
        file "/etc/zone/master/d01.net";
        allow-transfer {any;};
        allow-query {any;};
vi /volume1/@appstore/DNSServer/named/etc/zone/master/d01.net
$ORIGIN .
$TTL 38400      ; 10 hours 40 minutes
d01.net. IN SOA localhost. admin.d01.net. (
        1356562241
        10800
        3600
        604800
        38400
)
d01.net.                        NS      localhost.
$ORIGIN d01.net.
nas                     CNAME   nas010
router                  CNAME   rtr001
acp031                  A       10.2.1.31
acp032                  A       10.2.1.32
cam161                  A       10.2.1.161
cam162                  A       10.2.1.162
cam163                  A       10.2.1.163
cam164                  A       10.2.1.164
cam165                  A       10.2.1.165
cam166                  A       10.2.1.166
cam167                  A       10.2.1.167
cam168                  A       10.2.1.168
cam169                  A       10.2.1.169
cam170                  A       10.2.1.170
mmc141                  A       10.2.1.141
mmc142                  A       10.2.1.142
mmc143                  A       10.2.1.143
nas010                  A       10.2.1.10
nas199                  A       10.2.1.199
prt002                  A       10.2.10.2
prt069                  A       10.2.1.69
rtr001                  A       10.2.1.1
son091                  A       10.2.1.91
son092                  A       10.2.1.92
son093                  A       10.2.1.93
son094                  A       10.2.1.94
son095                  A       10.2.1.95
son096                  A       10.2.1.96
son097                  A       10.2.1.97
srv012                  A       10.2.1.12
vi /volume1/@appstore/DNSServer/named/etc/zone/data/1.2.10.in-addr.arpa
zone "1.2.10.in-addr.arpa" {
        type master;
        file "/etc/zone/master/1.2.10.in-addr.arpa";
        allow-transfer {any;};
        allow-query {any;};
vi /volume1/@appstore/DNSServer/named/etc/zone/master/1.2.10.in-addr.arpa
$ORIGIN .
$TTL 86400
1.2.10.in-addr.arpa. IN SOA localhost. admin.d01.net. (
        5
        43200
        180
        1209600
        10800
)
$ORIGIN 1.2.10.in-addr.arpa.
                        NS      localhost.
32.1.2.10.in-addr.arpa. PTR     acp032.d01.net.
31.1.2.10.in-addr.arpa. PTR     acp031.d01.net.
cat /volume1/@appstore/DNSServer/named/etc/conf/named.options.resolution.conf
        allow-recursion {any;};
        forwarders {8.8.8.8;};
        forward first;

2.3. usefull programs

/volume1/@appstore/DNSServer/bin/dig

/volume1/@appstore/DNSServer/bin/nsupdate

2.4. startup script

/volume1/@appstore/DNSServer/script/reload.sh

3. DHCP server

The build-in DHCP server is based on dnsmasq. Nothing wrong with dnsmasq, but it could not do what i want:

disable all unknown macaddresses and allow only the ones i have defined in a so called whitelist.

3.1. disable dnsmasq

cp /etc/rc.network /etc/rc.network-org
sed -i s~"dnsmasq --user=root"~"dnsmasq --version --user=root"~ /etc/rc.network

3.2. install package

ipkg install dhcp

3.3. config files

mkdir /volume1/etc/dhcp
vi /volume1/etc/dhcp/dhcpd.conf
#
ddns-update-style ad-hoc;
default-lease-time 86400;
#log-facility local7;
option domain-name "d01.net";
option domain-name-servers 10.2.1.10;
#option netbios-name-servers 10.2.1.10;
filename "pxelinux.0";

shared-network "zone-10.2"
       {
        subnet 10.2.1.0 netmask 255.255.255.0
               {
                option routers 10.2.1.1;
                next-server 10.2.1.102;
                pool {
                      range 10.2.1.101 10.2.1.199;
                      allow known-clients;
                      deny unknown-clients;
                     }
               }
        subnet 13.2.1.0 netmask 255.255.255.0
               {
                next-server 13.2.1.102;
                option domain-name-servers 127.0.0.1;
                option routers 127.0.0.1;
                pool {
                      range 13.2.1.101 13.2.1.199;
                      allow unknown-clients;
                      deny known-clients;
                     }
               }
       }

include "/volume1/etc/dhcp/dhcpd-hosts.conf";
cat /volume1/etc/dhcp/dhcpd-hosts.conf
# tab acer android-f75721246a5c6e2d
host tab081 {
     option host-name tab081;
     hardware ethernet d0:e7:82:14:37:e1;
}
# buro
host acp031 {
     option host-name acp031;
     hardware ethernet 64:70:02:3C:B2:96;
     fixed-address 10.2.1.31;
}
vi /volume1/etc/dhcp/white.mac
# dhcp pool
tab081 ; dhcp ; d0:e7:82:14:37:e1 ; tab acer android-f75721246a5c6e2d

# acp
acp031 ; 10.2.1.31 ; 64:70:02:3C:B2:96 ; buro
mkdir /volume1/bin
vi /volume1/bin/make-dhcpd-hosts
#!/bin/sh
# 20may2014: initial version

  set -e
  tmpfile="/tmp/$(basename $0).tmp"
  inpfile="/volume1/etc/dhcp/white.mac"
  outfile="/volume1/etc/dhcp/dhcpd-hosts.conf"

  > ${outfile}
  cat ${inpfile} | grep -v '#' | awk 'NF' > ${tmpfile}

  while read lline
    do {
      # echo ${lline}
        pwsname="$(echo ${lline} | awk -F';' '{print $1}' | sed 's/ *$//' | sed 's/^ *//')"
        ipaddr="$(echo ${lline}  | awk -F';' '{print $2}' | sed 's/ *$//' | sed 's/^ *//')"
        macaddr="$(echo ${lline} | awk -F';' '{print $3}' | sed 's/ *$//' | sed 's/^ *//')"
        comment="$(echo ${lline} | awk -F';' '{print $4}' | sed 's/ *$//' | sed 's/^ *//')"
        echo "# ${comment}" >> ${outfile}
        echo "host ${pwsname} {" >> ${outfile}
        echo "     option host-name ${pwsname};" >> ${outfile}
        echo "     hardware ethernet ${macaddr};" >> ${outfile}
        if test "${ipaddr}" = "dhcp"
          then :
          else echo "     fixed-address ${ipaddr};" >> ${outfile}
        fi
        echo "}" >> ${outfile}
       }
    done < ${tmpfile}

# cleanup
  rm ${tmpfile}

  exit 0

3.4. lease file

cat /opt/etc/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1-ESV-R2

lease 10.2.1.101 {
  starts 2 2014/05/20 22:05:34;
  ends 3 2014/05/21 22:05:34;
  tstp 3 2014/05/21 22:05:34;
  cltt 2 2014/05/20 22:05:34;
  binding state free;
  hardware ethernet 08:00:27:00:02:08;
  uid "\001\010\000'\000\002\010";
}
lease 10.2.1.183 {
  starts 6 2014/05/24 11:02:29;
  ends 6 2014/05/24 11:54:08;
  tstp 6 2014/05/24 11:54:08;
  cltt 6 2014/05/24 11:02:29;
  binding state free;
  hardware ethernet 00:1e:65:7e:63:02;
  uid "\001\000\036e~c\002";
}
lease 10.2.1.184 {
  starts 6 2014/05/24 09:48:13;
  ends 0 2014/05/25 09:48:13;
  tstp 0 2014/05/25 09:48:13;
  cltt 6 2014/05/24 09:48:13;
  binding state active;
  next binding state free;
  hardware ethernet 68:a8:6d:22:7a:92;
  uid "\001h\250m\"z\222";
  client-hostname "Jans-MBP";
}
lease 10.2.1.140 {
  starts 6 2014/05/24 15:24:22;
  ends 0 2014/05/25 15:24:22;
  cltt 6 2014/05/24 15:24:22;
  binding state active;
  next binding state free;
  hardware ethernet 78:d6:f0:b0:0b:c8;
  uid "\001x\326\360\260\013\310";
  client-hostname "android-f5432812de86aab7";
}
lease 10.2.1.178 {
  starts 6 2014/05/24 18:56:56;
  ends 0 2014/05/25 18:56:56;
  cltt 6 2014/05/24 18:56:56;
  binding state active;
  next binding state free;
  hardware ethernet d0:e7:82:14:37:e1;
  client-hostname "android-f75721246a5c6e2d";
}
lease 10.2.1.182 {
  starts 6 2014/05/24 20:48:10;
  ends 0 2014/05/25 20:48:10;
  cltt 6 2014/05/24 20:48:10;
  binding state active;
  next binding state free;
  hardware ethernet 8c:77:12:5f:5e:96;
  uid "\001\214w\022_^\226";
  client-hostname "android-4a23c26bd8599e86";
}
lease 13.2.1.101 {
  starts 2 2014/05/20 21:57:06;
  ends 2 2014/05/20 22:02:00;
  tstp 2 2014/05/20 22:02:00;
  cltt 2 2014/05/20 21:57:06;
  binding state free;
  hardware ethernet 08:00:27:00:01:20;
  uid "\001\010\000'\000\001 ";
}
lease 13.2.1.102 {
  starts 2 2014/05/20 22:04:02;
  ends 2 2014/05/20 22:04:58;
  tstp 2 2014/05/20 22:04:58;
  cltt 2 2014/05/20 22:04:02;
  binding state free;
  hardware ethernet 08:00:27:00:02:08;
}
lease 13.2.1.104 {
  starts 3 2014/05/21 17:58:05;
  ends 3 2014/05/21 17:59:27;
  tstp 3 2014/05/21 17:59:27;
  cltt 3 2014/05/21 17:58:05;
  binding state free;
  hardware ethernet 00:1e:65:7e:63:02;
  uid "\001\000\036e~c\002";
}
lease 13.2.1.105 {
  starts 3 2014/05/21 18:01:25;
  ends 3 2014/05/21 18:02:28;
  tstp 3 2014/05/21 18:02:28;
  cltt 3 2014/05/21 18:01:25;
  binding state free;
  hardware ethernet 68:a8:6d:22:7a:92;
  uid "\001h\250m\"z\222";
}
lease 13.2.1.107 {
  starts 3 2014/05/21 22:09:03;
  ends 3 2014/05/21 22:10:48;
  tstp 3 2014/05/21 22:10:48;
  cltt 3 2014/05/21 22:09:03;
  binding state free;
  hardware ethernet 00:1e:37:f4:17:40;
}
lease 13.2.1.108 {
  starts 4 2014/05/22 12:09:53;
  ends 5 2014/05/23 12:09:53;
  tstp 5 2014/05/23 12:09:53;
  cltt 4 2014/05/22 12:09:53;
  binding state free;
  hardware ethernet 08:00:27:00:01:29;
}
lease 13.2.1.106 {
  starts 6 2014/05/24 06:31:16;
  ends 0 2014/05/25 06:31:16;
  tstp 0 2014/05/25 06:31:16;
  cltt 6 2014/05/24 06:31:16;
  binding state active;
  next binding state free;
  hardware ethernet 5c:f8:a1:b9:99:84;
  uid "\001\\\370\241\271\231\204";
  client-hostname "android-65c8c4adfaac1f08";
}
lease 13.2.1.103 {
  starts 6 2014/05/24 08:43:05;
  ends 0 2014/05/25 08:43:05;
  tstp 0 2014/05/25 08:43:05;
  cltt 6 2014/05/24 08:43:05;
  binding state active;
  next binding state free;
  hardware ethernet 80:1f:02:e4:55:0b;
  uid "\001\200\037\002\344U\013";
}
server-duid "\000\001\000\001\033\016\214\004\000\0212-'\235";

4. HTTP server

4.1. change default background of the main page

/usr/syno/synoman/webman/resources/images/default_wallpaper/01.jpg

4.2. document root

/var/services/web/ -> /volume1/web/

4.3. aliases

vi /etc/httpd/sites-enabled-user/httpd-vhost.conf-user
Alias /music /volume1/music
<Directory "/volume1/music">
 Options Indexes MultiViews FollowSymlinks
 AllowOverride none
 Order allow,deny
 Allow from all
</Directory>

4.4. service restart

/usr/syno/sbin/synoservicecfg --restart httpd-user

5. MYSQL server

mysqlrootpasswd="Passw0rd"
mysqladmin -u"root" password "${mysqlrootpasswd}" >/dev/null 2>&1 || true
mysql -u"root" -p"${mysqlrootpasswd}" -e"grant all privileges on *.* to 'root'@'%' identified by '${mysqlrootpasswd}';"
mysql -u"root" -p"${mysqlrootpasswd}" -e"grant all privileges on *.* to 'root'@'127.0.0.1' identified by '${mysqlrootpasswd}';"
mysql -u"root" -p"${mysqlrootpasswd}" -e"grant all privileges on *.* to 'root'@'localhost' identified by '${mysqlrootpasswd}';"
mysql -u"root" -p"${mysqlrootpasswd}" -e"select user, host, password from mysql.user;"
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | %         | *DDFB542AA0BD1D251995D81AEBEB96DEEAD1132F |
| root | localhost | *DDFB542AA0BD1D251995D81AEBEB96DEEAD1132F |
|      | localhost |                                           |
|      | nas010    |                                           |
| root | 127.0.0.1 | *DDFB542AA0BD1D251995D81AEBEB96DEEAD1132F |
+------+-----------+-------------------------------------------+

6. RSYNC

6.1. activating rsync

Start your Synology DiskStation Manager.
Go to Backup - Network Backup Service and check the box "Enable network backup service".
Click OK

6.2. config files

  • original /etc/rsyncd.conf

#motd file = /etc/rsyncd.motd
#log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = no
[NetBackup]
path = /var/services/NetBackup
comment = Network Backup Share
uid = root
gid = root
read only = no
list = yes
charset = utf-8
auth users = root
secrets file = /etc/rsyncd.secrets
  • new /etc/rsyncd.conf

#motd file = /etc/rsyncd.motd
#log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = yes
uid = root
gid = root
read only = no
list = yes
charset = utf-8
secrets file = /etc/rsyncd.secrets
strict modes = false

[NetBackup]
 path = /var/services/NetBackup
 comment = Network Backup Share
 auth users = root

[volume1]
 path = /volume1
 comment = volume1 share
 auth users = cidusr
echo "cidusr:Passw0rd" >> /etc/rsyncd.secrets

6.3. testing from another workstation/server

rsync 'nas.d01.net::'
NetBackup       Network Backup Share
volume1         volume1 Share
export RSYNC_PASSWORD=Passw0rd
rsync -auv --delete --progress /data1/tmp/ rsync://cidusr@nas.d01.net/volume1/tmp/

6.4. results

./pic/perf01.png

7. ipkg

7.2. installation

mkdir /volume1/@optware
mkdir /opt
mount -o bind /volume1/@optware /opt

ipk_name="ipkg-opt_0.99.163-10_arm.ipk"
url="http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable"
wget -N ${url}/${ipk_name}
tar xzvf ${ipk_name} ./data.tar.gz -C /
mkdir -pv /opt/etc/ipkg
echo "src cross ${url}" > /opt/etc/ipkg/feeds.conf
vi /etc/rc.local
#!/bin/sh

# Optware setup
mount -o bind /volume1/@optware /opt
vi /root/.profile
///
PATH=$PATH:/volume1/bin:/opt/bin:/opt/sbin
///

7.3. checks

ipkg update
ipkg upgrade
ipkg list
ipkg install mc

8. rexx

or following link

tar xzPvf rexx.armv7h1.tgz -C /
mkdir /volume1/bin
touch /volume1/bin/rexx
chmod +x /volume1/bin/rexx
ln -s /volume1/bin/rexx /usr/bin/
vi /volume1/bin/rexx
#!/bin/sh
export PATH=$PATH:/opt/rexx/
export LD_LIBRARY_PATH=/opt/rexx/
/opt/rexx/rexx $@
Note since the DSM upgrade to version 6 on 27/03/2016, the rexx output was messed up:
root@nas010:~# rexx

/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexx.so.4)
/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexx.so.4)
/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexx.so.4)
/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexxapi.so.4)
/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexxapi.so.4)
/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexxapi.so.4)
/opt/rexx/rexx: /lib/libstdc++.so.6: no version information available (required by /opt/rexx/librexxapi.so.4)

Syntax is "rexx filename [arguments]"
or        "rexx -e program_string [arguments]"
or        "rexx -v".

Copy following libstdc.so.6 to /opt/rexx/

9. SAMBA

9.1. config file

less /usr/syno/etc/smb.conf

9.2. check

smbstatus
3388    1399572962      ac      10.2.1.145(10.2.1.145)  video

Locked files:
Pid          Uid        DenyMode   Access      R/W        Oplock           SharePath   Name   Time
 --------------------------------------------------------------------------------------------------
3388         1026       DENY_NONE  0x120089    RDONLY     NONE             /volume1/video
/// #/3.Days.to.Kill.2014.EXTENDED.1080p.BluRay.x264-SPARKS [PublicHD]/3.days.to.kill.2014.extended.1080p.bluray.x264-sparks.mkv
/// Thu May  8 20:16:14 2014

10. services

/usr/syno/etc/rc.d/

11. extra repositories

mdevries - http://synology.mdevries.org/spkrepo/packages
PCLoadLetter - http://pcloadletter.comlu.com
Mertymade - http://packages.mertymade.com
Synology-Forum.de - http://update.10trum.de/packageupdate/getpackages.php
Missilehugger - http://packages.missilehugger.com/
Synocommunity - http://packages.synocommunity.com
Zebulon’s SPK – http://synopkg.superzebulon.org/spk/repo/packages
Unzureichende – http://spk.unzureichende.info/
Q14six – http://spk.q14six.de/
Christoph Papke’s – http://christoph-papke.de/spk/repo/spkrepo/packages
E-Remonty – http://e-remonty.info/spkrepo/packages
CPHup – http://www.cphup.net/index.php/getpackages.php
Quadrat4 – http://packages.quadrat4.de
Synobox – http://cbo.netau.net/synopackages/
Need-Soft – http://need-soft.com/packages/index.php/spkrepo/packages
Cytec – http://cytec.us/spk
SubtitlesSH – http://subtitlessh.no-ip.biz/repo_spk
Hoel – http://packages.hoel.dk
Sysco – http://synology.sysco.ch
Synozwave – http://repo.synozwave.com/
Page81 – http://packages.page81.net/
Syno Packages – http://packages.synology.me/spkrepo/spkrepo/packages
cat /usr/syno/etc/packages/feeds
[
{"feed":"http://synology.mdevries.org/spkrepo/packages","name":"mdevries"},
{"feed":"http://pcloadletter.comlu.com","name":"pcloadletter"},
{"feed":"http://packages.mertymade.com","name":"mertymade"},
{"feed":"http://update.10trum.de/packageupdate/getpackages.php","name":"10trum"},
{"feed":"http://packages.missilehugger.com/","name":"missilehugger"},
{"feed":"http://packages.synocommunity.com","name":"synocommunity"},
{"feed":"http://synopkg.superzebulon.org/spk/repo/packages","name":"superzebulon"},
{"feed":"http://spk.unzureichende.info/","name":"unzureichende"},
{"feed":"http://spk.q14six.de/","name":"q14six.de"},
{"feed":"http://christoph-papke.de/spk/repo/spkrepo/packages","name":"christoph-papke"},
{"feed":"http://e-remonty.info/spkrepo/packages","name":"e-remonty"},
{"feed":"http://www.cphup.net/index.php/getpackages.php","name":"cphup"},
{"feed":"http://packages.quadrat4.de","name":"quadrat4"},
{"feed":"http://cbo.netau.net/synopackages/","name":"netau"},
{"feed":"http://need-soft.com/packages/index.php/spkrepo/packages","name":"need-soft"},
{"feed":"http://cytec.us/spk","name":"cytec.us"},
{"feed":"http://subtitlessh.no-ip.biz/repo_spk","name":"subtitlessh.no"},
{"feed":"http://packages.hoel.dk","name":"hoel.dk"},
{"feed":"http://synology.sysco.ch","name":"sysco.ch"},
{"feed":"http://repo.synozwave.com/","name":"synzwave"},
{"feed":"http://packages.page81.net/","name":"page81"},
{"feed":"http://packages.synology.me/spkrepo/spkrepo/packages","name":"spkrepo"}
]

12. notifications

vi /usr/syno/synoman/webman/texts/enu/mails
////
[iplDone]
Category: System,Important
Title: IPL done
Subject: IPL done on %HOSTNAME%

Dear user,

IPL done on %HOSTNAME%.

salut,
synonotify iplDone

12.1. debugging

syno_hibernate_debug_tool --enable 10
syno_hibernate_debug_tool --disable

13. aftercares after a system upgrade

13.1. /opt

mkdir -p /opt
mount -o bind /volume1/@optware /opt/
ln -fs ./volume1/ /data1
ln -fs ./volume1/music/ /
ln -fs ./volume1/photo/ /
ln -fs ./volume1/video/ /

13.3. profile

vi /root/.profile
///
PATH="$PATH:/opt/bin:/opt/sbin:/volume1/bin"
export PATH
alias ml="tail -f /var/log/messages"
alias m="mcedit -b"
alias mc="mc -b"
alias dl="tail -f /var/log/dhcpd.log"

13.4. rexx

ln -fs /volume1/bin/rexx /usr/bin/

13.5. dhcp

sed -i s~"dnsmasq --user=root"~"dnsmasq --version --user=root"~ /etc/rc.network

13.6. http

rm /etc/httpd/sites-enabled-user/httpd-vhost.conf-user
ln -s /volume1/etc/httpd/sites-enabled-user/httpd-vhost.conf-user /etc/httpd/sites-enabled-user/
/usr/syno/sbin/synoservicecfg --restart httpd-user

13.7. syslog

vi /etc/syslog-ng/syslog-ng.conf
filter f_daemon     { facility(daemon); };
filter f_dhcpd       { match("dhcpd"); };
destination dhcpmessages { file("/var/log/dhcpd.log"); };
log { source(src); filter(f_daemon);  filter(f_dhcpd); destination(dhcpmessages); };
kill -HUP $(pgrep syslog)

14. references