Supported on Firewalla Gold, Purple, and Blue Plus.
In addition to DNS over HTTPS, Firewalla now supports another DNS service: Unbound. It is a validating, recursive, caching DNS resolver, it is installed locally on the Firewalla box, which helps increase your online privacy and security.
To learn more about Firewalla DNS Services, here is a detailed guide: DNS Services Introduction.
How does it work?
Unbound uses DNSSec to validate DNS result and prevent it from man-in-the-middle attacks. Because Unbound itself is a DNS resolver, it will connect to different DNS servers for different domains. No single public DNS server will have all your DNS records, thus it protects your privacy at a certain level.
- Please be aware that unbound doesn't encrypt DNS traffic. For DNS traffic encryption, you will need to use DNS over HTTPS.
- Unbound and DNS over HTTPS can't be used together on the same devices.
- You can use Unbound on some devices and DoH on others.
How to enable Unbound?
Unbound is part of the DNS Service feature. To apply Unbound to your devices:
- Tap the DNS Service button at the bottom of the main page, turn on Unbound and select the devices/groups/networks to apply to. Please note that any specific device/group/network can only be applied with one of the DNS services at a time.
- You can also go to the detail page of any device, tap "…" on the control button panel, tap DNS service, and select Unbound.
In the 1.52 app release, you can also now send DNS requests over VPN instead of your ISP to protect your privacy further by enabling Unbound over VPN. To use this feature, you must have a VPN Client connection configured on your Firewalla and be using Unbound. Watch a video tutorial or read more about this feature in our 1.52 App Release Notes.
Can I use Unbound and DoH together?
Firewalla provides various DNS services including Unbound, DNS over HTTPS(DoH), and Family Protect. Learn more about Firewalla-managed DNS Services.
For any given devices/groups/networks, these services are mutually exclusive. Just like rules, when there is conflict, the priority of different levels is device > group > network > global.
For example, in the screens below, if you applied Unbound to all devices, and applied DoH to the device group - IoT. It means:
- On the IoT devices, Doh will take precedence over Unbound.
- All the newly joined devices will be applied with Unbound automatically.
How to test Unbound?
Open the browser, visit https://dnsleaktest.com/
Run a standard test, if the IP in the test result is your public IP, it means unbound is enabled. (DNS is queried directly from the Firewalla Box to dnsleaktest.com's DNS server.)
Customize DNS service
Some Unbound servers will exclude private IP results. A workaround is to manually add the mapping on Firewalla. Guide: How to customize Firewalla DNS service
For users who are using Unraid or working with private domains, on box version 1.975 and above, you can add your configuration manually as a workaround.
In the included file under ~/.firewalla/config/unbound_local/, add:
server: private-domain: "myunraid.net"
then restart your unbound server:
sudo systemctl restart unbound
Another example for Plex, to allow plex.direct to be resolved to private IP addresses:
server: private-domain: "plex.direct"
then restart your unbound server with the command above.
server: private-domain: "myunraid.net"
Dependencies with other features
- DNS Booster must be turned on for Unbound to work.
- Any specific device/group/network can only be applied with one of the DNS services at a time, including Unbound, DNS over HTTPS, and Family Protect. When there is a conflict, the priority of different levels is device > group > network > global.
- If your device is connected to a VPN with DNS over VPN enabled, any DNS features including Unbound will not work.
Can we use Unbound together with Pi-Hole?
Or do we need to use a container that combines both and *not* use the embedded Unbound implementation?
Thanks in advance!
It can't. The idea of unbound is not having any upstream DNS resolver between unbound and authoritative nameservers.
@Support Team: thanks for the swift response, I was rather thinking / hoping for a setup like this:
clients -> firewalla -> pi-hole -> unbound
where pi-hole uses unbound as DNS resolver (and indeed not the other way round).
I used to run this setup before, with pi-hole and unbound on separate raspberry pi devices, but would much rather have it all integrated on my FWP now, if possible at all, to ensure all FW functionality can be used.
Guess that only leaves the possibility not to use the Unbound that is now 'embedded' in Firewalla and use a container that contains both Pi-Hole and Unbound?
If so, could you please provide some support on how to do this? (another FW user started this topic: https://help.firewalla.com/hc/en-us/community/posts/1500001172701-Pihole-and-Unbound )
We have not tried PiHole + Unbound on Firewalla, I think it's better to leave it to the community to support it.
PiHole should already have good docs on how to work with unbound. There may already have docker containers out there supporting it.
Are you going to support setting custom forward-zones with DoH or DoT? Says you get DoH or Unbound but unbound supports DoH.
Does the Firewalla implementation of Unbound not support DoH? It seems like Unbound natively supports DoH as of 2020: https://medium.com/nlnetlabs/dns-over-https-in-unbound-c7a407e8480#:~:text=Using%20DNS%2Dover%2DHTTPS%20in%20Unbound&text=The%20port%20that%20Unbound%20will,the%20https%2Dport%20configuration%20option.&text=Queries%20to%20other%20paths%20will,the%20http%2Dendpoint%20configuration%20option.
DoH and Unbound are completely different things. DoH is the transport going to Unbound (a DNS server). Since unbound in your case is local, you don't need to use DoH to talk to it.
We're talking about forward-zones, using DoH upstream. Not client to Unbound.
May I know why you want this feature? Do you have a private zone?
For the same reason you offer DoH directly in Firewalla. Privacy and Security. I don't care if my internal clients use standard DNS but leaving my network I want encryption. By default Unbound uses the root servers and works its way from there, you don't need to specify a DNS server to forward requests to. Your DNS requests will hit unbound then get forwarded randomly to a DNS service on the internet. Unbound lets you specify forward-zones, including DoH and DoT. So if I wanted to combine Unbound and DoH I would just add a DoH forward-zone to Quad9 or Cloudflare. I'm really surprised this didn't occur to anyone. Especially since it was called out that you can not combine Unbound with DoH. You absolutely can, Firewalla just hasn't implemented it.
Then why not just use DoH feature in Firewalla app? It's the same as unbound + DoH forwarding.
Either query DNS from different authoritative servers (unbound with no forwarding): DNS requests are not encrypted, but no single DNS server has full access of DNS requests.
Or query DNS from DoH servers (DoH): DNS requests are encrypted, but quad9/cloudflare can have full history of your DNS requests.
None of them is perfect.
Just a couple of possible reasons:
(this is the main reason run Unbound and Pi-Hole in Docker on my FWP)
Hope this helps :)
Just my 2 cents. Unbound will prevent DNS servers to have full access of ALL (history) DNS requests, and DoH will encrypt DNS requests. It seems good in terms of security to me...
I currently use DoH, and love that feature. I would also love to limit the # of DNS requests to remote servers (and use a local network cache instead, such as the one used with Unbound feature) not only for security reasons, but also for the protection of the environment, limiting bandwidth use, and thus power consumption.
Hope this helps also :-)
Is there a way to see a resultant set of policy? For example, if I have rules set on a device, groups, networks and globally, how can I easily see what is being applied based on certain scenarios.
For example, it would be great to be able to specify a device, a target of some sorts (domain, for example) and see what is applied to traffic and why. I.e. if it's a rule on the device, the device group or globally.
Something similar to RSOP for Active Directory Group Policy - hence using that terminology.
Thanks for the feedback, will forward to dev team to do some research on this.
Have Purple on Simple Mode (no DHCP server on Purple) - will turning on Unbound intercept all port 53 DNS requests, i.e., set and forget (no client setup needed)?
Currently have PiHole + Unbound on an RPi with some of the network traffic going through NextDNS and ControlD via DoH. With Unbound on FW (blocking all external DNS requests), I can turn off the one on the RPi.
@Rom, this is correct. No client setup is required.
Uncovered some very unexpected behavior with unbound enabled on my gold in router mode. I am a unix sysadmin and support our DNS infrastructure, and was in process of moving authoritative zone from one hosting provider to another. I built a test zone on the new hosting provider and attempted to test dns resolution using the command "dig @204.128.x.x test.testzone.com and low and behold... my dns request was intercepted by firewalla and directed to the existing hosting provider.
Why is firewalla intercepting a dns query directed to a specific name server ip? I could see this working differently if unbound was attempting to resolve a glue record, but why intercept a request generated by IP?
Firewalla will always intercept DNS requests and forward them to the DNS server you set. This is to prevent 'things' (like kids) from bypassing control via a different DNS server/service.
If you do want to try dig without this type of forward, what you can do is go inside the firewalla (via ssh and do your testing), and the other is to temporarily disable dnsbooster (gears->advanced->configurations)
@Firewalla : would you consider enabling the following:
- running Firewalla's 'embedded' Unbound but not setting it as FW's direct DNS server (see below)
- allowing Pi-Hole in a docker to use FW's Unbound as its upstream DNS resolver (so in the FW app, we would configure the Pi-Hole IP address as DNS server), and in Pi-Hole we would define something along the lines of 172.16.0.1#5335 as Pi-Hole's upstream DNS server
And as a next possibility, if you would consider the above (which would be awesome :) ), would you then consider adding an additional, adjustable conf file for Unbound to further finetune Unbound's config? (so you would keep the standard unbound.conf file, and enable an additional file that a user can modify) See the last line in this unbound.conf on how to do it: you just refer to a location where custom additional config files can be found, the original config will always be used as the starting point.
"Supported on Firewalla Gold, Purple, and Blue Plus"
Actually i'm lucky to have a firewalla blue and a firewalla red for my parents home. But actually i should not be lucky, because lots of great features are not supported on the baby firewalla's.
Seems i should switch to a "real" firewall of another brand. To not get "unlucky" of features i can't use. Isn't it?
Where does Unbound get its results from? The reason for asking is that things like Google DNS are unusable here (a non-US country) because they return results for US hosts for things like CDNs for which access ranges from very slow to blocked entirely, rather than local hosts. Unless they've fixed it recently, using Google's DNS rather than the ISPs one results in breakage for a number of widely-used sites. Thus my question about where does Unbound get its results from, if it's from out-of-country DNS servers then it could result in the same breakage as Google's DNS.
Unbound will get it's results from the authoritative dns server. Each time you ask unbound, it'll check, which DNS-Server is authoritative for the asked url. So there's no single upstream dns-server.
i'm using unbound running beside pihole on my pi. Actually i would be happy to use unbound within firewalla blue and red, because so i can use unbound functionallity also in places where i don't use pihole but i use firewalla.
I have Unbound enabled. No local DNS resolution is happening. Investigating using dig shows that Firewalla is forwarding local name resolution requests (e.g. computername.lan) to root servers on the internet... and, of course, local names are not getting resolved.
Is there some special configuration that needs to be done to make sure local machines can resolve each other using their hostnames?
You need to look at https://help.firewalla.com/hc/en-us/articles/1500002445242-Difference-between-Search-Domain-Local-Domain
Here you can setup different domains to be resolved locally
So if I use Unbound, I get that my DNS requests go to a local Unbound server on the Firewalla. I get that by distributing DNS queries it increases difficulty for any one DNS provider to associate site visits to me. I get that DNS requests between devices on my local network and Ubound server on Firewalla don’t need to be encrypted (unless you don’t want someone on local network to see DNS request).
My BIG question is are the DNS queries from the Unbound local server on Firewalla to Root/authoritative DNS servers (which uses DNSSec) out on the internet (the up/down arrows in the diagram) encrypted? If not, then aren’t all the DNS requests exposed to ISP?
I get benefit of DNSSec and how it helps defeat bogus DNS query results. I think what creates a lot of confusion is the statement on Firewalla pages like this one “Please be aware that unbound doesn't encrypt DNS traffic.” makes it sound like my DNS queries when using Unbound can be seen by ISP…why would I want tot do that?
Your ISP won’t be resolving the request, that’s the only benefit. Even with encrypted DNS you’ll still be visiting the resolved address using your ISP anyway, so DNS or not, your ISP is likely to know where you’re visiting.
I use wireguard VPN client for that. Right now I have "Force DNS over VPN" selected (configured with AdGuard Ad Blocker). While that work fairly well, it means I can't use filtering features of Firewalla.
I decided to do some more digging. Looking at the Unbound docs (https://unbound.docs.nlnetlabs.nl/en/latest/use-cases/home-resolver.html), it seems that the most basic config for Unbound is as a local dns cache. Additional features like DNSSEC and encryption need to be configured. You can do DoH and DoT between local clients and the Unbound server, but not sure of the benefit of this on your local LAN (unless you're worried someone on your LAN might be sniffing your DNS traffic). Less obvious from that site is the fact you can encrypt upstream traffic. I ended up finding some info in the docs for the unbound.conf file https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html which does discuss the options for TLS for upstream.
I also found a couple of what look like decent blogs
These both describe encrypting the upstream. The nurdletech link also includes some good references at the end including https://www.ctrl.blog/entry/unbound-tls-forwarding.html.
No I have not tried to set any of that up so not sure what if any technical hurdles there might be to implementing on Firewalla.
Speaking of Firewalla, I did a little digging on the Firewalla itself, and I found /home/pi/.firewalla/run/unbound/unbound.conf. As it stands I don't see anything that would indicate that upstream traffic is currently encrypted, but it does appear that DNSSEC is configured (auto-trust-anchor-file).
Please sign in to leave a comment.