哪些網卡支援 PXE IPV6 Boot 呢!! 根據 Intel 官方網站 http://www.intel.com/support/network/sb/cs-028553.htm 說明了! “UEFI Drivers Compatible with IPv6″ 也就是說要支援 IPv6 PXE Boot 的網卡,環境必須在 UEFI 下.傳統的 Intel® Boot Agent for Legacy BIOS 就不在其支援列表中了.
什麼是 uEFI!! 什麼是 PXE!! 可以參考下列聯結~
- uEFI
Extensible Firmware Interface (EFI) 的功能就類似傳統 BIOS ,他是 OS 與硬體之間溝通介面. 不過相較於傳統的 BIOS EFI 他的架構更模組化,功能更強大.EFI 的架構是由 Intel 提出的, 目前是交由 Unified EFI Forum 來管理.也就是我們現在所稱的 Unified Extensible Firmware Interface (UEFI) - PXE
PXE (Preboot eXecution Environment) 是透過網路來安裝作業系統,在網卡上有一塊 ROM(firmware) 裡面存放了一些基本的網路協定如:Internet Protocol (IP), User Datagram Protocol (UDP), Dynamic Host Configuration Protocol (DHCP) 以及 Trivial File Transfer Protocol (TFTP) 透過這一些協定使得 PXE 可以進行網路的存取進一步安裝作業系統.
IPv6 PXE Server 設定步驟 (實驗環境為 RHEL6)
- 設定固定 IPV6 位址
- 設定 DHCP6 , IPV6 Table (Firewall)
- 設定 RADVD , IPv6 Forwarding
- 設定 TFTP
- grub.efi 檔案
Q : 那 IPv6 PXE 開機時到底是用哪一種方式獲取 IPv6 位址??
A: 目前實驗的結果是 DHCPv6 與 RADVD 都需要開啟.
- 設定固定 IPV6 位址
我們不能使用 IPV6 的 link-local address 所以要手動設定固定 ipv6 address (3ffe:501:ffff:100::1) ,我們可以透過修改 /etc/sysconfig/network-scripts/ifcfg-* (RHEL) 或是直接用 #NetworkManager ( http://benjr.tw/10728 ) 工具來設定.[root@benjr ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:F6:4D:73 inet addr:192.8.1.1 Bcast:192.8.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fef6:4d73/64 Scope:Link inet6 addr: 3ffe:501:ffff:100::1/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1226688 errors:0 dropped:0 overruns:0 frame:0 TX packets:1392610 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:102208468 (97.4 MiB) TX bytes:7696863052 (7.1 GiB)
- 設定 DHCP6 , IPV6 Table (Firewall)
DHCPv6 設定如下, DHCPv6 設定說明請參考 http://benjr.tw/10651[root@benjr ~]# cat /etc/dhcp/dhcpd6.conf # # DHCPv6 Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd6.conf.example # see dhcpd.conf(5) man page # default-lease-time 2592000; preferred-lifetime 604800; option dhcp-renewal-time 3600; option dhcp-rebinding-time 7200; option dhcp6.bootfile-url code 59 = string; option dhcp6.name-servers 3ffe:501:ffff:100::1; option dhcp6.info-refresh-time 21600; dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases"; subnet6 3ffe:501:ffff:100::/64 { range6 3ffe:501:ffff:100::10 3ffe:501:ffff:100::100; range6 3ffe:501:ffff:100:: temporary; prefix6 3ffe:501:ffff:100:: 3ffe:501:ffff:111:: /64; option dhcp6.bootfile-url "tftp://[3ffe:501:ffff:100::1]/grub.efi"; }
[root@benjr ~]# chkconfig dhcpd6 on [root@benjr ~]# service dhcpd6 start
ip6tabels (firewall) 預設會擋到 port 546 與 547 (客戶端主要使用 UDP port 546 而服務器端使用 UDP port 547) 所以需要關閉 (或是開放這兩個埠來使用)
[root@benjr ~]# chkconfig ip6tables off [root@benjr ~]# service ip6tables stop
- 設定 RADVD , IPv6 Forwarding
RADVD 設定如下, RADVD 設定說明請參考 http://benjr.tw/94906[root@benjr ~]# cat /etc/radvd.conf # NOTE: there is no such thing as a working "by-default" configuration file. # At least the prefix needs to be specified. Please consult the radvd.conf(5) # man page and/or /usr/share/doc/radvd-*/radvd.conf.example for help. # # interface eth0 { AdvSendAdvert on; MinRtrAdvInterval 30; MaxRtrAdvInterval 100; prefix 3ffe:501:ffff:100::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; };
[root@benjr ~]# chkconfig radvd on [root@benjr ~]# service radvd start
啟動 radvd 需要把 ipv6 fordward 打開. ipv6 fordward 跟 ipv4 的設定檔一樣儲存在 /etc/sysctl.conf
[root@benjr ~]# vi /etc/sysctl.conf # Uncomment the next line to enable packet forwarding for IPv6 # Enabling this option disables Stateless Address Autoconfiguration # based on Router Advertisements for this host net.ipv6.conf.all.forwarding=1 [root@benjr ~]# sysctl -p net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key error: "net.bridge.bridge-nf-call-iptables" is an unknown key error: "net.bridge.bridge-nf-call-arptables" is an unknown key net.ipv6.conf.all.forwarding = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296
- 設定 TFTP
[root@benjr ~]# cat /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot per_source = 11 cps = 100 2 flags = IPv6 }
tftp 設定要多增加 flags = IPv6,如果你遇到 PXE 顯示 tftp 錯誤時,可以參考 tftp 常見的錯誤訊息 http://benjr.tw/94695
- UEFI – grub.efi 檔案
關於 uEFI PXE Boot 有一個很大的關鍵是使用對的 開機 檔案.之前有使用過 IPv4 UEFI 的開機檔為 BOOTX64.efi 請參考 http://benjr.tw/16115,但 IPV6 UEFI 需要使用 grub.efi (位於 /boot/efi/EFI/redhat/ 目錄).[root@benjr ~]# cp /boot/efi/EFI/redhat/grub.efi /var/lib/tftpboot/grub.efi
若 Client 可以得到 IPV6 Address 但 PXE 開機還是失敗,大概都是這個檔案造成的,需要上官方網站看是否有更新檔.grub.efi 這個檔案是由 grub-0.97-77.el6.x86_64 套件提供.解開時需要使用 rpm2cpio 與 cpio .
[root@benjr ~]# find / -name grub.efi /boot/efi/EFI/redhat/grub.efi [root@benjr ~]# rpm -qf /boot/efi/EFI/redhat/grub.efi grub-0.97-77.el6.x86_64 [root@benjr ~]# rpm2cpio grub-0.97-77.el6.x86_64 | cpio -div
grub.efi 還要搭配 efidefault 設定檔一起使用
[root@benjr ~]# vi /var/lib/tftpboot/efidefault #debug --graphics default=0 timeout 5000 #hiddenmenu title RHEL6.8-64 root (nd) kernel /rhel6.8/vmlinuz initrd /rhel6.8/initrd.img title RHEL6.5-64 root (nd) kernel /rhel6/vmlinuz initrd /rhel6/initrd.img
將開機所需的 kernel 和 initrd 檔案複製到 “/tftpboot/linux-install/rhel6 目錄下
上面的設定是 Redhat 環境,如果要設定 Ubuntu 的環境可以參考這一篇 http://blog.widodh.nl/2015/11/pxe-boot-over-ipv6-with-ipxe/
至於 EFI + Legacy PXE Boot 在 IPv6 的環境是不是可以整合在一起,我不確定,可以試試看 ,之前試過 EFI + Legacy PXE Boot 在 IPv4 的環境 http://benjr.tw/16194
- Legacy – grub.efi 檔案
設定請參考 http://benjr.tw/83