Numeric labels used to identify devices on a network. For example 192.168.1.2
A system that allows computers to convert human friendly names (e.g. sgf.dev) into an IP address
Essentially the phonebook of a network
Types: A, CNAME
Used to identify a specific protocol or application to communicate with
Some common protocols
and ports
Senders specify a reply port when sending packets
Allows a network to share an IP when communicating with another network
Rewrites outgoing packets to use the shared address + a unique port for the reply address
Uses a table of those rewrites to do the inverse for incoming packets
Allows incoming traffic on a port to be forwarded to a specific device on the network
Uses an agent on a device in your network to detect public IP changes
When a change is detected, it dynamically updates a DNS record
A server that forwards traffic from a client on to a destination
Hides the true client from the server
A server that takes incoming traffic and forwards it to another server
Hides the true server from the client
Creates a secure tunnel to a VPN server that all traffic flows to first
In practice this means
Allows machines physically apart to be on the same "virtual" network

Well... you cheat a bit
You pay for a virtual server

sudo apt install wireguard
# If you have a firewall (which you should)
sudo ufw allow 51820/udp
sudo ufw enable
sudo su
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
vim ./wg0.conf
[Interface]
Address = 10.0.0.x/24
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT
ListenPort = 51820
PrivateKey = <generated private key>
exit # exit super user session
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo apt install wireguard
sudo su
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
vim ./wg0.conf
[Interface]
PrivateKey = <generated client private key>
Address = 10.0.0.x/24
DNS = 1.1.1.1
[Peer]
PublicKey = <server public key>
AllowedIPs = 0.0.0.0/0
Endpoint = <server ip>:51820
PersistentKeepalive = 10
exit # exit super user session
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo systemctl stop wg-quick@wg0
sudo vim /etc/wireguard/wg0.conf
[Peer]
PublicKey = <client public key>
AllowedIPs = 10.0.0.x/32
sudo systemctl start wg-quick@wg0
Essentially provides lightweight virtual machines* called containers
*they're definitely not virtual machines but it's easier to describe that way
**if this description upsets you sorry not sorry 😎
These containers can be easily created and destroyed using the docker cli
Containers also typically have all their dependencies included
Caddy is a very easy to use reverse proxy server
Has comparable features to others such as Nginx or HaProxy
It can seamlessly generate SSL certificates and keep them updated
services:
reverse-proxy:
image: caddy:latest
restart: always
ports:
- "80:80"
- "443:443"
- "443:443/udp"
- "2019:2019"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
https://social.sgf.dev {
reverse_proxy 10.0.0.3:9000
}
Provides very cheap S3 compatible storage. Excellent for storing backups

A tool for creating and uploading backups to a remote location. It supports:
Supports a variety of remote locations
sudo apt install restic
export RESTIC_PASSWORD='your_password_here'
export AWS_ACCESS_KEY_ID=''
export AWS_SECRET_ACCESS_KEY=''
restic -r s3:<backblaze url> init
restic -r s3:<backblaze url> backup ./<some folder>
restic -r s3:<backblaze url> restore latest --target ./