Incorrect Hostnames

Does this approach only affect the network table (and not the way queries normally work)? Is it just to make Pi-hole resolve hostnames only over IPv4?

Yes, that's how I understand

https://docs.pi-hole.net/ftldns/configfile/#resolve_ipv6

Apparently the issue with using RESOLVE_IPV6=no is that you end up having a network table with a lot of IPv6 adresses without hostname, which is something I cant imagine anyone wants...

Well, a lot of people seem to don't want the IPv6 host names. This is why we added this option. For instance, many German users receive host names for their IPv6 devices like p200300DA9BBF17FA0000000000000001.dip0.t-ipconnect.de which is their devices IPv6 address transformed into some more or less (rather less...) useful name. I can feel why they want to avoid this.

Doesn't sound bad to have the option to disable this, so here we go:

@tomco I'm interested in your thoughts, we should probably open a new discussion when you have suggestions for improving the new/mac_clients branch. It is more thought for v5.2, not earlier as there are some more things to get done and I don't want have it sitting as a possible blocker for an intermediate v5.1 release.

Hmm... I've tried adding RESOLVE_IPV6=no to /etc/pihole/pihole-FTL.conf, then I used "pihole restartdns" and (just in case) "pihole arpflush". After a few hours of waiting my Pi-hole unfortunately still used IPv6 hostnames. However, it seems like it did stop resolving some IPv6 addresses because there were quite a few of them without hostname. Retried the above steps but with rebooting afterwards but it just won't work. It stills shows the transformed addresses. That's why I commented the above.

Maybe I should just wait until MAC addresses can be used for hostnames...

edit: now the queries page (not the network table) constantly shows the correct hostname for my iPhone, but not for my Windows machine. Maybe the network table just needs to update itself for the iPhone hostname to change. I'll keep waiting.

Thanks, it should work. You can check with grep "RESOLVE_IPV6" /var/log/pihole-FTL.log if the setting is used.

It looks like resolving IPv6 addresses is not disabled. grep "RESOLVE_IPV6" /var/log/pihole-FTL.log doesn't return anything and the log file only contains "WARNING: Hostname of client (paste IPv6 GUA) too long, truncating to 64 chars!" and "Resizing "/FTL-queries" from 2064384 to 2293760" and resizing DNS cache.

/etc/pihole/pihole-FTL.conf contains RESOLVE_IPV6=no and pihole restartdns was used after the modification.

By the way, my queries page decided to change back to an ISP IPv6 address as hostname for the iPhone.

update: I've rebooted the Pi and the log file now shows "RESOLVE_IPV6: Don't resolve IPv6 addresses" (as expected). However, the lines after the reboot process once again show "WARNING: Hostname of client (paste IPv6 GUA) too long, truncating to 64 chars!", which means FTL is resolving IPv6 addresses? What's happening?

Thanks, we actually have a bug here which made the option a bit useless. Please set

DEBUG_RESOLVER=true

as well to get the desired behavior.

This PR will fix it:

I've just added DEBUG_RESOLVER=true to pihole-FTL.conf and run pihole restartdns.
Pihole-FTL.log now shows

 Trying to resolve <paste IPv6 address>
 ---> "" (configured to not resolve IPv6 host names)

As expected.

But it also shows

 0 / 93 client host names resolved
 0 / 4 upstream server host names resolved

The network table hasn't shown any changes regarding hostnames yet. Running "pihole arpflush" didn't change anything (well, it became blank for a moment and was suddenly filled up again). The query page doesn't show any changes either. Still the ISP IPv6 as hostname. I'll see whether anything has changed tomorrow.

This is not necessarily a problem as FTL tries to only resolve new clients and upstream servers every minute. Maybe it already knew everybody around so there was no need to resolve anyone here.

Hmm, yes, the cleaning will be a bit more difficult, maybe. You could do the following (but don't do it right now, keep on reading):

sudo service pihole-FTL stop
sudo sqlite3 /etc/pihole/pihole-FTL.db "DELETE FROM network;"
sudo sqlite3 /etc/pihole/pihole-FTL.db "DELETE FROM network_addresses;"
sudo service pihole-FTL start

These lines would ensure FTL does not try to obtain the host name from the database.

However, what you should do is trying my fix which I backported to v5.0 for you.
Run

pihole checkout ftl fix/broken_RESOLVE_settings_master

and agree that this is what you should do. After running the checkout, you can also remove DEBUG_RESOLVER. It will not be needed any longer. Just make sure to switch back to master before updating to v5.1 when this is released. But even if you forget about this, you will see that you cannot update to v5.1 so no drama will happen.

If my backported fix doesn't work for some reason, you can still try my cleaning commands from above.

I've run pihole checkout ftl fix/broken_RESOLVE_settings_master, removed DEBUG_RESOLVER from the FTL conf and restarted FTL. It works.

However, it's not really helpful. Because a lot of traffic is IPv6 (it looks like devices that also support IPv6 rather use IPv6 than IPv4), you'll end up with a Pi-hole that's messier than before, having a lot more seperate IPv6 compared to IPv4 addresses in the network table, making it harder to couple queries to devices. The "top clients" tables on the dashboard show almost only IPv6 addresses. Those addresses change from time to time. That's a downward step compared to having all of a device its addresses assigned to an ISP IPv6 address hostname. Once again, I'll give it some time and see if my view on this matter changes. Ofcourse, if I'd like to, I could go back to the way it used to be at any time.

Furthermore, I would like to emphasize that coupling MAC addresses to hostnames and using this as a way to create a clear network table sounds like a great idea. I've read that it's currently an experimental feature, but I'm not sure when it's expected to be released and whether this new feature will solve this problem. I hope you can clarify this.


edit: I noticed that OP had this issue where clients have exactly the same hostname, whereas my ISP processes an IPv6 address into the ISP address (for example 2001-1c00-0000-0000-0000-0000-0000-0000.cable.dynamic.v6.ziggo.nl).

moreover, this error appeared in the FTL log 6 times over a period of 3 minutes:

ERROR: SQL query "END TRANSACTION" failed: database is locked
END TRANSACTION failed when trying to store queries to long-term database
Keeping queries in memory for later new attempt

followed by the following notice:

Notice: Queries stored in long-term database: 101 (took 1590575366144.0 ms, last SQLite ID 1270953)
        Queries from earlier attempt(s) stored successfully

This doesn't look like something to worry about but I'm posting it nonetheless.

This is nothing to worry about - it was implemented to prevent FTL from failing if the long-term database is locked. As you see it was later successful in storing them.

It is still in development and scheduled for v5.2 as far as I understood. I and others using it without problems in daily use but of course bugs can still occur.

This is expected. IPv6 is "better" than IPv4 and meant to replace the latter, hence, it only makes sense to prefer it if it is available.

I this different from before?

Why? Do you maybe have IPv6 privacy extensions enabled with aggressive settings?

I use it too, however, I agree that it should be done only when DNS fails are acceptable and you do not get killed by family members because mum killed the WiFi (again) :slight_smile:
Well, it has never failed for me, but the developers said that it is an experimental feature so it could fail at some point. And, as the network database is modified, there's also no way back (well, you have to start with an empty/old long-term database if you want to go back).

The network table itself does not change due to this, devices are already only one row in here and all matching IP addresses are added to them. What do you want to see here, exactly?

Otherwise, I agree with what has been said by others since you asked your question.

Simply said, the ideal situation would be to have OP’s screenshot of his network table but with the correct hostname and not some kind of ISP address.

Disabling IPv6 is not something I take as an answer. Using RESOLVE_IPV6=0 was to deal with this problem in some way, but doesn’t suffice.

That's entirely your choice. This is the offering of a workaround while we are working on something better.

Two things:

  1. The ISP host names are correct host names. They are what the (user-)configured upstream DNS server told Pi-hole.
  2. The other feature branch we're talking about allowing multiple host names per device (one per IP address to be precise). This will not allow you to specify the one correct host name. However, it will allow you to see all host names. This should be helpful.
    One example from my network table (I'm running the new branch):

With ‘correct’ hostname I meant using a local hostname instead of a global one. (If I’m correct about this...)

Will this new feature affect the queries page (and the dashboard and so on)? I.e. will OP be able to distinguish all the “broadband.bt.com” clients without having to look at a MAC address and looking up the hostname corresponding with that MAC yourself in the network table? (This can ofcourse already be done via the admin interface if you’re running Pihole DHCP.)
Thanks for clarifying some things.

How would you detect this reliably?
I have a website for my family and, for convenience use internet-radio.myfamilyname.nl as host names for devices. This record only exists in my local network and are build by my DHCP server which knows that my local domain is myfamilyname.nl

I run this branch myself. The host names are still be the host names associated to the addresses.

Again, I think before they can change their implementation, we need to find a way to distinguish bad (=unwanted) from good (=wanted) host names. This still doesn't seem clear how to do.

No idea, maybe the devs will figure this out some time in the future. I happen to know that public IPs have a public hostname assigned by an ISP (such as {public ip with dashes}.cable.dynamic.v4.ziggo.nl). IPv6 GUA is in fact public and thus there is a public(/global) hostname just like IPv4, e.g. 2001-1c00-0000-0000-0000-0000-0000-0000.cable.dynamic.v6.ziggo.nl. Because my router doesn't support ULA (fc00, fd00) to use for private IPs, I stick with GUA. The system designed for ULA is different compared to private IPv4. I don't think making use of ULA will solve anything related to hostnames. Maybe something related to DHCPv6 packet inspection or DUID will help? I'm afraid I can't add anything else to this, since my knowledge of IPv6 is limited.

I have to say, I wouldn't mind if my admin console shows both the unwanted and wanted hostnames on all pages where hostnames are shown (except for DHCP...).