Kiindulásként adott egy VPS, amin Ubuntu server 16.04 fut. Van egy A rekordja is a DNS-ben, szóval nem a sötétben bujkál.
Ezen van pár dolog, közte egy dnsmasq, ami OpenDNS-re forwardol. Jó okom van ezt használni névfeloldásra.
Otthoni hálózaton belül az Android is azt a DNS-t használja, amit a DHCP szerint kell neki, ellenben mobilneten nincs ráhatásom, hogy mit használjon. Illetve kerülő úton van lehetőség egyéni DNS szerver használatára: a régebbi Androidokon egy "dnspipe" nevű app vált be a legjobban erre a célra.
Az új 9-es droidon viszont már van egy privát DNS beállítás. A fejembe vettem, hogy én ezt akarom használni...
Sajnos, nem olyan egyszerű, hogy ott a kedvenc DNS szerverem IP címét adhatnám meg. Hanem ott egy DoT szerver címe kell...
Ezt sikerült összehebrákolnom néhány leírás alapján a 16.04 -es szerveren.
Kellékek (ami hiányzott):
Nginx, certbot
Az Nginx-nek egy újabb verziója kell, amiben már ott van a stream plugin.
sudo su
add-apt-repository ppa:certbot/certbot
add-apt-repository ppa:nginx/stable
apt update
apt install nginx certbot python-certbot-nginx
Ezután létrehozom az ssl tanusítványt és kulcsot, de úgy hogy majd én szerkesszem be a konfigokba:
certbot certonly --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): pelda@e.mail
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated) (Enter 'c' to cancel): peldadomain1.com peldadomain2.hu
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for peldadomain1.com
http-01 challenge for peldadomain2.hu
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/peldadomain1.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/peldadomain1.com/privkey.pem
Természetesen lehet csak 1 db domainre is megigényelni a tanúsítványt, illetve a valódi email címet és domain nevet átírtam itt példabeliekkel.
Az Nginx konfigot ki kell egészíteni az alábbiakkal:
stream {
server {
listen *:853 ssl;
proxy_pass 127.0.0.1:53;
proxy_connect_timeout 1s;
preread_timeout 2s;
}
ssl_certificate /etc/letsencrypt/live/peldadomain1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/peldadomain1.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# If you're new enough to support DoT you're new enough not to support old broken ciphers
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
ssl_session_cache shared:DoT:10m;
}
Időnként a certbot állítólag megújítgatja majd a tanúsítványt. Azért, hogy a művelet után ne legyen ssl probléma, az érintett szolgáltatások beállításait frissíteni kell. Nálam itt egy postfix is működik, ami most már szintén a a Let's Encrypt tanúsítványt használja.
Hogy ne felejtsem el, most rögtön újítottam egyet:
certbot renew --force-renewal --deploy-hook "service postfix reload; service nginx reload"
Ezzel így a certbot elmentette a "renewal hook"-ot, hogy legközelebb, mikor önállóan megújít, mind az nginx, mind a postfix szolgáltatásokat emlékezteti rá.
A "listen *:853 ssl;" miatt az Nginx ssl-en át fülel a 853-as porton, és a "proxy_pass 127.0.0.1:53;" alapján beköti a localhost-on fülelő dnsmasq-ba. Ezzel így tulajdonképpen kész a DNS over LTS szerverem, és az Android 9-et futtató mobilom immár ezt használja privát DNS-ként. A valóságban nem volt ennyire egyszerű, volt egy pár melléütés.
Egy másik kérdés, hogy a VPS-en futó dnsmasq az upstream szerverhez is TLS csatlakozzon, azt majd akkor, ha szükségét érzem...