selfhosted-apps-docker/dnsmasq/readme.md

168 lines
3.9 KiB
Markdown
Raw Normal View History

2020-05-05 15:39:05 +00:00
# dnsmasq
###### guide by example
![logo](https://i.imgur.com/SOa4kRd.png)
# Purpose
Lightweight DHCP and DNS server.
* [Official site](http://www.thekelleys.org.uk/dnsmasq/doc.html)
* [Arch wik](https://wiki.archlinux.org/index.php/dnsmasq)
# Files and directory structure
```
/etc/
2020-05-06 00:27:22 +00:00
├── dnsmasq.conf
├── hosts
└── resolve.conf
2020-05-05 15:39:05 +00:00
```
# Installation
2020-05-06 00:35:55 +00:00
Install dnsmasq from your linux official repos
2020-05-05 15:39:05 +00:00
# Configuration
Configuration file location: /etc/dnsmasq.conf
`dnsmasq.conf`
```bash
2020-05-06 00:27:22 +00:00
# DNS --------------------------------------------------------------------------
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
# If you don't want dnsmasq to read /etc/resolv.conf
no-resolv
no-poll
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
# DHCP and DNS interface and address
interface=enp0s25
listen-address=::1,127.0.0.1
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
# Upstream Google and Cloudflare nameservers
server=8.8.8.8
server=1.1.1.1
2020-05-05 15:39:05 +00:00
2020-05-06 00:35:55 +00:00
# DNS wildcards ----------------------------------------------------------------
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
# wildcard dns entry sending domain and all its subdomains to an ip
address=/blabla.org/192.168.1.2
# subdomain override
address=/plex.blabla.org/192.168.1.3
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
# DHCP -------------------------------------------------------------------------
dhcp-range=192.168.1.51,192.168.1.199,255.255.255.0,480h
# gateway
dhcp-option=3,192.168.1.1
dhcp-authoritative
#dhcp-leasefile=/var/lib/misc/dnsmasq.leases
2020-05-05 15:39:05 +00:00
```
# resolv.conf
2020-05-06 00:27:22 +00:00
Contains DNS nameservers to be used by this linux machine.</br>
Since dnsmasq, a DNS server, is running right on this machine,
the entries should point to localhost.
2020-05-06 00:35:55 +00:00
Bit of an issue is that this file is often changed by various system services,
like systemd or dhcpcd.
To prevent this, `resolv.conf` will be flagged as immutable,
which prevents all possible changes to it unless the attribute is removed.
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
Edit /`etc/resolv.conf` and set localhost as the dns nameserver.
`resolv.conf`
```
nameserver ::1
nameserver 127.0.0.1
```
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
Make it immutable to prevent any changes to it.
2020-05-05 15:39:05 +00:00
* `chattr +i /etc/resolv.conf`
2020-05-06 00:27:22 +00:00
Check if the content is what was set.
* `cat /etc/resolv.conf`
If it was changed by dhcpcd, edit `/etc/dhcpcd.conf`
and add `nohook resolv.conf` at the end.</br>
Restart the machine, disable the immutability, edit it again,
add immutability, and check.
* `sudo chattr -i /etc/resolv.conf`
* `sudo nano /etc/resolv.conf`
* `sudo chattr +i /etc/resolv.conf`
* `cat /etc/resolv.conf`
2020-05-05 15:39:05 +00:00
# /etc/hosts
2020-05-06 00:27:22 +00:00
dnsmasq reads `/etc/hosts` for IP hostname pairs entries.
This is where you can add hostnames you wish to route to local servers.
Unfortunately no wildcard support.
But as seen in the `dnsmasq.conf` there is a wildcard section solving this,
so blabla stuff here is redundant.
`hosts`
```
127.0.0.1 docker-host
192.168.1.2 docker-host
192.168.1.1 gateway
192.168.1.2 blabla.org
192.168.1.2 nextcloud.blabla.org
192.168.1.2 book.blabla.org
192.168.1.2 passwd.blabla.org
192.168.1.2 grafana.blabla.org
```
# Start the services
`sudo systemctl enable --now dnsmasq`
# Test it
2020-05-06 00:35:55 +00:00
#### DHCP
2020-05-06 00:27:22 +00:00
Set some machine to use DHCP for its network setting.
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
It should just work.
2020-05-05 15:39:05 +00:00
2020-05-06 00:35:55 +00:00
You can check on the dnsmasq host, file `/var/lib/misc/dnsmasq.leases`
2020-05-06 00:27:22 +00:00
for the active leases.
2020-05-06 00:35:55 +00:00
#### DNS
2020-05-06 00:27:22 +00:00
* `nslookup google.com`
* `nslookup gateway`
* `nslookup docker-host`
* `nslookup blabla.org`
* `nslookup whateverandom.blabla.org`
* `nslookup plex.blabla.org`
2020-05-05 15:39:05 +00:00
# Update
2020-05-06 00:27:22 +00:00
During host linux packages update.
# Backup and restore
2020-05-06 00:35:55 +00:00
#### Backup
2020-05-06 00:27:22 +00:00
Using [BorgBackup setup](https://github.com/DoTheEvo/selfhosted-apps-docker/tree/master/borg_backup)
that makes daily snapshot of the entire /etc directory
which contains the config files.
2020-05-06 00:35:55 +00:00
#### restore
2020-05-05 15:39:05 +00:00
2020-05-06 00:27:22 +00:00
Replace the config files with the one from backup