搭建dhcp server,ip netns模拟dhcp client验证dhcp获取ip
环境
Ubuntu 22.04.3 LTS
一、搭建DHCP server
1、禁用Systemd dns解析服务
Systemd-resolved 服务用于本地应用程序的网络名称解析(与dnsmasq功能冲突,并且会造成53端口冲突)。通过运行以下命令来禁用它:
sudo systemctl stop systemd-resolved
sudo systemctl disable --now systemd-resolved
备份/etc/resolv.conf:
sudo mv /etc/resolv.conf ./resolv.conf.bac
使用以下命令将 Google DNS 服务器添加到 resolv.conf 文件:
echo "nameserver 8.8.8.8" > /etc/resolv.conf
2、安装dnsmasq
sudo apt update
sudo apt install dnsmasq
安装完毕,dnsmasq会自动启动,查看dnsmasq状态
systemctl status dnsmasq
输出:
dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-11-02 11:02:01 UTC; 15s ago
Main PID: 17726 (dnsmasq)
Tasks: 1 (limit: 2282)
Memory: 868.0K
CGroup: /system.slice/dnsmasq.service
??17726 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e>
3、添加DHCP配置
可以通过文件添加配置/etc/dnsmasq.conf(interface配置网卡需与虚拟机网卡一致),重启dnsmasq服务,查看服务状态为running。
也可以直接通过bin文件参数添加配置,本处配置如下:
ip link add link lan1 name lan1.100 type vlan id 100
ip link add link lan1.100 name lan1.100100 type vlan id 100
ip link set lan1.100 up
ip link set lan1.100100 up
ip addr add 172.16.100.1/24 dev lan1.100100
mkdir -p /var/lib/dnsmasq
mkdir -p /var/run/dnsmasq
mkdir -p /var/log/dnsmasq
/usr/sbin/dnsmasq --strict-order --bind-interfaces --port 0 --pid-file=/var/run/dnsmasq/qwvfq123.pid --conf-file= --interface lan1.100100 --listen-address 172.16.101.1 --dhcp-range 172.16.101.100,172.16.101.254,255.255.255.0 --dhcp-option=3,172.16.101.1 --dhcp-leasefile=/var/lib/dnsmasq/qwvfq123.leases --dhcp-lease-max=253 --log-facility=/var/log/dnsmasq/dnsmasq.log --dhcp-no-override
lan1也可以与dpdk绑定的物理端口通过vpp配置联通,因为dhcp是基于内核的接口协议,vpp不支持,所以需要在vpp创建tap-inject接口lan1(此处lan1可以理解为内核与vpp的通道),才能使dpdk绑定的物理接口的报文通过tap-inject的lan1接口到内核,而后dhcp server与lan1的子接口lan1.100100绑定,当然lan1.100100也需要与vpp内的接口绑定才能互通数据。这样做虽然绕了一大圈,但如果有其它组网需求就可以在vpp内解决
二、搭建DHCP client
使用另一台机器与搭建server的机器使用网线直连(因为物理交换机可能不允许两层vlan包通过),并做以下配置。注意本处网口lan1与ens4f0为网线互通。
本处使用ip netns模拟客户端,netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,目前netns在lxc容器中被用来为容器提供网络。
1、创建虚拟网络空间
ip netns add client
这样就得到了一个名为client的网络空间,虚拟网络空间除了网络是虚的以外,文件系统完全和当前系统共享,所有本地可以使用的命令都可以在虚拟网络中使用。
进入client:
ip netns exec client bash
ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
client中默认添加了一个本地回路设备。
退出:
exit
2、将主接口创建的子接口添加到netns
ip link set ens4f0.100100 netns client1
ens4f0.100100为主接口ens4f0创建的两层vlan子接口,ens4f0是与dhcp server互通的接口。
3、将接口配置为DHCP动态获取ip
建议直接使用命令
sudo dhclient ens4f0.100100
也可以通过修改/etc/network/interfaces文件,添加:
auto ens4f0.100100
iface ens4f0.100100 inet dhcp
完成后保存文件,执行命令生效:
sudo systemctl restart networking.service
然后client可以通过dhcp-server获取到dhcp地址。