내 작업을 위해서는 로컬 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는 어떤 인터페이스에 바인딩할지 알 방법이 없기 때문입니다.
또한 모든 테스트 인터페이스를 브리지에 추가하여 함께 "연결"해야 합니다.