It is a hot summer and my brain is to overcooked to program anything… Suddenly a bright light appears of nowhere and screams at me:
“You are a privacy slut! All your files are stored on Google Photos and OneDrive. You are using Gmail and Instagram. DO SOMETHING!”.
So I did. I quickly deleted instagram and went from gmail to mailbox.org. But before I could delete all my files from those cloud services I needed an alternative. I needed a homeserver, so I thought the next best thing to do was to turn a laptop I had laying around into my personal server. Of course a laptop uses way more energy than needed, so wake on lan seemed to be a good option back then. I installed ubuntu server on my laptop and activated ssh.
Step 1: Disable sleep when lid is closed
To turn the screen off but stop the laptop from hibernation when closing the lid, we need to to the following commands:
$ sudo su $ echo 'HandleLidSwitch=ignore' | tee --append /etc/systemd/logind.conf $ echo 'HandleLidSwitchDocked=ignore' | tee --append /etc/systemd/logind.conf $ sudo service systemd-logind restart
Step 2: Install ethtool on the laptop and configure firewall
$ sudo apt-get install ethtool
ifconfig to check your network interface. You lan interface should be eth0.
Then test if your laptop supports wake on lan by running
$ sudo ethtool eth0
g is present in the output, it means that your laptop supports wol. So go ahead and enable wol by typing
$ sudo ethtool -s eth0 wol g
Get the mac address of the interface and write it down.
$ netstat -ei
To stop the firewall from blocking wol packages type
$ sudo ufw allow ssh $ sudo ufw allow 9 $ sudo ufw enable
Step 3: Enable etherwake and port-forwarding on router
I have an openWrt router, which is an open source linux router. As it runs linux, i can make the machine my slave. I recommend you to get an openWrt router as well. GL.inet has some very affordable and powerful routers.
Install the web-interface for
$ opkg install luci-app-wol
Configure /etc/config/etherwake and set interface to eth1, respectively the lan interface, no wan:
config 'etherwake' 'setup' option 'pathes' '/usr/bin/etherwake /usr/bin/ether-wake' option 'sudo' 'off' option 'interface' '' option 'broadcast' 'off'
Create a config for your laptop with the mac address that you wrote down earlier.
config 'target' option 'name' 'popeye' option 'mac' '00:22:33:44:55:66'
/etc/init.d/etherwake start popeye
Enable port forwarding on router
Edit the firewall config at
/etc/config/firewall and enable ssh and wol:
config redirect option name 'ssh' option src 'wan' option proto 'tcpudp' option src_dport '53734' option dest_ip '192.168.8.158' option dest_port '22' option target 'DNAT' option dest 'lan' config redirect option name 'wol' option src 'wan' option proto 'tcp udp' option src_dport '35122' option dest_ip '192.168.8.158' option dest_port '7'
Choose a src_port that is higher than 10000 and NOT in this List, for security reasons.
Step 4: Install & run docker images
Install docker on your system and pull the docker-compose setup.
Setup some subdomains leading towards your routers ip and ports (or include a duckDNS / dynDNS docker container in the docker-compose file).
Next change the passwords and subdomains in the
docker-compose.yml file. Run
docker-compose up -d. Profit.
Useful docker commands
Start Docker containers
sudo docker-compose up -d
Show All containers
sudo docker ps -a
Kill all Docker Containers:
sudo docker kill $(docker ps -q)
Remove all Docker containers
sudo docker rm $(docker ps -a -q)
Remove all docker images
docker rmi $(docker images -q)
docker system prune --all --volumes