星体投射 发表于 2019-10-9 13:50:44

dnsmasq设置bios和uefi双启动多引导菜单(完美)

本帖最后由 星体投射 于 2019-10-11 07:48 编辑

按F8手动选菜单,不按自动加载第一项,并实现自动ipxe加载菜单(网启目录下放ipxemenu.txt),ipxe可以直接用官方的文件,无需编译内置菜单

dnsmasq的UEFI网启非常古怪,反复捉摸网上的各种别人写的菜单,最终总结只能这么写

小技巧:openwrt 路由器上一般都是u盘和sd卡上放网启目录,可以把该目录软链接到/www下就实现了http服务,方便用ipxe的http启动
       ln -s /mnt/sda1/pxeboot /www/pxeboot

dnsmasq版本2.76以上
dnsmasq.conf配置
enable-tftp
tftp-lowercase
dhcp-no-override
tftp-root=/mnt/sda1/pxeboot

dhcp-match=set:iPXE,175

dhcp-vendorclass=set:flag,PXEClient:Arch:00000
dhcp-vendorclass=set:flag,PXEClient:Arch:00006
dhcp-vendorclass=set:flag,PXEClient:Arch:00007
dhcp-vendorclass=set:flag,PXEClient:Arch:00009

tag-if=set:load,tag:!iPXE,tag:flag

pxe-prompt="Press F8 or Enter key for PXE menu.", 5
#BIOS MENU
pxe-service=tag:load,X86PC, "BIOS ipxe undionly", undionly.kpxe
pxe-service=tag:load,X86PC, "BIOS ipxe.pxe", ipxe.pxe
pxe-service=tag:load,X86PC, "BIOS Microsoft PXE", pxeboot.n12
pxe-service=tag:load,X86PC, "boot from local", 0
#UEFI MENU
pxe-service=tag:load,IA32_EFI, "Microsoft UEFI (IA32_EFI)", bootia32.efi
pxe-service=tag:load,X86-64_EFI, "Microsoft UEFI (X86-64_EFI)", bootx64.efi
pxe-service=tag:load,BC_EFI, "Microsoft UEFI(BC-EFI)", bootx64.efi
pxe-service=tag:load,6, "iPXE snponly UEFI32(6)", snponly32.efi
pxe-service=tag:load,7, "iPXE snponly UEFI(7)", snponly.efi
pxe-service=tag:load,9, "iPXE snponly UEFI(9)", snponly.efi
pxe-service=tag:load,06,"iPXE UEFI32(06)", ipxe32.efi
pxe-service=tag:load,07,"iPXE UEFI(07)", ipxe.efi
pxe-service=tag:load,09,"iPXE UEFI(09)", ipxe.efi

dhcp-boot=tag:iPXE,ipxemenu.txt

bios加菜单很简单
uefi加菜单方法:
比如添加grub2的64位efi,如下多加个0
pxe-service=tag:load,007,"GRUB2 UEFI(007)", grub2.efi
pxe-service=tag:load,009,"GRUB2 UEFI(009)", grub2.efi

pennlau 发表于 2019-10-9 15:36:48

前来学习

enlist 发表于 2019-10-9 15:51:39

感谢大神

goodtime 发表于 2019-10-10 08:25:08

这个我琢磨半天没搞出来, 谢谢分享

2013dgyangxf 发表于 2019-10-10 17:07:27

正在研究,不知道文件目录要怎么放

2013dgyangxf 发表于 2019-10-10 17:09:05

这下子不管是新电脑还是老电脑都可以方便启动了,太感谢了

2013dgyangxf 发表于 2019-10-10 17:40:00

这下子不管是新电脑还是老电脑都可以方便启动了,太感谢了

hkkitlee 发表于 2019-10-10 18:49:27

http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=415206&pid=3818975&fromuid=678562
我摸索的不用tag,感覺就是有多種寫法頗混亂

pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe
pxe-service=IA32_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=X86-64_EFI, "Boot X86-64", uefi/ipxe.efi

chenall 发表于 2019-10-11 14:39:32

本帖最后由 chenall 于 2019-10-11 16:15 编辑

我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)

使用VMWARE测试 BIOS /EFI32/EFI64都可以正常启动,实机测试BIOS和EFI64都可以,EFI32的机器没有找到.


dhcp-match=set:x86pc,option:client-arch,0
dhcp-match=set:IA32_EFI,option:client-arch,6
dhcp-match=set:x86_64-uefi,option:client-arch,7
dhcp-match=set:x86_64-uefi,option:client-arch,9
dhcp-match=set:ipxe,77,"iPXE"

dhcp-boot=tag:x86pc,ipxe/undionly.kpxe,,192.168.103.15
dhcp-boot=tag:x86_64-uefi,ipxe/snponly64.efi,,192.168.103.15
dhcp-boot=tag:IA32_EFI,ipxe/snponly32.efi,,192.168.103.15
dhcp-boot=tag:ipxe,boot.ipxe,,192.168.103.15

@hkkitlee 这种方式我也有试过,感觉兼容性不好,不知是我配置有问题还是其它,只有BIOS可以正常启动.EFI不行.

星体投射 发表于 2019-10-11 15:06:09

chenall 发表于 2019-10-11 14:39
我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)

使用VMWARE ...

他写的EFI根本不会引导,EFI想要出菜单,只能按我的方法写
必须至少写两项才行,X86-64_EFI和7,单独写其中一个都不会引导,非常神奇

江南一根葱 发表于 2019-10-11 17:53:26

chenall 发表于 2019-10-11 14:39
我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)

使用VMWARE ...

pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe
pxe-service=IA32_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=X86-64_EFI, "Boot X86-64", uefi/ipxe.efi
他这个可以的,不过我是linux上用的dnsmasq,估计差不多的吧。

只不过显示的是ipxe.efi,但实际上获取的文件又是ipxe.efi.0,很诡异,我也是折腾了n多天,最后查弄了log才研究出来的

不过反正有ln -s

江南一根葱 发表于 2019-10-11 17:56:21

这个东西我也折腾了好多天,最后是开启log,开启webserver
然后从http访问这个log,实时观测客户端是怎么取文件,再判断哪步出了错

hkkitlee 发表于 2019-10-11 19:06:34

本帖最后由 hkkitlee 于 2019-10-11 19:22 编辑

其實寫法我不只一個,我貼中加了#號的就是在ddwrt路由器用的,當搬到x86 Centos7就啟動不了。

話說為何那般肯定我寫法啟動不了呢?
兩台x86-efi,兩台bios及kvm bios/efi已經實測啟動過了
始終不同架構的實體機不多,不過理論上回報arch是一樣的

x86-64用的是dnsmasq-2.76-9.el7.x86_64
ddwrt用Dnsmasq version 2.78Copyright (c) 2000-2017 Simon Kelley

星体投射 发表于 2019-10-11 19:53:49

cckp 发表于 2019-10-11 19:03
dnsmasq对pxe的支持比较差,那个菜单什么的,没啥用。现在有ipxe grub等各种loader更高级的菜单 抛弃旧的吧

这菜单是在加载引导文件之前就给你选择,很有用的,已知ipxe的efi引导文件在某些机器上加载会死机(你有更高级的菜单也无用武之地了),这时就可以马上重启机器换别的引导文件,而不用跑服务器上去改引导文件,而且不受secure boot开关影响

江南一根葱 发表于 2019-10-11 20:39:40

cckp 发表于 2019-10-11 19:03
dnsmasq对pxe的支持比较差,那个菜单什么的,没啥用。现在有ipxe grub等各种loader更高级的菜单 抛弃旧的吧

那个菜单是挺有用的,兼容性最好的就是pxemenu,别的loader因为高级所以各种黑屏和不兼容

江南一根葱 发表于 2019-10-11 21:04:28

cckp 发表于 2019-10-11 21:02
有时确实有用吧。我只是在vmware测试,很少用实机启动,所以没怎么研究兼容性问题。

pxemenu在ipxe中也 ...

从ipxe启动的pxemenu貌似是带热键选项,前面有标记ABCD的{:1_186:}

江南一根葱 发表于 2019-10-11 21:09:06

我有时候还在用这个,当年都是用这个兼容性打遍天下

win环境,efi下不知道有没有工具可以出类似的菜单

友联电脑 发表于 2019-10-11 23:28:47

本帖最后由 友联电脑 于 2019-10-11 23:38 编辑

uefi和legacy一网混合启动,在dhcp时,判断类型,legacy,efi32,efi64在分别去调用相应的tftp下引导文件,进而再去加载菜单,不知道这样好不好,楼主这个F8,需要在出始化后手动一下哈

江南一根葱 发表于 2019-10-12 10:05:43

本帖最后由 江南一根葱 于 2019-10-12 10:21 编辑

友联电脑 发表于 2019-10-11 23:28
uefi和legacy一网混合启动,在dhcp时,判断类型,legacy,efi32,efi64在分别去调用相应的tftp下引导文件, ...

手动是备胎制度,有些环境没必要关安全启动用来启bootmgfw.efi
有些环境要启grub2.efi,有些环境要启ipxe.efi,

友联电脑 发表于 2019-10-12 10:15:42

江南一根葱 发表于 2019-10-12 10:05
手动是备胎制度,有些环境没必要关安全启动用来启bootmgrfw.efi
有些环境要启grub2.efi,有些环境要启i ...

假如在没有关闭安全启动时,网络初始化时,可以手动选择一下,调用哪个去引导。是这么个情况

hkkitlee 发表于 2019-10-12 12:42:22

友联电脑 发表于 2019-10-12 10:15
假如在没有关闭安全启动时,网络初始化时,可以手动选择一下,调用哪个去引导。是这么个情况

安全啟動沒關係

F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動

友联电脑 发表于 2019-10-12 13:47:19

hkkitlee 发表于 2019-10-12 12:42
安全啟動沒關係

F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動

嗯嗯,给失败时多一种选择得,省的去调整默认值,了解,了解。

hkkitlee 发表于 2019-10-13 12:13:19

cckp 发表于 2019-10-12 17:34
很有用。感觉大多数时候用不上 白白增加几秒钟

另一個角度看,不同loader有其不同長處:
grub2沒https
Ipxe下幾個載入方法(pxe,kpxe,kkpxe)也有分別

江南一根葱 发表于 2019-10-13 22:47:12

本帖最后由 江南一根葱 于 2019-10-14 15:26 编辑

cckp2019-10-12 17:34
áоò




f8通常是到不同场景用作调试用的,调试完了如果客户端比较多,还是会改下默认值的,不会浪费,

a1379388505 发表于 2019-12-12 14:32:22

求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下

config dnsmasq
        option domainneeded '1'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option authoritative '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.auto'
        option nonwildcard '1'
        option localservice '1'
        option enable_tftp '1'
        option tftp_root '/root/ipxe'
#        option dhcp_boot 'ipxe64.efi'
        option quietdhcp '1'
        option sequential_ip '1'

#        enable-tftp
#        tftp-lowercase
#        dhcp-no-override
#        tftp-root=/mnt/sda1/pxeboot

        option dhcp_match 'set:iPXE,175'

        option dhcp_vendorclass 'set:flag,PXEClient:Arch:00000'
        option dhcp_vendorclass 'set:flag,PXEClient:Arch:00006'
        option dhcp_vendorclass 'set:flag,PXEClient:Arch:00007'
        option dhcp_vendorclass 'set:flag,PXEClient:Arch:00009'

        option tag_if 'set:load,tag:!iPXE,tag:flag'

        option pxe_prompt '"Press F8 or Enter key for PXE menu.", 5'
#        BIOS MENU
        option pxe_service 'tag:load,X86PC, "BIOS ipxe undionly", undionly.kpxe'
        option pxe_service 'tag:load,X86PC, "BIOS ipxe.pxe", ipxe.pxe'
        option pxe_service 'tag:load,X86PC, "BIOS Microsoft PXE", pxeboot.n12'
        option pxe_service 'tag:load,X86PC, "boot from local", 0'
#        UEFI MENU
        option pxe_service 'tag:load,IA32_EFI, "Microsoft UEFI (IA32_EFI)", bootia32.efi'
        option pxe_service 'tag:load,X86-64_EFI, "Microsoft UEFI (X86-64_EFI)", bootx64.efi'
        option pxe_service 'tag:load,BC_EFI, "Microsoft UEFI(BC-EFI)", bootx64.efi'
        option pxe_service 'tag:load,6, "iPXE snponly UEFI32(6)", snponly32.efi'
        option pxe_service 'tag:load,7, "iPXE snponly UEFI(7)", snponly.efi'
        option pxe_service 'tag:load,9, "iPXE snponly UEFI(9)", snponly.efi'
        option pxe_service 'tag:load,06,"iPXE UEFI32(06)", ipxe32.efi'
        option pxe_service 'tag:load,07,"iPXE UEFI(07)", ipxe.efi'
        option pxe_service 'tag:load,09,"iPXE UEFI(09)", ipxe.efi'
        option pxe_service 'tag:load,007,"GRUB2 UEFI(007)", grub2.efi'
        option pxe_service 'tag:load,009,"GRUB2 UEFI(009)", grub2.efi'

        option dhcp_boot 'tag:iPXE,ipxemenu.txt'


星体投射 发表于 2019-12-12 14:37:55

a1379388505 发表于 2019-12-12 14:32
求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下



我的是改etc/dnsmasq.conf
另外我不用这个方法了,因为遇到有实体机不兼容
还是用tiny pxe 吧 右键切换配置文件来切换引导

a1379388505 发表于 2019-12-12 14:41:17

星体投射 发表于 2019-12-12 14:37
我的是改etc/dnsmasq.conf
另外我不用这个方法了,因为遇到有实体机不兼容
还是用tiny pxe 吧 右键切换 ...
非常感谢指导,请问我用的openwrt可以用 tiny pxe吗 我百度经常没找到openwrt 和 tiny pxe在一起的文章

星体投射 发表于 2019-12-12 14:42:42

a1379388505 发表于 2019-12-12 14:41
非常感谢指导,请问我用的openwrt可以用 tiny pxe吗 我百度经常没找到openwrt 和 tiny pxe在一起的文章

任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可

hkkitlee 发表于 2019-12-12 14:57:45

本帖最后由 hkkitlee 于 2019-12-12 14:59 编辑

a1379388505 发表于 2019-12-12 14:32
求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下


建議在openwrt 的 terminal 輸入 :netstat -tunlp
先看看port有沒有正確啟動,如udp67,69,4011

有的話就可以縮小範圍在下半部的啟動語句部份。

我經驗是ddwrt與linux的config寫法是不同的,互換沒有作用的。(就是亂)
建議你查看一下版本(dnsmasq -v),再找版本語句說明就是。

還有些wrt版的原dnsmasq閹掉了tftp,即沒有編譯進dnsmasq;那時候就要升級一下你的dnsmasq了

a1379388505 发表于 2019-12-12 14:58:38

星体投射 发表于 2019-12-12 14:42
任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可

我百度到的我用的Tiny PXE Serve是一个exe的windows程序,而我是用的openwrt里面的tftp启动的ipxe来无盘启动的
我就蒙了 这个exe文件用到哪里。。。。
页: [1] 2 3 4
查看完整版本: dnsmasq设置bios和uefi双启动多引导菜单(完美)