DNScrypt - szyfrowanie zapytań dns
Rola serwerów i żądań DNS przez wiele osób traktowana jest z pewną dozą ignorancji. Podejście “jest? działa? to jest dobrze” okazuje się nie zawsze być poprawne.
O co chodzi? Właśnie o te nieszczęsne zapytania DNS!
Zabawa z DNSami umożliwia nie tylko rejestrowanie odwiedzanych przez użytkownika stron (np. przez ISP, organizacje rządowe, złośliwe rodzeństwo/administrator) lecz również nieco
bardziej niebezpieczne rzeczy. Jak więc się przed tym ustrzec?
Moja odpowiedź, dająca dużo większą swobodę, a jednocześnie ochraniająca prywatność i bezpieczeństwo DNScrypt.
W dużym skrócie, działanie DNScrypta polega na przesyłaniu podpisanych kluczem kryptograficznym zapytań DNS po szyfrowanym tunelu, najczęsciej na porcie 443 tcp
(co pomaga jednocześnie ominąć restrykcje lokalnej sieci).
Jak więc to uruchomić?
Postaram się pokazać jak zmusić do współpracy dnscrypt-proxy z dnsmasq, użytym w celu keszowania odpowiedzi, które może skutkować na przykład przyspieszeniem wczytywania stron 😉
Zacznijmy więc od instalacji zarówno dnscrypt-proxy jak i dnsmasq.
O ile dnsmasq znajduje się w repozytoriach większości dystrybucji, i można go łatwo zainstalować poprzez dołączonego menadżera pakietów:
# pacman -S dnsmasq # aptitude install dnsmasq # yum install dnsmasq
o tyle dnsmasq możemy ściągnąć ze strony projektu, jeśli nie znajduje się on w repozytorium naszego systemu.
HINT! można również przekompilować źródła dla naszego genialnego smartfona z androidem!
Gdy mamy już potrzebne oprogramowanie, czas na konfigurację gniazdka dnscrypt-proxy. Na systemie ArchLinux, jego konfigurację można łatwo wyedytować za pomocą polecenia:
systemctl edit dnscrypt-proxy.socket
W tym momencie trzeba dokonać wyboru z którego serwera chcemy korzystać
i w zależności od dokonanego wyboru uzupełnić odpowiednie pola:
[Socket] ListenStream= ListenDatagram= ListenStream=127.0.0.1:40 ListenDatagram=127.0.0.1:40
Zgodnie z powyższą konfiguracją dnscrypt-proxy odpowiada na zapytania wysłane na adres 127.0.0.1:40.
Pora więc na ustawienie dnsmasq w roli serwera keszującego!
Tutaj sprawa jest tak samo prosta, ustawiamy stosowną konfigurację w pliku:
/etc/dnsmasq.conf
no-resolv server=127.0.0.1#40 listen-address=127.0.0.1
I gotowe! Ustawmy jeszcze tylko adres serwera DNS z którego korzysta system w pliku:
/etc/resolv.conf
na:
nameserver 127.0.0.1
Poprawność działania możemy sprawdzić korzystając z programu dig:
dig onet.pl @127.0.0.1
Zwróć uwagę, że ponowne takie samo zapytanie trwa już jedynie 0 milisekund. Jest to zasługa dnsmasq!
Niestety, przy każdym uruchomieniu klienta dhcp nadpisuje on ustawienia dotyczące serwerów dns. Jeśli nie korzystasz z NetworkManagera,
można ustawić odpowiedni atrybut na plik w którym znajdują się adresy serwerów dns. Można to zrobić wydając polece:
chattr +i /etc/resolv.conf
I gotowe!
Korzystałem z ArchLinuxa tutaj.