AdGuardHome icon indicating copy to clipboard operation
AdGuardHome copied to clipboard

Using MAC address for clients without enabling DHCP server

Open AnthonyBe opened this issue 5 years ago • 33 comments

Problem Description

Currently, Clients can only be identified by MAC address if AdGuard Home is also a DHCP server. This is a significant limitation given the newness of limited capability of AGH DHCP server currently.

Proposed Solution

As the client MAC will be in the network packets, why can't MAC address identifiers be used even if AGH is not the DHCP server? Requiring that AGH be the DHCP server significantly limits the abilty to use client filters and this would likely impact the vast majority of AGH users.

Alternatives Considered

Do not wish to use AGH DHCP server at this time due to features missing that are available in more mature DHCP servers. AGH DHCP Server is still considered "Experimental" (it is labeled this way in the UI)

AnthonyBe avatar Aug 25 '19 01:08 AnthonyBe

Any other way of using a MAC address would be unreliable. We can't simply synchronize the IP<->Mac table with the DHCP server, there will always be a time when it's out of sync.

Do not wish to use AGH DHCP server at this time due to features missing that are available in more mature DHCP servers.

Could you please explain what important features are missing?

AGH DHCP Server is still considered "Experimental" (it is labeled this way in the UI)

Well, yeah, but it's close to removing this label:)

ameshkov avatar Aug 27 '19 10:08 ameshkov

One problem with the DHCP server I ran into. My server had a static IP address assigned by my router. When I switched over to using AdGuards DHCP server I was unable to set that IP as it's static when I tried it said IP already in use. Why can't assign the IP a device already has as it's static?

davidbdyer avatar Aug 29 '19 07:08 davidbdyer

when I tried it said IP already in use

It was already fixed in #833, it will be published in the next version.

szolin avatar Aug 29 '19 09:08 szolin

Could you please explain what important features are missing?

Apologies if anything below is incorrect, but it is based on my observation so I may have overlooked or just not worked out how to do something, or a feature might just not be obviously documented. I'm basing my comparison on Windows Server DHCP Server which I currently use, and within that, the features I currently use.

  1. Doesn't work on Windows (I just tried to configure a scope and got error "Can't detect static IP: not supported on Windows")
  2. Doesn't support setting DHCP Reservations
  3. Not sure, but doesn't appear to support multiple IP ranges, or conversely, range exclusions?
  4. Not option to define DNS Server IP (is this 'hard coded' assuming that AGH's IP is offered as DNS server address?).
  5. No option to offer multiple IP addresses for DNS setting (i.e. primary and secondary DNS) so clients have fallback
  6. DHCP Logging (audit logs)
  7. Conflict detection (i.e. server checks for existence of the IP address it plans to offer, before it offers)

AnthonyBe avatar Sep 03 '19 11:09 AnthonyBe

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Nov 02 '19 11:11 stale[bot]

Keeping open in hope in gets fixed

AnthonyBe avatar Nov 02 '19 23:11 AnthonyBe

Sorry for missing this

Doesn't work on Windows (I just tried to configure a scope and got error "Can't detect static IP: not supported on Windows")

This would be extremely complicated to implement:( The only option on Windows is to run AGH with Docker.

Doesn't support setting DHCP Reservations

It does support DHCP static leases.

Not sure, but doesn't appear to support multiple IP ranges, or conversely, range exclusions?

Yeah, it is rather simple right now.

Not option to define DNS Server IP (is this 'hard coded' assuming that AGH's IP is offered as DNS server address?). No option to offer multiple IP addresses for DNS setting (i.e. primary and secondary DNS) so clients have fallback

Yeah, that's the reason to use it in the first place.

DHCP Logging (audit logs)

It's all in the AdGuard Home logs. Is it useful to expose this information to the UI?

Conflict detection (i.e. server checks for existence of the IP address it plans to offer, before it offers)

It does it automatically

ameshkov avatar Nov 08 '19 10:11 ameshkov

Doesn't work on Windows (I just tried to configure a scope and got error "Can't detect static IP: not supported on Windows")

This would be extremely complicated to implement:( The only option on Windows is to run AGH with Docker.

Hmm.. So, name resolution (which started this thread if you recall) relies on running the AGH DHCP server, and the DHCP server function isn't available on all platforms.

This feels like you've architected yourselves into a corner with increasingly significant feature compromise. Well, it does from a Windows user perspective anyway.

AnthonyBe avatar Nov 08 '19 10:11 AnthonyBe

This feels like you've architected yourselves into a corner with increasingly significant feature compromise. Well, it does from a Windows user perspective anyway.

It was the Windows version limitation from the very beginning -- caused by the limitations of golang. The alternative solution is possible I think, we could write that part in C, but it is time-consuming, and we've not seen a big demand for it: https://github.com/AdguardTeam/AdGuardHome/issues/616

ameshkov avatar Nov 08 '19 11:11 ameshkov

Understood.

Still, feature disparity across OS's is not ideal.

AnthonyBe avatar Nov 18 '19 09:11 AnthonyBe

on linux the correspondence between ip and mac can be monitored from netlink socket,but on windows maybe a dhcp server is needed to do this or use wincap to get the arp package

rufengsuixing avatar Dec 11 '19 09:12 rufengsuixing

We have a separate task for DHCP Server for Windows: https://github.com/AdguardTeam/AdGuardHome/issues/616

multiple IP ranges, or conversely, range exclusions?

Is it really that necessary? Please describe your use-case.

DHCP Logging (audit logs)

I think we can add info messages on which IP we assign for each MAC. That's useful indeed.

szolin avatar Jan 14 '20 15:01 szolin

Multiple ranges and/range exclusions would normally come about over time. For example, scenario where you need to extend a DHCP scope but run up against fixed IP devices that changing the IP will require other apps/devices to require a config change so it's easier to extend the range through this and then exclude a small chunk of the IPs

AnthonyBe avatar Jan 15 '20 19:01 AnthonyBe

One problem with the DHCP server I ran into. My server had a static IP address assigned by my router. When I switched over to using AdGuards DHCP server I was unable to set that IP as it's static when I tried it said IP already in use. Why can't assign the IP a device already has as it's static?

when I tried it said IP already in use

It was already fixed in #833, it will be published in the next version.

@szolin This issue mentioned about in quote and the linked commit/fix seems to be an issue that I still have several times now.

  • Running AGH service on OpenWrt with AGH DHCP enabled
  • AGH DHCP is working 99% fantastic with only this one issue that I have noticed
  • Client machine is Windows

Quite often when I am doing my testing with AGH, I set my main Windows client system with a static IP during this testing time so that I don't lose connections during this time. When I am satisfied with my testing of changes to AGH, I set my main Windows client system back to receiving IP and DNS automatically.

It is at this point that my Windows client machine fails to receive an IP address from AGH DHCP server, noting a conflict of IP. I always have to resort to drastic measures by stopping the AGH service, deleting leases.db, sessions.db, stats.db and restarting the AGH service.

This is the only time that I get an IP conflict and there is no choice but to do these drastic measures because AGH DHCP cannot recover from this state. This only affects my Windows client machine and only specifically after setting a static IP address.

WildByDesign avatar Feb 04 '20 15:02 WildByDesign

Hi guys. A little question: due to the lack of synchronism due to the use of DHCP in the blocking of websites, it would no longer be correct to enable blocking only for the settings where the administrator user uses "static DHCP leases".

It would be great to use mac address blocking using this feature. It's possible?

Here's the tip!

olivamauricio avatar Oct 29 '20 18:10 olivamauricio

Merging #2383 here, we shouldn't forget to add MAC-addresses support to client modifier.

ameshkov avatar Dec 02 '20 09:12 ameshkov

Had to postpone a little bit, in v0.106 we'll focus on #2704 which is not the same, but kinda relevant.

ameshkov avatar Mar 15 '21 11:03 ameshkov

In my case I'm using an AmplifyHD router, where I cannot disable the DHCP server unless I put it in bridge mode, effectively making it a glorified switch with a clock. It doesn't allow me to override the client names either, so I'm left with some clients being identified and others not, since it solely relies on the clients to provide their names, which a lot don't or does so very poorly (like Sonos, where every devices is named SonosZP). Adding all the clients to the client table in AGH and specifying the MAC and (for now) the IP, allows me to provide names for all my devices. I would rather not have to create static leases for all devices, which is why I'd love to have AGH identify each by the MAC alone.

Having AGH also record new, unknown, clients including their MAC would be great as well. Include that with an option to quickly add the client to the known devices list and assigning it a name would be a killer feature.

siewers avatar Dec 01 '21 20:12 siewers

Any other way of using a MAC address would be unreliable. We can't simply synchronize the IP<->Mac table with the DHCP server, there will always be a time when it's out of sync.

Do not let perfect be the enemy of good. The total AdGuard (and pi hole) solution is not perfect, it can be by passed by; website (proxy the ads), ad host (use IP address for content) and clients on your network (change DNS server or running VPN) but is good!

Filtering by mac address would be a friendly solution for less advanced users. Using AdGuard as a DHCP server increases the single point of failure. I'm pretty know my way, but if I start using AdGuard add DHCP in my house I won't make any friends, because that means that my NAS which runs the VM with Home assistant which has the AdGuard add-on all can't have any downtime.

How does pi hole have the MAC address client implemented?

Tazzios avatar Aug 30 '22 18:08 Tazzios

PiHole can use the mac address that dnsmasq stuffs into an EDNS option, via the add-mac config option, so AGH could likely do the same thing.

DanaGoyette avatar Nov 03 '22 23:11 DanaGoyette

Is this an issue wich is going to be resolved? I want to switch from PiHole to Adguard and i don't want to use Adguard as a DHCP server.

Bolten88 avatar Jan 25 '23 12:01 Bolten88

Another reason I would like to add here to what @WildByDesign mentioned, it seems enabling IPv6 is not as trivial as IPv4 in Adguard Home which it is out of the box config in openwrt, I raised the issue related to DHCP server issue here https://github.com/AdguardTeam/AdGuardHome/issues/5758

ghahramani avatar Apr 20 '23 14:04 ghahramani

Hi,

I use AGH as DNS and DHCP (on rpi). On Client settings when put MAC address Request count is empty. If put current local IP address count is ok. On Query logs if is MAC cannot see client name. Whats wrong?

robi052 avatar May 07 '23 21:05 robi052

I would like to be able to identify clients based on mac address without the overhead of using AGH as DHCP. I have a Sophos XG Firewall for DCHP with different DHCP/VNET configuration for IOT, homelab, work and home devices and would like to identify these clients and and block/restrict DNS based on their mac address so I don't have to configure static IP addresses for each and every device.

IP addresses change - mac addresses don't (unless you change the network card of course). Please consider this as a change.

developerbuzz avatar Sep 12 '23 18:09 developerbuzz

Agreed. I do not plan on using AGH for DHCP ever. I can appreciate that it is more convenient if AGH is the DHCP server to implement other linked functionality, but making it a requirement should not be the case as this is not is the end-user's overall best interest.

AnthonyBe avatar Sep 13 '23 00:09 AnthonyBe

+1 to this as well. I was tearing my hair out trying to figure out why AGH wasn't blocking Clients based upon MAC address. Now I see why.

I'd rather leave the DHCP server on my router, thank you very much. WHY is having AGH as a DHCP server a necessity for configuring Client filters with MAC addresses?

theschles avatar Sep 14 '23 18:09 theschles

Any news on this?

Sav3k avatar Dec 08 '23 16:12 Sav3k

No news, since @ameshkov's comment is still relevant. A MAC address is not readily available for clients that aren't also DHCP clients.

ainar-g avatar Dec 09 '23 13:12 ainar-g

I am using it as DHCP but still, for IPv6 I cannot filter the user, it seems when a client uses IPv6, the MAC address does not get recognized by Adguardhome, to block the client, I had to define IPv6 for the client.

image

As you can see in the screenshot, it shows IPv6 instead of MAC Address, therefore, to block the client I have to set IPv6 in client setting which is get changed everytime laptop gets restarted as IPv6 does not work like IPv4 in IP lease

ghahramani avatar Dec 09 '23 19:12 ghahramani

I've created a simple script that can populate IP addresses (both IPv4 and IPv6) based on the MAC address present for a client. I currently run it on an OpenWRT box, and while it may not be the most accurate, it does the job for me. I hope it helps someone else in a similar situation who, for some reason, cannot use AdGuard's built-in DHCP server.

hayzamjs avatar Jan 20 '24 15:01 hayzamjs

I've created a simple script that can populate IP addresses (both IPv4 and IPv6) based on the MAC address present for a client. I currently run it on an OpenWRT box, and while it may not be the most accurate, it does the job for me. I hope it helps someone else in a similar situation who, for some reason, cannot use AdGuard's built-in DHCP server.

How can I specify to update the IP address of a specific client (I want Youtube be open only for one client), by the way, I am using AdguardTeam DHCP with IPv4 and IPv6 but it seems when a device requests with IPv6 Adguard cannot find out about its Mac address therefore it allows it and it does not filter it, it seems it only works with IPv4, your scripts helps to update IPv6 in client UI to set it for filtered clients

ghahramani avatar Jan 27 '24 13:01 ghahramani