As I explore running Gitlab server and pages in Docker I’ll need some
local host urls to use. I could just add rows into my /etc/hosts
file for the host domains but I’d prefer a more elegant solution. I’m
going to set up local DNS forwarding using dnsmasq so I can host
Gitlab and Gitlab pages on my local machine.
Gitlab will need 2 host domains, one to route to the main Gitlab UI
and the second to route to the published Gitlab pages. I’m going to
just run these locally for testing purposed and will use
gitlab.example.lh
and pages.example.lh
(I’m using .lh
to denote
localhost) though I’d just use
a live DNS server in production.
Typically on linux systems running systemd
the network is managed
through a service called NetworkManager
which has a super useful
plugin for dnsmasq
. Dnsmasq is a super lightweight DNS forwarder that
runs locally on many distros. Dnsmasq can be used easily enough
independently of NetworkManger but I’m going to use the plugin for
convenience.
Firstly I make sure dnsmasq is installed on my distrobution, $man dnsmasq
brings up the manual so I know it is, if it wasn’t I’d
install it through my package manager.
To activate the plugin I add dnsmasq config to NetworkManager at the path
/etc/NetworkManager/conf.d/dnsmasq.conf
with the following contents:
[main]
dns=dnsmasq
Then to setup the routing of any host url ending with .lh
I have
created a file in /etc/NetworkManager/dnsmasq.d/lh.conf
with the
following line:
address=/lh/127.0.0.1
Finally I restart the NetworkManager service using the command sudo nmcli general reload
or I could have restarted the NetworkManager
systemd service eg: sudo systemctl restart NetworkManager
Now all the host urls I address will forward to my locahost and I test
this with a ping
.
$ ping any.domain.lh
PING any.domain.lh (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.095 ms