-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Description
IPv6 Support
Support for:
- IPv6 listener bindings
- IPv6 DNS records (AAAA)
Analysis Summary
Current State
Already Implemented ✅
ResourceType.AAAAdefined inResourceType.cs(value0x001c)- BindZoneProvider parses AAAA records from zone files, stores IPv6 addresses, and generates
ZoneRecordobjects withType = ResourceType.AAAA ZoneRecordusesIPAddress[]which handles both IPv4 and IPv6- Tests exist for AAAA parsing in
BindZoneProviderTests.cs - Related task T29 in
docs/task_list.md
Gaps to Address
1. UdpListener IPv6 Binding (Critical)
Current code (UdpListener.cs):
_listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, port);Problem: Hardcoded to AddressFamily.InterNetwork (IPv4 only) and IPAddress.Any (0.0.0.0)
Required:
- Add configuration for bind address(es)
- Support
AddressFamily.InterNetworkV6socket creation - Consider dual-stack support or multiple listeners
2. No AAAANameRData Class (Critical)
Current code (RData.cs): Only ANameRData exists for IPv4
Problem:
ANameRData.Lengthreturns 4 (IPv4); IPv6 needs 16 bytesANameRData.Parse()expects exactly 4 bytes
Required: Create AAAANameRData class (16-byte address handling)
3. DnsServer Response Handling (Critical)
Current code (DnsServer.cs):
message.Answers.Add(new ResourceRecord {
Type = ResourceType.A, // Hardcoded!
RData = new ANameRData { Address = address }
});Problem: Always creates A records with ANameRData, ignoring client's query type
Required:
- Check
question.Typefor A vs AAAA - Use appropriate RData class based on address family
4. Configuration Schema Update
Current: No bind address configuration in AppConfig
Required: Add BindAddress or Addresses array to DnsListenerOptions
5. IPProbeZoneProvider IPv6 Support (Lower Priority)
Current: Always creates ResourceType.A records
Required: Detect address family and generate separate A/AAAA records
Implementation Plan
| Phase | Work Item | Files |
|---|---|---|
| 1 | Create AAAANameRData class |
Dns/RData.cs |
| 2 | Update DnsServer.ProcessUdpRequest for AAAA queries |
Dns/DnsServer.cs |
| 3 | Add integration tests for AAAA resolution | dnstest/ |
| 4 | Extend UdpListener for IPv6 bindings |
Dns/UdpListener.cs |
| 5 | Update configuration schema | Dns/Config/AppConfig.cs, appsettings.json |
| 6 | Update IPProbeZoneProvider for IPv6 |
Dns/ZoneProvider/IPProbe/ |
| 7 | Documentation | README.md, docs/ |
Open Questions
- Listener Strategy: Dual-stack socket vs. multiple listeners vs. configurable bind addresses?
- Backward Compatibility: Default IPv4-only with IPv6 opt-in?
- IPProbe Scope: IPv6 health probing in this issue or separate?
- Reverse DNS: Add
ip6.arpaPTR support now or defer?
Metadata
Metadata
Assignees
Labels
No labels