对于我的任务,我需要在本地 Linux 机器中转储 dhcp 客户端-服务器交换。
- 首先,我从 ISC dhcp 源克隆并构建 dhcp 服务器和客户端 -https://github.com/isc-projects/dhcp。
- 在 Bridge 中为我的实验创建并设置 Tap 接口:
sudo ip link add test_eth0 type tap
sudo ip link add test_eth1 type tap
sudo ip link add test_eth2 type tap
sudo ifconfig test_eth0 up
sudo ifconfig test_eth1 up
sudo ifconfig test_eth2 up
sudo ifconfig test_eth0 10.1.1.7 netmask 255.255.255.0 up
sudo ip link add test_br0 type bridge
sudo ip link set dev test_eht0 master test_br0
sudo ip link set dev test_eht1 master test_br0
sudo ip link set dev test_eht2 master test_br0
sudo ip link set test_br0 up
- 启动 dhcpd 服务器
sudo ./dhcpd -d -f # start dhcp daemon in foreground mode
使用 dhcpd.conf:
...
subnet 10.1.1.0 netmask 255.255.255.0 {
range 10.1.1.3 10.1.1.254;
option routers 10.1.1.1;
}
...
- 启动指定目标接口和 dhcp 服务器的 dhclient:
sudo ./dhclient -lf ./dhclient.leases test_eth1 -s 10.1.1.0 -v
客户端输出:
...
DHCPDISCOVER on test_eht1 to 10.1.1.0 port 67 interval 3
DHCPDISCOVER on test_eht1 to 10.1.1.0 port 67 interval 6
DHCPDISCOVER on test_eht1 to 10.1.1.0 port 67 interval 11
...
我预计启动客户端后,它将检测到正在运行的服务器,这将为 test_eth1 接口提供动态地址,我可以使用 dhcpdump 转储它,但我在网络方面并不像我想象的那么好。
答案1
您需要手动为至少一个测试接口分配一个地址,DHCP 服务器将绑定到该接口,然后将地址分发给其他接口。
因为 dhcpd 无法知道要绑定到哪个接口。
您还需要将所有测试接口添加到桥接器中,以便将它们“连接”在一起。