Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FEATURE REQUEST: Handle "unknown" DNS record types #2432

Closed
TomOnTime opened this issue Jun 8, 2023 · 7 comments · Fixed by #2775
Closed

FEATURE REQUEST: Handle "unknown" DNS record types #2432

TomOnTime opened this issue Jun 8, 2023 · 7 comments · Fixed by #2775
Assignees

Comments

@TomOnTime
Copy link
Collaborator

TomOnTime commented Jun 8, 2023

Is your feature request related to a problem? Please describe.
When a vendor supports a DNS record type (either proprietary, standard, or pre-standard), DNSControl frequently panics or errors out.

Describe the solution you'd like
DNSControl should have a record type called "UNKNOWN" which holds the information downloaded from the provider.

  1. GetZoneRecords() should use the UNKNOWN feature instead of crashing/erroring/etc.
  2. When possible, treat the record as RFC3597: Handling of Unknown DNS Resource Record (RR) Types specifies
  3. IGNORE() should permit ignoring these records at some level of granularity.

Describe alternatives you've considered
The alternative is to manually delete these records so that DNSControl doesn't see them.

Additional context

@b-
Copy link

b- commented Dec 20, 2023

Really great to see this. I was running into this problem trying to manage a local instance of Technitium DNS with AXFR+DDNS.

Technitium uses its own "App" records for basically any nonstandard DNS behavior (e.g, split-horizon records, or randomizing the order of records for round-robin load balancing), but it will also happily sync these records to another Technitium server by sending them over AXFR. But then such suspect records existing trip up DNSControl, even with IGNORE("suspect","*").

Really my point is, I'd like to at least see this work with the AXFR+DDNS provider!

Thank you for the awesome software!

@tlimoncelli
Copy link
Contributor

@b- Please try it with an "app" record and see if there's any improvement.

@b-
Copy link

b- commented Jan 13, 2024

I apologize for taking so long to get back. My cat's been sick and I've been busy with that...

Unfortunately, I don't think there's an improvement here. I just ran brew upgrade and then confirmed I'm running DNSControl 4.8.1:

$ dnscontrol version
DNSControl version 4.8.1

Then I added the record atest.ibeep.com with the following in Technitium DNS Server:
image

$ dnscontrol -v preview
requiring: inc/includes.js (inc/includes.js)
listFiles: cd: inc, user: ./providers/ 
requiring: inc/providers/bind-provider.inc.js (inc/providers/bind-provider.inc.js)
requiring: inc/providers/changeme_none.inc.js (inc/providers/changeme_none.inc.js)
requiring: inc/providers/cloudflare-provider.inc.js (inc/providers/cloudflare-provider.inc.js)
requiring: inc/providers/tdns1-provider.inc.js (inc/providers/tdns1-provider.inc.js)
listFiles: cd: inc, user: ./zones/ 
requiring: inc/zones/ibeep.com/00-ibeep.com.js (inc/zones/ibeep.com/00-ibeep.com.js)
requiring: inc/zones/ibeep.com/contents/ddns.inc.js (inc/zones/ibeep.com/contents/ddns.inc.js)
requiring: inc/zones/ibeep.com/contents/default.js (inc/zones/ibeep.com/contents/default.js)
requiring: inc/zones/ibeep.com/contents/mediabox.inc.js (inc/zones/ibeep.com/contents/mediabox.inc.js)
requiring: inc/zones/ibeep.com/contents/services.js (inc/zones/ibeep.com/contents/services.js)
requiring: inc/zones/ibeep.com/contents/split-differences.js (inc/zones/ibeep.com/contents/split-differences.js)
******************** Domain: ibeep.com
ERROR
Error getting corrections (tdns1): rrToRecord: Unimplemented zone record type= (atest.ibeep.com.	3600	CLASS1	TYPE65282	\# 435 0114576569676874656420526f756e6420526f62696e1a5765696768746564526f756e64526f62696e2e4164647265737380037b0a20202269707634416464726573736573223a205b0a202020207b0a202020202020202261646472657373223a2022312e312e312e31222c0a2020202020202022776569676874223a20352c0a2020202020202022656e61626c6564223a20747275650a202020207d2c0a202020207b0a202020202020202261646472657373223a2022322e322e322e32222c0a2020202020202022776569676874223a20332c0a2020202020202022656e61626c6564223a20747275650a202020207d0a20205d2c0a20202269707636416464726573736573223a205b0a202020207b0a202020202020202261646472657373223a20223a3a31222c0a2020202020202022776569676874223a20322c0a2020202020202022656e61626c6564223a20747275650a202020207d2c0a202020207b0a202020202020202261646472657373223a20223a3a32222c0a2020202020202022776569676874223a20332c0a2020202020202022656e61626c6564223a20747275650a202020207d0a20205d0a7d)
******************** Domain: ibeep.com!tdns1
******************** Domain: ibeep.com!tdns2
******************** Domain: ibeep.com!cloudflare
Done. 0 corrections.
completed with errors

Likewise, "importing" from the zone also fails:

$ dnscontrol get-zones --format=djs tdns1 - ibeep.com 
failed GetZone gzr: rrToRecord: Unimplemented zone record type= (atest.ibeep.com.	3600	CLASS1	TYPE65282	\# 435 0114576569676874656420526f756e6420526f62696e1a5765696768746564526f756e64526f62696e2e4164647265737380037b0a20202269707634416464726573736573223a205b0a202020207b0a202020202020202261646472657373223a2022312e312e312e31222c0a2020202020202022776569676874223a20352c0a2020202020202022656e61626c6564223a20747275650a202020207d2c0a202020207b0a202020202020202261646472657373223a2022322e322e322e32222c0a2020202020202022776569676874223a20332c0a2020202020202022656e61626c6564223a20747275650a202020207d0a20205d2c0a20202269707636416464726573736573223a205b0a202020207b0a202020202020202261646472657373223a20223a3a31222c0a2020202020202022776569676874223a20322c0a2020202020202022656e61626c6564223a20747275650a202020207d2c0a202020207b0a202020202020202261646472657373223a20223a3a32222c0a2020202020202022776569676874223a20332c0a2020202020202022656e61626c6564223a20747275650a202020207d0a20205d0a7d)

@tlimoncelli
Copy link
Contributor

Ah! That's an interesting edge case!

I don't have an ibeep account. Is there a way you can help me reproduce this?

@b-
Copy link

b- commented Jan 15, 2024

Ibeep.com is my domain! I'm just using Technitium DNS -- I have VMs running it at tdns1.ibeep.com and tdns2.ibeep.com.

I'm wondering the easiest way for you to reproduce this. I suppose I could share a TSIG key over a secure channel, or something? Or probably better if you could just install Technitium DNS somewhere and create a zone and a record as I showed in the screenshot -- it's pretty much a point-and-click web interface that runs on Windows and Linux, so it shouldn't be too difficult. (I'm using an Ubuntu VM on a home Proxmox server and also on an Oracle free-tier VM)

@tlimoncelli
Copy link
Contributor

Oops.. I mean I don't have a Technitium DNS account. Sorry!

It might be easier for me to set up a branch with extra debug info. You could run it and send me the output.

Let me think about it!

@tlimoncelli
Copy link
Contributor

I've split this out to a separate issue: #2805

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants