centos 7 上配置dnsmasq 同时支持ipv4和ipv6的DHCP服务

dnsmasq版本: dnsmasq 从2.6*版本开始支持DHCPv6功能

参考:https://blog.youkuaiyun.com/qq_35550345/article/details/86628962

dhcpv6原理:https://blog.youkuaiyun.com/qq_38265137/article/details/80466734

ifcfg配置参数介绍:https://blog.youkuaiyun.com/chinaltx/article/details/86497165

一、不指定分配地址

  • dnsmasq服务器
  1. 配置dnsmasq服务器ipv6地址(本测试接口为eth0)
    /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    TYPE=Ethernet
    
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    
    PEERDNS=yes
    
    IPV6INIT=yes
    IPV6to4INIT=yes
    IPV6FORDING=yes
    IPV6ADDR=fd00::1/64

    /etc/sysconfig/network
     

    NETWORKING_IPV6=yes

     

  2. 设置dnsmasq.conf 
    read-ethers
    log-dhcp
    log-queries
    log-facility=/var/log/dnsmasq.log
    addn-hosts = /var/lib/cobbler/cobbler_hosts
    domain=local
    dhcp-lease-max=1800
    server=/local/
    resolv-file=/etc/dnsmasq.upstream
    interface=eth0
    
    cache-size=1024
    
    # This is one of the key options. dnsmasq tries to move out servername
    # and PXE filename from special fields into DHCP options.
    # Some old clients can't understand those DHCP options, so they
    # will not be able to boot via PXE without this option enabled.
    # For example gPXE will not work while iPXE works fine.
    dhcp-no-override
    
    # for many simultaneously DHCPDISCOVVER requests dnsmasq can offer
    # the same IP for two differnt MAC addresses. This option prevents it
    # by assigning IPs one by one instead of using hash algorithm.
    dhcp-sequential-ip
    
    #ipv4
    dhcp-option=6,10.10.1.2
    dhcp-range=internal,10.10.1.128,10.10.1.254,255.255.255.0,120m
    dhcp-option=net:internal,option:router,10.10.1.2
    dhcp-boot=net:internal,pxelinux.0,boothost,10.10.1.2
    
    #ipv6
    dhcp-range=fd00::22, fd00::44, 64, 1h
    enable-ra
    #domain-needed
    #resolv-file=/etc/resolv.dnsmasq.conf
    

    检查语法并启动dnsmasq:dnsmasq -test

    杀掉测试进程后启动dnsmasq &

    dhcp租用信息:/var/lib/dnsmasq/dnsmasq.leases

  • 客户端配置
  1. 网卡配置
    客户机上的接口为eth0,网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    #禁止NetworkManager管理网卡
    NM_CONTROLLED=no 
    HWADDR=
    #USERCTL=no
    PEERDNS=yes
    BOOTPROTO=dhcp #只能小写
    #BOOTPROTO=dhcp6  打开这个只会获取ipv6的地址
    DHCPV6C=yes
    IPV6INIT=yes

     

  2. 网络配置文件/etc/sysconfig/network
    NETWORKING_IPV6=yes
    
    IPV6_AUTOCONF=yes  #yes表示自动获取地址

     

  3. 测试:
    dhclient -6 -v eth0

二、指定分配地址

使用dnsmasq 有状态DHCPv6下发特定租约

上面的方式是dnsmasq按照特定算法给客户端分配ipv4和ipv6地址,如果想给每个客户端分配指定地址,需要增加以下配置。

  1. dnsmasq服务器(dnsmasq.conf )
    配置和上面一样,添加以下语句
    dhcp-host=id:00:03:01:00:08:00:27:5c:b9:f0, [fd00::22]

    修改配置需要重启dnsmasq服务

  2. 客户端

    根据官方描述,dhclient版本为4.1+支持ipv6。为了支持DUID-LL要在/etc/dhcp/dhclient.conf中写入:

         ZQ send dhcp6.client-id = concat(00:03:00, hardware);
    /etc/sysconfig/network-scripts/ifcfg-eth0跟上面一样
    配置/etc/sysconfig/network

    NETWORKING_IPV6=yes
    
    IPV6_AUTOCONF=no  

    客户端租约文件/var/lib/dhclient/dhclient6.leases
     

三、问题分析

centos7使用NetworkManager启动dhclient (NM_CONTROLLED=yes )

相关文件在/var/lib/NetworkManager/

查看dhcliemt进程       

ps aux | grep dhclient 

/sbin/dhclient -d -q -6 -N -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient6-eth0.pid -lf /var/lib/NetworkManager/dhclient6-5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03-eth0.lease -cf /var/lib/NetworkManager/dhclient6-eth0.conf eth0

红色部分为租约信息和配置文件路径。

 

<think>我们正在搭建一个支持IPv4IPv6的无盘Web服务器以实现PXE启动。PXE(预启动执行环境)允许客户端通过网络从服务器启动操作系统,而不需要本地存储设备。无盘Web服务器将提供启动所需的文件。根据引用内容,PXE工作流程通常包括以下阶段:1.客户端通过DHCP获取IP地址(包括TFTP服务地址启动文件名)。2.客户端通过TFTP下载启动文件(如pxelinux.0,或iPXE脚本)。3.根据启动文件中的配置,客户端可能继续下载内核、初始RAM磁盘(initrd)等,并启动操作系统。为了支持IPv4IPv6,我们需要配置DHCP服务同时提供IPv4IPv6地址分配,并设置TFTP服务器(或HTTP服务器,因为iPXE支持HTTP等协议)来提供启动文件。步骤概述:1.配置网络环境:确保服务同时具有IPv4IPv6地址,并且客户端可以通过网络访问服务器。2.设置DHCP服务器:同时支持IPv4(如ISCDHCP服务器)IPv6(如KeaDHCP服务器或ISCDHCPv6)的DHCP服务,为客户端提供IP配置以及PXE启动所需的信息(如TFTP服务地址启动文件名)。3.设置TFTP/HTTP服务器:提供PXE启动所需的文件(如pxelinux.0、内核、initrd等)。考虑到iPXE支持HTTP,我们也可以使用HTTP服务器来提供大文件,提高效率。4.准备启动文件:包括PXE引导程序(如iPXE)启动菜单配置文件,以及操作系统镜像或安装文件。5.测试:使用支持PXE的客户端进行IPv4IPv6启动测试。详细步骤:###1.网络配置确保服务器上IPv4IPv6都已启用,并且有固定的地址。例如:-IPv4:192.168.1.10-IPv6:2001:db8::10###2.安装配置DHCP服务器####IPv4DHCP(使用ISCDHCP服务器)编辑`/etc/dhcp/dhcpd.conf`,添加以下内容(根据实际情况修改):```confoptiondomain-name"example.com";optiondomain-name-servers8.8.8.8;default-lease-time600;max-lease-time7200;authoritative;subnet192.168.1.0netmask255.255.255.0{range192.168.1.100192.168.1.200;optionrouters192.168.1.1;next-server192.168.1.10;#TFTP服务地址(本机)filename"pxelinux.0";#或使用iPXE脚本,如"boot.ipxe"}```####IPv6DHCP(使用KeaDHCP服务器或ISCDHCPv6)由于ISCDHCPv6配置较为复杂,也可以使用Kea。这里以Kea为例(安装:`yuminstallkea`)。编辑`/etc/kea/kea-dhcp6.conf`,配置IPv6DHCP:```json{"Dhcp6":{"interfaces-config":{"interfaces":["eth0"]},"valid-lifetime":4000,"renew-timer":1000,"rebind-timer":2000,"subnet6":[{"subnet":"2001:db8::/64","pools":[{"pool":"2001:db8::100-2001:db8::200"}],"option-data":[{"name":"bootfile-url","data":"tftp://[2001:db8::10]/boot.ipxe"#注意IPv6地址用方括号括起来}]}]}}```注意:IPv6DHCP中,我们使用`bootfile-url`选项指定启动文件(可以是TFTP或HTTPURL)。###3.安装配置TFTPHTTP服务器-TFTP服务器:用于传输初始引导文件(如pxelinux.0或iPXE固件)。-HTTP服务器:用于传输较大的文件(如内核、initrd、操作系统镜像),因为iPXE支持HTTP。安装TFTP服务器(如tftp-server)HTTP服务器(如Apache或Nginx)。配置TFTP服务器(例如使用`tftp-server`包):-将启动文件放在`/var/lib/tftpboot/`目录下。配置HTTP服务器(例如Apache):-设置根目录为`/var/www/html/`,并在其中放置启动所需的内核、initrd等文件。###4.准备启动文件我们可以使用传统的PXE引导程序(如pxelinux.0)或更先进的iPXE。考虑到iPXE支持IPv6HTTP,我们选择使用iPXE。步骤:-从iPXE官网下载iPXE引导程序(如`undionly.kpxe`)或自己编译(支持更多特性)。-将iPXE引导程序放在TFTP目录中(例如`/var/lib/tftpboot/undionly.kpxe`)。-在DHCP配置中指定引导文件为`undionly.kpxe`(IPv4相应的iPXE脚本URL(IPv6)。然后,编写iPXE脚本(如`boot.ipxe`),放置在HTTP服务器上(例如`/var/www/html/boot.ipxe`)。脚本内容示例:```ipxe#!ipxedhcpsetbase-urlhttp://192.168.1.10/#或使用IPv6地址,如http://[2001:db8::10]/kernel${base-url}vmlinuzinitrd${base-url}initrd.imgboot```注意:需要将`vmlinuz``initrd.img`放在HTTP服务器的根目录下。###5.启动服务并测试启动DHCP服务器(IPv4IPv6)、TFTP服务器、HTTP服务器,并设置开机启动。测试:-使用支持PXE的客户端,设置网络启动,分别测试IPv4IPv6环境下的启动情况。###注意事项-防火墙:确保开放相关端口(DHCP:67/UDP,68/UDP;TFTP:69/UDP;HTTP:80/TCP;DHCPv6:547/UDP,546/UDP)。-SELinux:如果启用,可能需要调整策略。###引用说明[^1]提供了PXE的基本概念工作原理,我们了解到PXE依赖于DHCPTFTP。[^2]介绍了iPXE,它扩展了PXE功能,支持更多协议(如HTTP),并且支持IPv6。我们采用iPXE来实现对IPv6支持。[^3][^4]进一步说明了PXE的工作流程优点,我们的设置遵循了这些流程。[^5]是关于内核编译的注意事项,与本问题无直接关系。###相关问题1.如何为无盘系统准备操作系统镜像?2.如何优化无盘Web服务器的性能?3.无盘启动过程中常见的故障排除方法有哪些?</think>### 支持IPv4/IPv6的无盘Web服务器PXE搭建指南 #### 一、核心组件规划 1. **双栈网络环境** - 服务器需同时配置IPv4IPv6地址(示例): ```bash # IPv4 ifconfig eth0 192.168.1.10 netmask 255.255.255.0 # IPv6 ip -6 addr add 2001:db8::10/64 dev eth0 ``` - 防火墙开放端口: ```bash firewall-cmd --add-service={dhcp,tftp,http} --permanent firewall-cmd --add-port=547/udp --permanent # DHCPv6 firewall-cmd --reload ``` 2. **服务组件选择** | 服务类型 | IPv4方案 | IPv6方案 | |----------------|-------------------|-------------------| | DHCP服务 | ISC DHCP Server | Kea DHCPv6 | | 文件传输 | TFTP + iPXE | HTTP(S) via iPXE | | 操作系统部署 | Cobbler | Cobbler | #### 二、DHCP服务配置 1. **IPv4 DHCP** (`/etc/dhcp/dhcpd.conf`) ```conf subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; option bootfile-name "undionly.kpxe"; # iPXE引导文件 next-server 192.168.1.10; # TFTP服务地址 } ``` 2. **IPv6 DHCP** (`/etc/kea/kea-dhcp6.conf`) ```json { "Dhcp6": { "subnet6": [{ "subnet": "2001:db8::/64", "pools": [{ "pool": "2001:db8::100-2001:db8::200" }], "option-data": [{ "name": "bootfile-url", "data": "http://[2001:db8::10]/ipxe/boot.ipxe" # iPXE脚本URL }] }] } } ``` #### 三、iPXE引导配置 1. **安装iPXE引导文件** ```bash wget https://boot.ipxe.org/undionly.kpxe -P /var/lib/tftpboot/ ``` 2. **创建iPXE启动脚本** (`/var/www/html/ipxe/boot.ipxe`) ```ipxe #!ipxe :start menu PXE Boot Menu item --key 1 linux Boot Linux (IPv4) item --key 2 linux6 Boot Linux (IPv6) choose --timeout 5000 target && goto ${target} :linux kernel http://192.168.1.10/os/vmlinuz initrd http://192.168.1.10/os/initrd.img boot :linux6 kernel http://[2001:db8::10]/os/vmlinuz initrd http://[2001:db8::10]/os/initrd.img boot ``` #### 四、Cobbler集成部署 1. **安装配置Cobbler** ```bash yum install cobbler cobbler-web cobbler check # 检查配置 ``` 2. **配置双栈支持** (`/etc/cobbler/settings`) ```ini next_server_v4: 192.168.1.10 next_server_v6: 2001:db8::10 default_name_servers: ["8.8.8.8", "2001:4860:4860::8888"] ``` 3. **导入操作系统镜像** ```bash cobbler import --path=/mnt/centos-iso --name=CentOS-DualStack ``` #### 五、验证测试 1. **PXE启动流程验证**: - IPv4客户端:应通过DHCP获取`undionly.kpxe`并加载iPXE菜单 - IPv6客户端:直接获取HTTP引导脚本`boot.ipxe` - 传输协议验证: ```mermaid graph LR A[客户端PXE启动] --> B{IP类型} B -->|IPv4| C[TFTP → undionly.kpxe] B -->|IPv6| D[HTTP → boot.ipxe] C & D --> E[加载内核/initrd] ``` 2. **故障排查命令**: ```bash tcpdump -i eth0 port 67 or port 547 # 监控DHCP流量 journalctl -u kea-dhcp6-server # 查看DHCPv6日志 ``` #### 六、关键优化措施 1. **HTTP替代TFTP**:通过iPXE使用HTTP传输大文件(如内核镜像),提升传输效率[^2] 2. **双栈DNS配置**:在`/etc/cobbler/named.template`添加AAAA记录 3. **安全增强**: ```bash # 启用HTTPS传输 openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/cobbler/server.key -out /etc/cobbler/server.crt ``` > **技术说明**:iPXE通过扩展传统PXE协议,支持IPv6地址解析HTTP协议传输,解决了原生PXE对IPv6支持不足的问题[^2][^3]。Cobbler作为上层管理工具,简化了双栈环境下的镜像分发配置管理[^1]。 ### 相关问题 1. 如何验证IPv6 PXE启动过程中各阶段的网络连通性? 2. 在无盘系统中如何优化Linux内核以减少网络启动时的内存占用? 3. 如何实现PXE启动菜单的动态生成(如根据客户端MAC地址定制)? 4. 双栈环境下DHCPv4DHCPv6服务共存时可能出现哪些冲突?如何解决? [^1]: PXE基础架构依赖于DHCP/TFTP协议栈,Cobbler通过封装Kickstart简化部署流程 [^2]: iPXE支持HTTP协议传输IPv6地址解析,显著扩展传统PXE能力 [^3]: PXE客户端通过DHCP交互获取初始引导信息,后通过TFTP/HTTP加载操作系统文件 [^4]: 无盘部署可集中管理操作系统镜像,提升维护效率 [^5]: 内核编译时需确保网络文件系统(NFS)相关模块正确配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值