由上面结果可以看到,主程序为/usr/sbin/dnsmasq,默认配置文件为/etc/dnsmasq.conf,并且在systemd下面也有dnsmasq的服务。但是在本文中,为了将dnsmasq和hostapd封装成为一个统一的新服务,因此弃用程序包中默认安装的dnsmasq服务以及默认的配置文件。编辑新的配置文件如下所示,下面的配置中,使用dhcp-options给客户端传递DNS服务器为树莓派本身20.20.20.1,而树莓派使用/etc/resolv.conf文件作为上游的DNS服务器进行名称解析,而这个/etc/resolv.conf文件在进行pon dsl-provider拨号的时候,会自动获得。
linuxidc@kali:~$ cat /etc/dnsmasq_AP.conf
#DHCP
listen-address=20.20.20.1,127.0.0.1
dhcp-range=20.20.20.2,20.20.20.20,12h
dhcp-option=3,20.20.20.1
user=dnsmasq
#DNS
no-hosts
cache-size=500
resolv-file=/etc/resolv.conf
service封装
准备好上述过程之后,下面对于hostapd,dnsmasq进行统一的封装。
创建/lib/systemd/system/AP.service文件,内容如下所示。其中Unit段做描述以及服务依赖的配置;Service段做服务启动的配置,包括开启链路,配置网卡的IP地址,开启hostapd服务,以及开启dnsmasq服务;Install配置段指定该服务使用multi-user.target,对应于多用户状态。
[Unit]
Description=AP
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-ethusb0.device
After=sys-subsystem-net-devices-ethusb0.device
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ip link set dev ethusb0 up
ExecStart=/sbin/ip addr add 20.20.20.1/24 broadcast 20.20.20.255 dev ethusb0
ExecStart=/usr/sbin/hostapd -B /etc/hostapd/hostapd.conf
ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq_AP.conf
ExecStop=/sbin/ip addr flush dev ethusb0
ExecStop=/sbin/ip link set dev ethusb0 down
[Install]
WantedBy=multi-user.target
通过如下命令激活该service,并设置为开机自动启动。观察ip地址,hostapd服务,dnsmasq服务是否已经启动:
linuxidc@kali:~$ sudo systemctl enable AP.service
linuxidc@kali:~$ sudo systemctl start AP.service
linuxidc@kali:~$ ps -ef | grep -E ".*hostapd|.*dnsmasq" | grep -v grep
root 1337 1 0 19:43 ? 00:00:12 /usr/sbin/hostapd -B /etc/hostapd/hostapd.conf
dnsmasq 1340 1 0 19:43 ? 00:00:00 /usr/sbin/dnsmasq -C /etc/dnsmasq_AP.conf
linuxidc@kali:~$ ip a sh dev ethusb0
6: ethusb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether c8:3a:35:d3:1b:4e brd ff:ff:ff:ff:ff:ff
inet 20.20.20.1/24 brd 20.20.20.255 scope global ethusb0
valid_lft forever preferred_lft forever
inet6 fe80::ca3a:35ff:fed3:1b4e/64 scope link
valid_lft forever preferred_lft forever
将windows作为客户端尝试连接raspberry_AP,cygwin输出信息如下:
无线局域网适配器 无线网络连接: 连接特定的 DNS 后缀 . . . . . . . :