[ruby-core:94596] [Ruby master Feature#14922] Resolv getaddresses ignores AAAA records for IPv6
From:
merch-redmine@...
Date:
2019-08-27 03:38:53 UTC
List:
ruby-core #94596
Issue #14922 has been updated by jeremyevans0 (Jeremy Evans).
Backport deleted (2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN)
ruby -v deleted (2.5.1)
Tracker changed from Bug to Feature
File resolv-use_ipv6-14922.patch added
I think this is not a bug, but a feature request for IPv6 resolution when no public IPv6 address is present. I think you can only consider this a bug if you think the default behavior should be to return IPv6 addresses in such cases.
I think this is a worthwhile feature to add. Attached is a patch that implements it using a keyword argument to `Resolv#initialize`:
```
$ ruby -rresolv -e 'p Resolv.new.getaddresses("google.com")'
["216.58.195.78"]
$ ruby -rresolv -e 'p Resolv.new(:use_ipv6=>true).getaddresses("google.com")'
["216.58.195.78", "2607:f8b0:4005:807::200e"]
```
----------------------------------------
Feature #14922: Resolv getaddresses ignores AAAA records for IPv6
https://bugs.ruby-lang.org/issues/14922#change-81072
* Author: dlampa (Donovan Lampa)
* Status: Assigned
* Priority: Normal
* Assignee: akr (Akira Tanaka)
* Target version:
----------------------------------------
I'd like some feedback here as I'm not totally convinced this is a bug quite yet. I may have done something silly with my DNS configuration.
I have a local DNS server set up with the following /etc/resolv.conf
~~~
[root@ip-10-20-0-181 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search us-east-2.compute.internal
nameserver ::1
~~~
And the following zone configured in bind
~~~
[root@ip-10-20-0-181 ~]# cat /var/named/test.net.zone
$TTL 86400
@ IN SOA test.net root.test.net (
2016050204
3600
900
604800
86400
)
@ IN NS testbox
testbox IN AAAA 2600:1f16:a82:9b01:5a89:f06f:dde4:7b5e
malware IN AAAA 2600:1f16:a82:9b01:cab2:a7c0:e2cb:1162
goodware IN A 10.20.0.181
~~~
It appears that Resolv needs me to explicitly request the AAAA resource for malware.test.net in order to get the IPv6 address in this situation. It doesn't seem to need that for IPv4.
~~~
irb(main):001:0> require 'resolv'
=> true
irb(main):002:0> resolver = Resolv.new
=> #<Resolv:0x0000000001db3c78 @resolvers=[#<Resolv::Hosts:0x0000000001db3c28 @filename="/etc/hosts", @mutex=#<Thread::Mutex:0x0000000001db3bd8>, @initialized=nil>, #<Resolv::DNS:0x0000000001db3b88 @mutex=#<Thread::Mutex:0x0000000001db3b38>, @config=#<Resolv::DNS::Config:0x0000000001db3ae8 @mutex=#<Thread::Mutex:0x0000000001db3a48>, @config_info=nil, @initialized=nil, @timeouts=nil>, @initialized=nil>]>
irb(main):003:0> resolver.getaddresses("malware.test.net")
=> []
irb(main):004:0> resolver.getaddresses("goodware.test.net")
=> ["10.20.0.181"]
irb(main):005:0> dns_resolver = Resolv::DNS.new
=> #<Resolv::DNS:0x0000000001d2a040 @mutex=#<Thread::Mutex:0x0000000001d29fa0>, @config=#<Resolv::DNS::Config:0x0000000001d29f78 @mutex=#<Thread::Mutex:0x0000000001d29e60>, @config_info=nil, @initialized=nil, @timeouts=nil>, @initialized=nil>
irb(main):006:0> dns_resolver.getresource("malware.test.net", Resolv::DNS::Resource::IN::AAAA)
=> #<Resolv::DNS::Resource::IN::AAAA:0x0000000001cbaf38 @address=#<Resolv::IPv6 2600:1F16:A82:9B01:CAB2:A7C0:E2CB:1162>, @ttl=86400>
~~~
Based on Resolv's documentation I would expect to get back the IPv6 address for malware.test.net
---Files--------------------------------
resolv-use_ipv6-14922.patch (2.08 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>