Privacy DNS Chooser Script v1.0 "Snow Breeze"

Disclaimer : I'm the author of this project.

🚀 Privacy DNS Chooser Script v1.0 "Snow Breeze" Release!

Project source code : https://github.com/rollsicecream/privacy-dns-chooser

Dear Community,

I'm thrilled to announce the official release of the Privacy DNS Chooser Script v1.0, code-named "Snow Breeze"! This marks a significant milestone in my journey to simplify the process of enabling DNS-over-TLS with privacy-focused DNS providers on Linux systems using systemd-resolved.

Key Highlights:

  • User-Friendly Setup: Easily configure DNS-over-TLS with a seamless and intuitive CLI Interface
  • Privacy-Focused Providers: Choose from trusted DNS providers like Quad9, Mullvad DNS, and NextDNS (more coming soon!)
  • Enhanced Security: DNS-over-TLS is enabled by default for a more secure online experience.

How to Get Started:

  1. Ensure you have systemd-resolved installed on your Linux system.
  2. Download the script from GitHub.
  3. Run the script with sudo to set up your preferred DNS provider.

Your Feedback Matters:

We value your feedback! Share your experience, report issues, or suggest improvements on GitHub Issues. Your insights help us refine and enhance the Privacy DNS Chooser Script.

Spread the Word:

Help us reach more users by sharing the news! Talk about it, share on your favorite forums, and let your community know about the release.

Thank you!

GustavoM,
@GustavoM@lemmy.world avatar

Ensure you have systemd-resolved installed on your Linux system.

Oh boy.

MigratingtoLemmy,

Man, did you really have to make it dependent on systemd?

Strit,
@Strit@lemmy.linuxuserspace.show avatar

It’s designed for systemd-resolved, so I would assume that he had to. ;)

MigratingtoLemmy,

Ah, missed that. Thanks

Divine_Confetti,
@Divine_Confetti@sh.itjust.works avatar

Sorry I’m new to the networky world of things, could someone explain what TLS and DNS (seen it in settings here and there) are, and the differences between them.

CosmicGiraffe,

DNS = Domain Name System. This is used to lookup an IP address (e.g. 123.234.54.32) from a domain name (e.g. lemmy.ml). A DNS query is one of the first things your computer does when you visit a site.

Plain DNS is unencrypted, which means that anyone with the ability to read your requests (e.g. your ISP) can see the names of sites that you’re visiting.

TLS = Transport Layer Security. This is a protocol that’s used to create an encrypted connection between your device and another one, in this case the DNS server. When this is used, the content of your DNS requests is hidden. Your ISP can still see that you’re talking to the DNS server, but not what you’re saying to it.

TLS also allows your device to cryptographically verify the identity of the DNS server. Without it, someone with the ability to modify your connection could change the responses from the DNS server. That would allow them to send you back the IP address of a server they control, rather than the real servers IP.

Pantherina,
@Pantherina@feddit.de avatar

Cool project! Do you know Captive portals? Because there you need to use DHCP DNS a lot, and turn off dnssec and dot afaik

Baritone5371, (edited )

Hello! That's something that I should keep an eye on! When speaking about Captive Portals, I just assume everyone uses 4G/5G (which doesn't require these portals to be used) instead of open networks. My script already has DNSSEC disabled since it has caused some problems during testing. BTW, just a question : Are these portals very common? I haven't seen one since years now.

Pantherina,
@Pantherina@feddit.de avatar

In Germany every public wifi, train (ICE windows block cell internetand they are currently lasering small waves in them), hotels, cafes, private wifis even if you are a guest.

Because of “data protection” everyone needs to accept TOS so every network has them.

No idea where you live but cell data is often expensive.

I just use the MullvadVPN app, my systemd-resolved is plain and insecure and Mullvad does all the secure DNS stuff. Obviously sucks and is not scalable at all.

Systemd implementing a switch that could then be integrated into GUIs, like KDE6’s captive portal opener, is crucial. So for the portals you would make the DNS insecure, log in and secure it again. Best automatically.

Baritone5371, (edited )

Ok. I will see that! If you have a GitHub account. You can make an issue right now, so tracking the issue would be better for me. Or I could do that myself.

Edit : I have made a prototype that I could release it soon as an alpha. When it gets released, your goal is to test in a place where captive portals are present. Sadly, the script won't be automatic but requires user interaction.

Edit 2 : it is now available as alpha on the releases page.

Pantherina,
@Pantherina@feddit.de avatar

Cool!

Baritone5371, (edited )

I have edited the release page for the alpha. I have modified the file to correct a bug and add the deletion of the backup file when the operation is finished and also restart systemd-resolved service.

_s10e,

Have you looked into how existing software handles captive portals. I believe, both Ubuntu (or Gnome or Network-Manager) and Firefox do check for such portals and detect real internet access. (They simple poll some URL detectportal.vendor.com and check for the expected return code. Portals usually redirect.)

Now I’m thinking, what if this check could trigger a change to the DNS configuration. That is use DoT when internet is available, otherwise fall back to DHCP announced DNS

Pantherina,
@Pantherina@feddit.de avatar

That is neat! It is a specific response so it should work.


<span style="color:#323232;">#!/bin/bash
</span><span style="color:#323232;">
</span><span style="color:#323232;"># Function to set insecure DNS
</span><span style="color:#323232;">function insecure-dns() {
</span><span style="color:#323232;">  # Backup the original resolved.conf file
</span><span style="color:#323232;">  cp /etc/systemd/resolved.conf /etc/systemd/resolved.conf.bak
</span><span style="color:#323232;">
</span><span style="color:#323232;">  # Modify resolved.conf to disable custom DNS, DoT, and DNSSEC
</span><span style="color:#323232;">  sed -i 's/^DNS=.*/#DNS=/; s/^Domains=.*/#Domains=/; s/^DNSOverTLS=.*/#DNSOverTLS=/; s/^DNSSEC=.*/#DNSSEC=/' /etc/systemd/resolved.conf
</span><span style="color:#323232;">
</span><span style="color:#323232;">  # Restart systemd-resolved
</span><span style="color:#323232;">  systemctl restart systemd-resolved
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="color:#323232;"># Function to set secure DNS
</span><span style="color:#323232;">function secure-dns() {
</span><span style="color:#323232;">  # Restore the original resolved.conf file
</span><span style="color:#323232;">  mv /etc/systemd/resolved.conf.bak /etc/systemd/resolved.conf
</span><span style="color:#323232;">
</span><span style="color:#323232;">  # Restart systemd-resolved
</span><span style="color:#323232;">  systemctl restart systemd-resolved
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="color:#323232;">while true; do
</span><span style="color:#323232;">  response=$(curl -sI captive.test.com | head -n 1 | cut -d' ' -f2)
</span><span style="color:#323232;">
</span><span style="color:#323232;">  if [ "$response" == "200" ]; then
</span><span style="color:#323232;">    insecure-dns
</span><span style="color:#323232;">    xdg-open captive.test.com
</span><span style="color:#323232;">    sleep 30
</span><span style="color:#323232;">    # something to wait until window is closed, otherwise spam!
</span><span style="color:#323232;">  else
</span><span style="color:#323232;">    secure-dns
</span><span style="color:#323232;">  fi
</span><span style="color:#323232;">
</span><span style="color:#323232;">  sleep 5
</span><span style="color:#323232;">done
</span>

This should work. What would be needed is to track the process of the login and only continue when the window is closed again.

progandy,

No need for a systemd switch. It should work with a dedicated “portal” browser that bypasses the global dns and has a built-in resolver using the dns from dhcp.

Pantherina, (edited )
@Pantherina@feddit.de avatar

Yes if that works for sure. Problem here is that GNOME and KDE use different webengines, so yay no standards. Firefox doesnt support that I think?

I use a seperate firefox profile with a shortcut like


<span style="color:#323232;">blabla desktop entry
</span><span style="color:#323232;">Name=Captive Portal
</span><span style="color:#323232;">Exec=mullvad-exclude firefox -P captive http://captive.kuketz.de
</span>

I wanted to do something with mullvad-exclude but that didnt work for some reason, as when excluding it I think it had no internet?

_s10e,

That was also my question. A broader question is how to access services on the local network that are announced through local DNS? Like your router’s web interface or any similar device.

Can you have split routing? Most queries go to our preferred DNSoverTLS endpoint, but some go to DNS53 on the local network.

This would also solve the captive portal if the host used to detect captive portals is always resolved locally.

Pantherina,
@Pantherina@feddit.de avatar

Yes I think you can exclude local IPs in systemd-resolved

  • All
  • Subscribed
  • Moderated
  • Favorites
  • random
  • uselessserver093
  • Food
  • [email protected]
  • aaaaaaacccccccce
  • test
  • CafeMeta
  • testmag
  • MUD
  • RhythmGameZone
  • RSS
  • dabs
  • oklahoma
  • Socialism
  • KbinCafe
  • TheResearchGuardian
  • SuperSentai
  • feritale
  • KamenRider
  • All magazines