How to automatically re-resolve DNS in Wireguard on Linux
When installing wireguard-tools
on Linux, it includes a script called reresolve-dns.sh
. This will take care of automatically re-resolving.
According to its documentation, you should run it every 30 seconds or so.
So we can just create a systemd timer to run it every 30 seconds.
Easy way
Use our script
wget -qO- https://techoverflow.net/scripts/install-wireguard-reresolve-dns.sh | sudo bash /dev/stdin
Now you need to enable it for each relevant interface separately, for example for wg0
:
systemctl enable --now [email protected]
Hard way
Do manually what our script does.
Create /etc/systemd/system/[email protected]
:
[Unit]
Description=wg-reresolve-dns@
[Service]
Type=oneshot
ExecStart=/usr/share/doc/wireguard-tools/examples/reresolve-dns/reresolve-dns.sh %i
Create /etc/systemd/system/[email protected]
:
[Unit]
Description=wg-reresolve-dns@ timer
[Timer]
Unit=wg-reresolve-dns@%i.service
OnCalendar=*-*-* *:*:00,30
Persistent=true
[Install]
WantedBy=timers.target
Now you need to enable it for each relevant interface separately, for example for wg0
:
systemctl enable --now [email protected]