Bug 1795276
| Summary: | Dracut does not set DNS server from IPv6 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 8 | Reporter: | Lukas Zapletal <lzap> | ||||||||
| Component: | dracut | Assignee: | Lukáš Nykrýn <lnykryn> | ||||||||
| Status: | CLOSED ERRATA | QA Contact: | Frantisek Sumsal <fsumsal> | ||||||||
| Severity: | unspecified | Docs Contact: | |||||||||
| Priority: | unspecified | ||||||||||
| Version: | 8.1 | CC: | dracut-maint-list, fsumsal | ||||||||
| Target Milestone: | rc | Flags: | pm-rhel:
mirror+
|
||||||||
| Target Release: | 8.0 | ||||||||||
| Hardware: | Unspecified | ||||||||||
| OS: | Unspecified | ||||||||||
| Whiteboard: | |||||||||||
| Fixed In Version: | dracut-049-68.git20200211.el8 | Doc Type: | If docs needed, set a value | ||||||||
| Doc Text: | Story Points: | --- | |||||||||
| Clone Of: | Environment: | ||||||||||
| Last Closed: | 2020-04-28 16:06:04 UTC | Type: | Bug | ||||||||
| Regression: | --- | Mount Type: | --- | ||||||||
| Documentation: | --- | CRM: | |||||||||
| Verified Versions: | Category: | --- | |||||||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||||||
| Embargoed: | |||||||||||
| Attachments: |
|
||||||||||
Could you try again with the recent dracut from 8.3? We've recently fixed a few issues regarding ipv6. Will do, FYI I've reproduced it in more simple environment. Just boot kernel/initram directly in a libvirt VM on IPv6-only virtual network in EFI VM with: ks=http://box.home.lan/kickstart.ks network ksdevice=bootif ks.device=bootif BOOTIF=00-52-54-00-13-13-01 kssendmac ks.sendmac inst.ks.sendmac ip=dhcp6 Going to try "auto6" as well before I retry with 8.3. Can you give me a link to kernel/initramdisk I should test with so I am sure not to try with a wrong one please? Thanks. For the record I've tested the following RHEL versions: 7.7, 8.0, 8.1 and 8.2 beta. All same behavior, no network is ever initialized and I am unable to see *any* network related messages in system journal other than "link is up". I've even tested with absolute minimum kernel command line options: ks=http://box.home.lan/kickstart.ks BOOTIF=00-52-54-00-13-13-01 or even the simplest form: ks=http://box.home.lan/kickstart.ks I experience the same on hardware I have here for testing, MEN industrial Intel ATOM, UEFI server. Here is dump from DHCP6 comm captured in my DHCPv6 libvirt NAT network: [root@box lzap]# tcpdump -i virbr8 -n -vv '(udp port 546 or 547) or icmp6' dropped privs to tcpdump tcpdump: listening on virbr8, link-type EN10MB (Ethernet), capture size 262144 bytes 09:04:48.403203 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) :: > ff02::1:ff13:1301: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::5054:ff:fe13:1301 unknown option (14), length 8 (1): 0x0000: b6e4 587f e3cb 09:04:49.427243 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::5054:ff:fe13:1301 > ff02::2: [icmp6 sum ok] ICMP6, router solicitation, length 16 source link-address option (1), length 8 (1): 52:54:00:13:13:01 0x0000: 5254 0013 1301 09:04:49.428048 IP6 (class 0xc0, flowlabel 0x267c7, hlim 255, next-header ICMPv6 (58) payload length: 88) fe80::5054:ff:fee6:57d9 > fe80::5054:ff:fe13:1301: [icmp6 sum ok] ICMP6, router advertisement, length 88 hop limit 64, Flags [managed, other stateful], pref medium, router lifetime 1800s, reachable time 0ms, retrans timer 0ms prefix info option (3), length 32 (4): fd00:bbbb:cccc:dd::/64, Flags [onlink], valid time 3600s, pref. time 3600s 0x0000: 4080 0000 0e10 0000 0e10 0000 0000 fd00 0x0010: bbbb cccc 00dd 0000 0000 0000 0000 mtu option (5), length 8 (1): 1500 0x0000: 0000 0000 05dc source link-address option (1), length 8 (1): 52:54:00:e6:57:d9 0x0000: 5254 00e6 57d9 rdnss option (25), length 24 (3): lifetime 3600s, addr: fe80::5054:ff:fee6:57d9 0x0000: 0000 0000 0e10 fe80 0000 0000 0000 5054 0x0010: 00ff fee6 57d9 09:04:54.700921 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::5054:ff:fee6:57d9 > fe80::5054:ff:fe13:1301: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::5054:ff:fe13:1301 source link-address option (1), length 8 (1): 52:54:00:e6:57:d9 0x0000: 5254 00e6 57d9 09:04:54.701115 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) fe80::5054:ff:fe13:1301 > fe80::5054:ff:fee6:57d9: [icmp6 sum ok] ICMP6, neighbor advertisement, length 24, tgt is fe80::5054:ff:fe13:1301, Flags [solicited] 09:04:59.987199 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::5054:ff:fe13:1301 > fe80::5054:ff:fee6:57d9: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::5054:ff:fee6:57d9 source link-address option (1), length 8 (1): 52:54:00:13:13:01 0x0000: 5254 0013 1301 09:04:59.987248 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) fe80::5054:ff:fee6:57d9 > fe80::5054:ff:fe13:1301: [icmp6 sum ok] ICMP6, neighbor advertisement, length 24, tgt is fe80::5054:ff:fee6:57d9, Flags [router, solicited] I have an update, I tested this also on libvirt BIOS VM and the symptoms are the same. IPv6 does not work at all. Here is libvirt's dnsmasq config just for the record, nothing special: [root@box lzap]# cat /var/lib/libvirt/dnsmasq/dhcpsix.lan.conf strict-order domain=dhcpsix.lan expand-hosts pid-file=/var/run/libvirt/network/dhcpsix.lan.pid except-interface=lo bind-dynamic interface=virbr8 dhcp-range=fd00:bbbb:cccc:dd::100,fd00:bbbb:cccc:dd::1ff,64 dhcp-lease-max=256 dhcp-hostsfile=/var/lib/libvirt/dnsmasq/dhcpsix.lan.hostsfile addn-hosts=/var/lib/libvirt/dnsmasq/dhcpsix.lan.addnhosts enable-ra Created attachment 1656007 [details]
Sosreport from QEMU BIOS VM
Just booted the kernel with a ks= parameter on libvirt IPv6 only network.
Hello, I might be getting somewhere. First of all, ip=auto6 does not work straight-up. It's also not an option for PXE/UEFI-HTTP-Boot environment anyway where dhcp6 is required for for non-static network boot. With ip=dhcp6 I am actually getting the IPv6 address correctly, dhclient gets relevant data including DNS server however it does not write /etc/resolv.conf at all, thus kickstart download fails. Attaching a screenshot of the details, so it's likely that DHCPv6 not setting up DNS is the culprit of my problem. Created attachment 1656685 [details]
DHCP client not setting up DNS credentials
I can confirm, the WORKAROUND is to provide nameserver= on the command line and then it works: ks=http://box.home.lan/kickstart.ks BOOTIF=00-52-54-00-13-13-01 ip=dhcp6 nameserver=fd00:bbbb:cccc:dd::1 Hmm could you try that once more and again with rd.debug and toss here the rdsosreport? Created attachment 1662413 [details] Sosreport debug ks=http://box.home.lan/kickstart.ks BOOTIF=00-52-54-00-13-13-01 ip=dhcp6 rd.net.timeout.ipv6auto=5 rd.debug rd.shell xnameserver=fd00:bbbb:cccc:dd::1 Attached sosreport with kernel cmdline: ks=http://box.home.lan/kickstart.ks BOOTIF=00-52-54-00-13-13-01 ip=dhcp6 rd.net.timeout.ipv6auto=5 rd.debug rd.shell xnameserver=fd00:bbbb:cccc:dd::1 See that /etc/resolv.conf is empty. Note when xnameserver=fd00:bbbb:cccc:dd::1 is changed to nameserver=fd00:bbbb:cccc:dd::1 only after that /etc/resolv.conf is properly generated and Anaconda can finally download the kickstart via a hostname. Based on the logs it looks that dhclient-script did not get the nameserver from dhclient. [ 16.979166] localhost dracut-initqueue[881]: /usr/sbin/dhclient-script@79(setup_interface6): namesrv= Relevant line is here https://github.com/dracutdevs/dracut/blob/RHEL-8/modules.d/35network-legacy/dhclient-script.sh#L79 I don't know if there is an issue with dhclient or something wrong on dracut side, so let's move this to dhcp for investigation. Btw our dhclient.conf is here: https://github.com/dracutdevs/dracut/blob/RHEL-8/modules.d/35network-legacy/dhclient.conf (In reply to Lukáš Nykrýn from comment #15) > Based on the logs it looks that dhclient-script did not get the nameserver > from dhclient. > [ 16.979166] localhost dracut-initqueue[881]: > /usr/sbin/dhclient-script@79(setup_interface6): namesrv= > Relevant line is here > https://github.com/dracutdevs/dracut/blob/RHEL-8/modules.d/35network-legacy/ > dhclient-script.sh#L79 This should be new_dhcp6_name_servers So I think that this should fix both of the issues we found here. https://github.com/dracutdevs/dracut/pull/714 https://github.com/dracutdevs/dracut/pull/719 Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2020:1760 |
Hello, I am netbooting RHEL 8.1 over HTTP UEFI Boot (IPv6 HTTPClient), but Anaconda fails to download kickstart due to no nameserver set. There is no useful information in the system journal other than "link becomes ready" and then kickstart failure. This is Grub2 config booted over UEFI HTTP: set default=0 set timeout=2 menuentry 'Kickstart default PXEGrub2 HTTP Boot' { linuxefi /httpboot/boot/red-hat-enterprise-linux-8-for-x86_64-baseos-kickstart-x86_64-8-1-4-vmlinuz ks=http://fm.ipsix.lan/unattended/provision?token=77233f46-9fa6-4ecb-ac30-478abe8d1eb8 network ksdevice=bootif ks.device=bootif BOOTIF=00-00-c0-3a-d1-01-8f kssendmac ks.sendmac inst.ks.sendmac ip=dhcp6 initrdefi /httpboot/boot/red-hat-enterprise-linux-8-for-x86_64-baseos-kickstart-x86_64-8-1-4-initrd.img } I can see both SLAAC and DHCPv6 communication on the network, both services are configured to return DNS server correctly, however on the running system there is no /etc/resolv.conf. I see no NetworkManager logs, nothing. I tried both "auto6" and "dhcp6". Server configuration is simple: # cat /etc/dhcp/dhcpd6.conf default-lease-time 2592000; preferred-lifetime 604800; option dhcp-renewal-time 3600; option dhcp-rebinding-time 7200; allow leasequery; option dhcp6.info-refresh-time 21600; option dhcp6.vendor-class-identifier code 16 = string; option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; option dhcp6.user-class code 15 = string; option dhcp6.bootfile-url code 59 = string; option dhcp6.client-arch-type code 61 = array of unsigned integer 16; subnet6 fd00:aaaa:bbbb:cc::/64 { range6 fd00:aaaa:bbbb:cc::aaaa fd00:aaaa:bbbb:cc::ffff; option dhcp6.name-servers fd00:aaaa:bbbb:cc::2; if exists dhcp6.user-class and substring(option dhcp6.user-class, 2, 4) = "iPXE" { # iPXE script file location option dhcp6.bootfile-url "http://fm.ipsix.lan:8000/unattended/iPXE"; } else if option dhcp6.client-arch-type = 00:06 { # UEFI x86 PXE/TFTP boot via IPv6 option dhcp6.bootfile-url "tftp://fm.ipsix.lan:8000/ipxe32.efi"; } else if option dhcp6.client-arch-type = 00:07 { # UEFI x86-64 PXE/TFTP boot via IPv6 option dhcp6.bootfile-url "tftp://fm.ipsix.lan:8000/grub2/grubx64.efi"; } else if option dhcp6.client-arch-type = 00:0f { # UEFI x86 HTTP boot via IPv6 option dhcp6.vendor-class 0 10 "HTTPClient"; option dhcp6.bootfile-url "http://fm.ipsix.lan:8000/EFI/grub2/grubx64.efi"; } else if option dhcp6.client-arch-type = 00:10 { # UEFI x86-64 HTTP boot via IPv6 option dhcp6.vendor-class 0 10 "HTTPClient"; option dhcp6.bootfile-url "http://fm.ipsix.lan:8000/EFI/grub2/grubx64.efi"; } else { # Support a hypothetical BIOS system that can PXE boot over IPv6 option dhcp6.bootfile-url "tftp://fm.ipsix.lan:8000/undionly.kpxe"; } } # cat /etc/radvd.conf interface eth0 { AdvSendAdvert on; AdvManagedFlag on; AdvOtherConfigFlag on; prefix fd00:aaaa:bbbb:cc::/64 { AdvAutonomous off; }; RDNSS fd00:aaaa:bbbb:cc::2 { }; }; I expect dracut/Anaconda to initialize the booting interface via DHCPv6, I must be missing some option or there is another snag.