ubuntu dhcp如何实现自动化部署
Ubuntu DHCP 自动化部署实践
一 方案总览
- 使用 ISC DHCP Server(isc-dhcp-server) 作为 DHCP 服务端,通过 netplan 为服务器配置静态地址,编写 /etc/dhcp/dhcpd.conf 定义子网与地址池,并在 /etc/default/isc-dhcp-server 指定监听接口,最后用 systemd 启动与开机自启。
- 自动化手段可选:本地 Bash 脚本一键部署,或 Ansible 进行批量、可重复交付;客户端侧使用 netplan 或 dhclient 获取地址,便于验证与回归。
二 手动步骤速览(用于理解自动化要封装的动作)
- 安装服务:sudo apt update & & sudo apt install -y isc-dhcp-server
- 配置服务器静态 IP(Ubuntu 18.04+ 推荐 netplan,示例网卡 eth0)
- 编辑 /etc/netplan/01-eth0.yaml:
- network: version: 2; ethernets: eth0: dhcp4: no; addresses: [192.168.1.10/24]; gateway4: 192.168.1.1; nameservers: { addresses: [8.8.8.8, 1.1.1.1] }
- 应用:sudo netplan apply
- 编辑 /etc/netplan/01-eth0.yaml:
- 配置 DHCP 服务
- 编辑 /etc/dhcp/dhcpd.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 subnet-mask 255.255.255.0; option domain-name-servers 8.8.8.8, 1.1.1.1; default-lease-time 600; max-lease-time 7200; }
- 编辑 /etc/dhcp/dhcpd.conf(示例):
- 指定监听接口
- 编辑 /etc/default/isc-dhcp-server:INTERFACESv4=“eth0”
- 启动与开机自启
- sudo systemctl start isc-dhcp-server & & sudo systemctl enable isc-dhcp-server
- 防火墙放行
- sudo ufw allow 67/udp & & sudo ufw allow 68/udp
- 验证
- sudo systemctl status isc-dhcp-server;租约:cat /var/lib/dhcp/dhcpd.leases;客户端:ip a
三 自动化方案一 Bash 脚本一键部署
- 功能点
- 交互式输入 服务器IP/网关/网卡/DNS/地址池,自动生成 netplan 与 dhcpd.conf,自动放行 UDP 67/68,设置 开机自启 并输出验证命令。
- 示例脚本(可直接使用,按需修改默认值)
- 保存为:dhcp_deploy.sh
- 赋权:chmod +x dhcp_deploy.sh
- 运行:sudo ./dhcp_deploy.sh
- 脚本内容
-
#!/usr/bin/env bash set -Eeuo pipefail read -rp "服务器静态IP(如 192.168.1.10/24): " SERVER_IP read -rp "网关(如 192.168.1.1): " GW read -rp "网卡名(如 eth0/ens33): " NIC read -rp "DNS(逗号分隔,如 8.8.8.8,1.1.1.1): " DNS read -rp "地址池起止(如 192.168.1.100 192.168.1.200): " RANGE_START RANGE_END
安装
apt update -y & & apt install -y isc-dhcp-server
静态IP(netplan)
mkdir -p /etc/netplan cat > /etc/netplan/01-dhcp-server.yaml < < EOF network: version: 2 ethernets: $NIC: dhcp4: no addresses: [$SERVER_IP] gateway4: $GW nameservers: addresses: [${ DNS//,/ } ] EOF netplan apply
备份并生成 dhcpd.conf
cp -a /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak.$(date +%F_%T) 2> /dev/null || true PREFIX=$(echo “$SERVER_IP” | cut -d. -f1-3) cat > /etc/dhcp/dhcpd.conf < < EOF option domain-name “local”; option domain-name-servers ${ DNS//,/ } ; default-lease-time 600; max-lease-time 7200; ddns-update-style none;
subnet $PREFIX.0 netmask 255.255.255.0 { range $RANGE_START $RANGE_END; option routers $GW; option subnet-mask 255.255.255.0; option broadcast-address $PREFIX.255; } EOF
监听接口
echo “INTERFACESv4="$NIC"” > /etc/default/isc-dhcp-server
防火墙
ufw allow 67/udp || true ufw allow 68/udp || true
启动
systemctl restart isc-dhcp-server || { journalctl -xeu isc-dhcp-server; exit 1; } systemctl enable isc-dhcp-server
echo -e “\n[OK] DHCP 已部署完成” echo “验证:” echo " systemctl status isc-dhcp-server" echo " 租约:cat /var/lib/dhcp/dhcpd.leases" echo " 客户端获取:在客户端执行 sudo dhclient $NIC 后 ip a"
-
使用提示
- 虚拟机环境请关闭或隔离其他 DHCP 服务(如 VMware 自带 DHCP),避免冲突。
- 若需固定 IP,可在 subnet 内添加 host 段(基于 MAC 绑定)。
-
四 自动化方案二 Ansible 角色示例
- 作用:在 Ubuntu 18.04/20.04/22.04/24.04 上批量、幂等地部署 DHCP 服务。
- 示例 playbook(保存为 site.yml)
-
- hosts: dhcp_servers
become: yes
vars:
dhcp_iface: “eth0”
server_ip: “192.168.1.10/24”
gateway: “192.168.1.1”
dns_servers: “8.8.8.8,1.1.1.1”
range_start: “192.168.1.100”
range_end: “192.168.1.200”
tasks:
-
name: Install ISC DHCP Server apt: name=isc-dhcp-server state=present update_cache=yes
-
name: Configure netplan static IP copy: dest: /etc/netplan/01-dhcp-server.yaml content: | network: version: 2 ethernets: { { dhcp_iface } } : dhcp4: no addresses: [{ { server_ip } } ] gateway4: { { gateway } } nameservers: addresses: [{ { dns_servers | replace(‘,’, ’ ') } } ] notify: apply netplan
-
name: Configure DHCP server copy: dest: /etc/dhcp/dhcpd.conf content: | option domain-name “local”; option domain-name-servers { { dns_servers } } ; default-lease-time 600; max-lease-time 7200; ddns-update-style none;
subnet { { server_ip | regex_replace('/.*','') | regex_replace('\\.\\d+$','.0') } } netmask 255.255.255.0 { range { { range_start } } { { range_end } } ; option routers { { gateway } } ; option subnet-mask 255.255.255.0; option broadcast-address { { server_ip | regex_replace('/.*','') | regex_replace('\\.\\d+$','.255') } } ; }notify: restart isc-dhcp-server
-
name: Set listening interface lineinfile: path: /etc/default/isc-dhcp-server regexp: ‘^INTERFACESv4=’ line: ‘INTERFACESv4=“{ { dhcp_iface } } ”’
-
name: Allow DHCP ports in UFW ufw: rule=allow port=67 proto=udp
-
name: Allow DHCP ports in UFW ufw: rule=allow port=68 proto=udp
-
handlers:
- name: apply netplan command: netplan apply
- name: restart isc-dhcp-server service: name=isc-dhcp-server state=restarted enabled=yes
- hosts: dhcp_servers
become: yes
vars:
dhcp_iface: “eth0”
server_ip: “192.168.1.10/24”
gateway: “192.168.1.1”
dns_servers: “8.8.8.8,1.1.1.1”
range_start: “192.168.1.100”
range_end: “192.168.1.200”
tasks:
-
- 运行:ansible-playbook -i inventory site.yml
- 说明
- 通过 notify/handler 保证配置变更后自动生效;变量化 网卡/地址池/网关/DNS 便于多环境复用。
五 客户端自动化与验证
- 客户端获取地址
- Ubuntu 18.04+(netplan):编辑 /etc/netplan/*.yaml,设置 dhcp4: true,执行 sudo netplan apply
- 老系统(interfaces):auto eth0; iface eth0 inet dhcp,执行 sudo systemctl restart networking
- 临时获取:sudo dhclient eth0
- 验证要点
- 服务端:systemctl status isc-dhcp-server;租约:cat /var/lib/dhcp/dhcpd.leases
- 客户端:ip a 查看地址;ip r 查看默认路由;cat /etc/resolv.conf 查看 DNS
- 常见问题
- 端口未放行:确保 UDP 67/68 已允许(ufw/iptables)
- 地址冲突:规划 地址池 与 静态绑定,避免重叠
- 多 DHCP 冲突:关闭虚拟网络或上游路由器的 DHCP 服务
- netplan 未生效:检查 yaml 缩进 与 renderer(云镜像可能为 NetworkManager)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu dhcp如何实现自动化部署
本文地址: https://pptw.com/jishu/755102.html
