Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: Zeggjk 18. 04. 2023, 10:09:21
-
Ahoj, používám wireguard a chtěl bych mít na klientovi, když je připojen pomocí wireguardu do mé domácí sítě nastaven svůj DNS server, abych nemusel manuálně zjišťovat, co za IP adresu má které zařízení v lokální síti. Bohužel, jakmile zadám na straně klienta DNS=IP_meho_DNS, tak jsem totálně bez DNS. Jediné co funguje, když použiji třeba DNS=1.1.1.1, ale pak samozřejmě nemám k dispozici jmenné názvy zařízení ze své lokální sítě.
Na straně routeru mám toto:
config interface 'wg0'
option proto 'wireguard'
option private_key 'DFR8****************256='
option listen_port '1234'
list addresses '10.0.10.0/24'
option delegate '0'
option peerdns '0'
list dns '10.10.64.1'
config wireguard_wg0
option route_allowed_ips '1'
list allowed_ips '10.0.10.1/32'
option persistent_keepalive '25'
option public_key 'KXQ***********67W='
option description 'Mac-prace'
A na straně klienta toto:
[Interface]
PrivateKey = TKI************1u/BA8=
Address = 10.0.10.1/32
DNS = 10.10.64.1
[Peer]
PublicKey = TXw****************/BEA=
AllowedIPs = 0.0.0.0/0
Endpoint = 78.XX.XX.XX:1234
Jinak po navázání spojení je zařízení s IP 10.10.64.1 dostupné. Můžu na něj přes ssh, zobrazí se web stránky, ale DNS co na tom běží mě neobslouží.
-
Hned po odeslání příspěvku mi to došlo, ale zase ne tak rychle a tak původní příspěvek už nemůžu editovat, tak prosím o uzavření tohoto vlákna. DNS musí být 10.0.10.0 a již je vše funkční.
-
Wireguard a DNS jsem řešil poslední dva dny, pro upřesnění ještě v kombinaci s Network managerem a wifi. Ntb málem letěl z okna. Nakonec jsem skončil u tohoto skriptu, který stačí přidat do PostUP a PostDOWN. Snad to někomu ušetří pár hezkých chvilek. Vím, je to prasárna, ale jak to udělat líp už mě opravdu nenapadá.
#!/bin/bash
if [ "$1" == "" ]; then
echo 'missing flag, use -e or -d'
exit 1
fi
DNS=192.168.5.5
Intefacename=wlo1
IterfaceID=$(nmcli con show | grep $Intefacename | cut -c 44- | awk '{print $1}')
while [ "$1" != "" ]; do
case $1 in
-e )
nmcli con modify $IterfaceID ipv4.dns $DNS && nmcli con modify $IterfaceID ipv4.ignore-auto-dns 'true' && systemctl restart network-manager.service
;;
-d)
nmcli con modify $IterfaceID ipv4.dns '' && nmcli con modify $IterfaceID ipv4.ignore-auto-dns 'false' && systemctl restart network-manager.service
;;
*)
echo 'wrong flag, use -e or -d'
exit 1
;;
esac
shift
done
-
Wireguard a DNS jsem řešil poslední dva dny, pro upřesnění ještě v kombinaci s Network managerem a wifi. Ntb málem letěl z okna. Nakonec jsem skončil u tohoto skriptu, který stačí přidat do PostUP a PostDOWN. Snad to někomu ušetří pár hezkých chvilek. Vím, je to prasárna, ale jak to udělat líp už mě opravdu nenapadá.
A nie je jednoduchšie sa naučiť, ako presne funguje DNS s NetworkManager-om a používaným resolverom (či už dnsmasq alebo systemd-resolved)? K tomu pomôže aj vedieť základy, ako má DNS fungovať ;). Mastiť skripty, to je taký narovnávak na ohýbak.
Štandardne wireguard (pokiaľ to nie je obmedzené wg konfiguráciou peera - keď sú uvedené zóny v parametre DNS=) nastaví DNS na svojom linku, keď je up, ako resolver pre zóny ~. (t.j. pre všetky). Ak to tak nerobil, tak zjavne bolo šahané ešte aj niekam inde.