简介
本文用wsl做dhcpv6的server,qemu做client。wsl用tap0网卡跟qemu通信,依赖于之前的文章。最后再简单的展示dhcpv4的实验。
dhcpv6
wsl server
安装软件
sudo apt-get install isc-dhcp-server

dhcp的主要配置文件有两个
-
/etc/default/isc-dhcp-server:配置网卡 -
/etc/dhcp/dhcpd6.conf:配置dhcpv6池
修改/etc/default/isc-dhcp-server文件,指定网卡为tap0

修改/etc/dhcp/dhcpd6.conf 文件配置dhcpv6池,在文件末尾添加上下面这段
可以从配置文件中看到,dhcpv6不只分配了地址,还分配了域名服务器以及`dns搜索域
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet6 2001:db8:0:1::/64 {
# Range for clients
range6 2001:db8:0:1::129 2001:db8:0:1::254;
# Range for clients requesting a temporary address
range6 2001:db8:0:1::/64 temporary;
# Additional options
option dhcp6.name-servers fec0:0:0:1::1;
option dhcp6.domain-search "domain.example";
# Prefix range for delegation to sub-routers
prefix6 2001:db8:0:100:: 2001:db8:0:f00:: /56;
# Example for a fixed host address
host specialclient {
host-identifier option dhcp6.client-id 00:01:00:01:4a:1f:ba:e3:60:b9:1f:01:23:45;
fixed-address6 2001:db8:0:1::127;
}
}

配置的文件中没有配置把自己的地址从地址池中去掉的选项,难道程序已经做好了?
主机tap0网卡设置同网段2001:db8:0:1::/64的地址
sudo ip -6 addr add 2001:db8:0:1::1/64 dev tap0

在 /var/db下添加一个空文件dhcpd6.leases,当有设备从服务器获取到ipv6地址后,可以从此文件查看到设备信息
sudo mkdir -p /var/db
sudo touch /var/db/dhcpd6.leases
cat /var/db/dhcpd6.leases

启动dhcpv6服务
sudo service isc-dhcp-server start

netstat -ua可以看到server已经运行

qemu client
qemu这边就是使用dhclient程序发送dhcp request。这边记录下还没发起请求前的域名跟地址信息。


start
qemu这边使用如下命令获取ip
dhclient -6 enp0s1
但一直没有获取到ip,通过-v选项,将详细信息打印出来
dhclient -v -6 enp0s1
发现有报错INVALID lifetimes, IAADDR discarded. Check your server configuration.

原来是valid-lifetime是600,小于preferred-lifetime ,也就是604800
回到文件/etc/dhcp/dhcpd6.conf ,原来文件开头声明了一次(default-lease-time就是valid-lifetime)

后面我们的配置把valid-lifetime改成了600,所以改不对了

所以这里我们再添加一行preferred-lifetime 100;

重启dhcp服务
sudo service isc-dhcp-server restart

qemu这边重新发起请求,从打印中可以看出一切顺利没有报错

再对比之前记录的qemu地址信息跟域名信息,已经多出了我们需要的地址跟域名服务器,域名搜索域

抓包文件已上传到这里

前四个报文就是典型的一个四步交互的过程

如果想为固定的 MAC 地址分配固定的地址,可以用 hardware ethernet 参数
编辑 /etc/dhcp/dhcpd6.conf文件,加上下面的配置
host otherclient {
hardware ethernet 52:54:00:12:34:56;
fixed-address6 2001:db8:0:1::aaaa;
}

qemu这边进行请求,可以看到分配到了我们指定的ip地址

dhcpv4
修改/etc/default/isc-dhcp-server文件,增加网卡tap0

修改/etc/dhcp/dhcpd.conf文件配置dhcp池,增加静态绑定
subnet 172.16.0.0 netmask 255.255.0.0 {
range 172.16.0.100 172.16.0.200; # 开放的地址池
option domain-name-servers ns1.internal.example.org; # NS域名服务器
option domain-name "internal.example.org"; # 域名
option routers 172.16.0.10; # 网关地址 也即wsl的tap0地址
option broadcast-address 172.16.255.255; # 广播地址
default-lease-time 600; # 默认租期,单位:秒
max-lease-time 7200; # 最大租期
host v4special {
hardware ethernet 52:54:00:12:34:56; # MAC地址
server-name "sammi wsl"; # 主机名
fixed-address 172.16.0.66; # IP地址
infinite-is-reserved on; # 保留该地址
}
}

重启服务

不过从这里看貌似没成功,后面有空再回来看这个问题
