dhcp的编译安装
解压源码:
tar zxvf dhcp-4.2.5-P1.tar.gz
cd dhcp-4.2.5-P1/
配置:
./configure --host=arm-linux ac_cv_file__dev_random=yes
修改Makefile:
cd bind
vim Makefile +55
添加配置 :
./configure BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux --disable-kqueue
tar xzf bind.tar.gz
vim bind-9.8.4-P2/lib/export/dns/Makefile.in +169
修改CC :
${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
cd ../
make
make DESTDIR=$PWD/tmp install
复制应用程序、配置文件和脚本文件到根文件系统
cp ./client/scripts/linux /mnt/rootfs/etc/dhclient-script
vim /mnt/rootfs/etc/dhclient-script
将#!/bin/bash改成#!/bin/sh
chmod +x /mnt/rootfs/etc/dhclient-script
cd ./tmp/usr/local/
cp ./bin/* /mnt/rootfs/bin/
cp ./sbin/* /mnt/rootfs/sbin/
cp ./etc/dhclient.conf.example /mnt/rootfs/etc/dhclient.conf
cp ./etc/dhcpd.conf.example /mnt/rootfs/etc/dhcpd.conf
创建进程交互文件目录:
mkdir -p /mnt/rootfs/var/db/
touch /mnt/rootfs/var/db/dhclient.leases
touch /mnt/rootfs/var/db/dhcpd.leases
树莓派上安装DHCPD
sudo apt install udhcpd
sudo vim /etc/udhcpd.conf #修改DHCP池,DNS,网关地址
sudo vim /etc/default/udhcp #将DHCPD_ENABLE="no"注释,使能UDHCPD
sudo touch /var/lib/misc/udhcpd.leases
sudo systemctl restart udhcpd.service
工具使用
在这里的实验中的热插拔,由于我使用的是sdio接口wifi,直接使用mdev.conf中设备名直接使用wlan0貌似不好使,还没有找到原因(直接将设备名改为任意字符“.*”,本来想通过echo “$MDEV”,找到模块名,但竟然没有匹配上,非常有可能是驱动没有实现的问题),最后直接将auto_wifi_xx.sh脚本命令复制到rcS文件中运行算了,有待后续找到问题。
客户端:
最简单的就是打开网卡之后,使用dhclient wlan0获得ip、网关和DNS
dhclient -d wlan0 可以得到运行的调试信息
添加热插拔功能实现:
当插入网卡的时候,先执行wpa_supplicant连接热点,启动wpa_cli检测连接完成,然后执行脚本启动dhclient
vim /etc/mdev.conf
wlan0 0:0 777 * /etc/auto_wifi_sta.sh
vim /etc/auto_wifi_sta.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
wpa_supplicant -B -c/etc/wifi_pswd.conf -iwlan0
wpa_cli -a/etc/wpa_action.sh -B
else
killall wpa_supplicant
killall wpa_cli
killall dhclient
fi
添加执行权限
chmod +x /etc/auto_wifi_sta.sh
一连接上WIFI AP, 就自动执行dhclient脚本:
vim /etc/wpa_action.sh
#!/bin/sh
IFNAME=$1
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
echo connect $IFNAME, dhclient for it > /dev/console
dhclient $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
echo disconnect $IFNAME, kill dhclient for it > /dev/console
killall dhclient
fi
添加执行权限:
chmod +x /etc/wpa_action.sh
服务端:
最简单的命令,先在/etc/dhcpd.conf中添加一个可分配的网段,然后根据这个网段设置无线网卡的ip:
subnet 192.168.88.0 netmask 255.255.255.0 {
range 192.168.88.150 192.168.88.200;
option domain-name-servers 192.168.88.1;
option routers 192.168.88.1;
}
ifconfig wlan0 192.168.88.1
dhcpd -cf /etc/dhcpd.conf wlan0
热插拔功能实现:
vim /etc/mdev.conf
wlan0 0:0 777 * /etc/auto_wifi_ap.sh
vim /etc/auto_wifi_ap.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
echo -e "Hostapd AP Starting\n"
hostapd -B /etc/hostapd.conf
ifconfig wlan0 192.168.88.1
dhcpd -cf /etc/dhcpd.conf wlan0
else
echo -e "Hostapd AP Closing.\n"
killall hostapd
killall dhcpd
fi
添加执行权限:
chmod +x /etc/auto_wifi_ap.sh