千家信息网

dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,今天小编就为大家带来一篇dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。使用命令行方式启动
千家信息网最后更新 2025年12月03日dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装

今天小编就为大家带来一篇dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。

  1. 使用命令行方式启动,并未将启动本身封装成为一个固定的"服务"

  2. 三代树莓派的内置网卡以及笔者使用的外置网卡的名称均为wlan*,在系统启动的时候有可能造成编号的错乱

  3. udhcpd服务的配置文件里面,需要手动指定上游DNS的地址,使得调整起来并不方便

由于笔者使用的Kali系统是较新的Kali rolling,和Debian 9,Ubuntu16.04以及CentOS/RHEL 7.x一样,已经使用systemd代替了init,因此,针对第一个缺陷,笔者使用systemd将服务进行封装,方便进行管理。

systemd不仅能够管理系统服务,同时对于网络进行管理。针对第二个缺陷,笔者通过利用systemd-networkd,进行网卡设备的重命名,从而避免和内置网卡名称的混淆

针对第三个问题,udhcpd的静态指定DNS的问题,这里笔者将采用dnsmasq来代替,从而让AP客户端使用树莓派的上游DNS进行名称解析。

注:关于init以及systemd,将会在其他的博文中详细阐述,本文以实际应用为主


  • 网卡名称的修改
    在Debian whezzy版本以及CentOS/RHEL6.x当中,我们利用编写udev规则来修改网卡设备的名称,而现在我们能够利用systemd-networkd,通过编写.link文件,达到修改网卡名称的目的

我们需要查询到我们想要的硬件信息,通过如下命令:

jc@kali:~$ sudo udevadm info -a -p /sys/class/net/wlan1............ATTR{address}=="00:11:22:33:44:55"DRIVERS=="rt2800usb"............

在/etc/systemd/network目录下面创建一个.link文件,内容如下:

jc@kali:~$ sudo cat /etc/systemd/network/10-ethusb0.link[Match]MACAddress=00:11:22:33:44:55[Link]Description=USB to Ethernet AdapterName=ethusb0

之后重启开启systemd-networkd这个服务(如果已经开启了,可以忽略上述操作),并且重新挂载网卡驱动,用ip命令可以查看到,网卡名称已经改变:

jc@kali:~$ sudo systemctl enable systemd-networkd.servicejc@kali:~$ sudo systemctl start systemd-networkd.servicejc@kali:~$ modprobe -r rt2800usbjc@kali:~$ modprobe rt2800usbjc@kali:~$ sudo ip l sh | grep ethusb06: ethusb0:  mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000

之后对于hostapd的配置文件(hostapd的安装配置过程,请详见前言中提到的上一篇博文),进行修改,修改之后的内容如下:

interface=ethusb0ssid=raspberry_APhw_mode=gchannel=11macaddr_acl=0auth_algs=1ignore_broadcast_ssid=0wpa=2wpa_passphrase=PASSWORDwpa_key_mgmt=WPA-PSKwpa_pairwise=TKIPrsn_pairwise=CCMP

  • dnsmasq的安装以及配置
    下面介绍如何利用dnsmasq这个轻量级的应用来将树莓派作为DHCP服务端以及本地DNS服务器。首先简单介绍一下dnsmasq。这是一款轻量级的配置DNS代理以及DHCP和TFTP的工具,适用于小型网络,经常用于嵌入式系统,而且Openstack当中针对虚机实例的DHCP分发功能也是由dnsmasq来完成的。

首先,安装dnsmasq

jc@kali:~$ sudo apt-get dnsmasq

查询一下dnsmasq的介绍以及都安装了哪些内容:

jc@kali:~$ dpkg-query -l dnsmasqDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)||/ Name Version Architecture Description+++-======================-================-================-==================================================ii dnsmasq 2.76-5 all Small caching DNS proxy and DHCP/TFTP serverjc@kali:~$ dpkg-query -L dnsmasq/./etc/etc/default/etc/default/dnsmasq/etc/dnsmasq.conf/etc/dnsmasq.d/etc/dnsmasq.d/README/etc/init.d/etc/init.d/dnsmasq/etc/insserv.conf.d/etc/insserv.conf.d/dnsmasq/etc/resolvconf/etc/resolvconf/update.d/etc/resolvconf/update.d/dnsmasq/lib/lib/systemd/lib/systemd/system/lib/systemd/system/dnsmasq.service/usr/usr/lib/usr/lib/resolvconf/usr/lib/resolvconf/dpkg-event.d/usr/lib/resolvconf/dpkg-event.d/dnsmasq/usr/share/usr/share/dnsmasq/usr/share/dnsmasq/installed-marker/usr/share/doc/usr/share/doc/dnsmasqjc@kali:~$ sudo dpkg-query -L dnsmasq-base/./etc/etc/dbus-1/etc/dbus-1/system.d/etc/dbus-1/system.d/dnsmasq.conf/usr/usr/sbin/usr/sbin/dnsmasq/usr/share/usr/share/dnsmasq-base/usr/share/dnsmasq-base/trust-anchors.conf/usr/share/doc/usr/share/doc/dnsmasq-base/usr/share/doc/dnsmasq-base/DBus-interface.gz/usr/share/doc/dnsmasq-base/FAQ.gz/usr/share/doc/dnsmasq-base/README.Debian/usr/share/doc/dnsmasq-base/changelog.Debian.gz/usr/share/doc/dnsmasq-base/changelog.archive.gz/usr/share/doc/dnsmasq-base/changelog.gz/usr/share/doc/dnsmasq-base/copyright/usr/share/doc/dnsmasq-base/doc.html/usr/share/doc/dnsmasq-base/examples/usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example/usr/share/doc/dnsmasq-base/setup.html/usr/share/locale/usr/share/locale/de/usr/share/locale/de/LC_MESSAGES/usr/share/locale/de/LC_MESSAGES/dnsmasq.mo/usr/share/locale/es/usr/share/locale/es/LC_MESSAGES/usr/share/locale/es/LC_MESSAGES/dnsmasq.mo/usr/share/locale/fi/usr/share/locale/fi/LC_MESSAGES/usr/share/locale/fi/LC_MESSAGES/dnsmasq.mo/usr/share/locale/fr/usr/share/locale/fr/LC_MESSAGES/usr/share/locale/fr/LC_MESSAGES/dnsmasq.mo/usr/share/locale/id/usr/share/locale/id/LC_MESSAGES/usr/share/locale/id/LC_MESSAGES/dnsmasq.mo/usr/share/locale/it/usr/share/locale/it/LC_MESSAGES/usr/share/locale/it/LC_MESSAGES/dnsmasq.mo/usr/share/locale/no/usr/share/locale/no/LC_MESSAGES/usr/share/locale/no/LC_MESSAGES/dnsmasq.mo/usr/share/locale/pl/usr/share/locale/pl/LC_MESSAGES/usr/share/locale/pl/LC_MESSAGES/dnsmasq.mo/usr/share/locale/pt_BR/usr/share/locale/pt_BR/LC_MESSAGES/usr/share/locale/pt_BR/LC_MESSAGES/dnsmasq.mo/usr/share/locale/ro/usr/share/locale/ro/LC_MESSAGES/usr/share/locale/ro/LC_MESSAGES/dnsmasq.mo/usr/share/man/usr/share/man/es/usr/share/man/es/man8/usr/share/man/es/man8/dnsmasq.8.gz/usr/share/man/fr/usr/share/man/fr/man8/usr/share/man/fr/man8/dnsmasq.8.gz/usr/share/man/man8/usr/share/man/man8/dnsmasq.8.gz/var/var/lib/var/lib/misc

由上面结果可以看到,主程序为/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拨号的时候,会自动获得。

jc@kali:~$ cat /etc/dnsmasq_AP.conf#DHCPlisten-address=20.20.20.1,127.0.0.1dhcp-range=20.20.20.2,20.20.20.20,12hdhcp-option=3,20.20.20.1user=dnsmasq#DNSno-hostscache-size=500resolv-file=/etc/resolv.conf

  • service封装
    准备好上述过程之后,下面对于hostapd,dnsmasq进行统一的封装。

创建/lib/systemd/system/AP.service文件,内容如下所示。其中Unit段做描述以及服务依赖的配置;Service段做服务启动的配置,包括开启链路,配置网卡的IP地址,开启hostapd服务,以及开启dnsmasq服务;Install配置段指定该服务使用multi-user.target,对应于多用户状态。

[Unit]Description=APWants=network.targetBefore=network.targetBindsTo=sys-subsystem-net-devices-ethusb0.deviceAfter=sys-subsystem-net-devices-ethusb0.device[Service]Type=oneshotRemainAfterExit=yesExecStart=/sbin/ip link set dev ethusb0 upExecStart=/sbin/ip addr add 20.20.20.1/24 broadcast 20.20.20.255 dev ethusb0ExecStart=/usr/sbin/hostapd -B /etc/hostapd/hostapd.confExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq_AP.confExecStop=/sbin/ip addr flush dev ethusb0ExecStop=/sbin/ip link set dev ethusb0 down[Install]WantedBy=multi-user.target

通过如下命令激活该service,并设置为开机自动启动。观察ip地址,hostapd服务,dnsmasq服务是否已经启动:

jc@kali:~$ sudo systemctl enable AP.servicejc@kali:~$ sudo systemctl start AP.servicejc@kali:~$ ps -ef | grep -E ".*hostapd|.*dnsmasq" | grep -v greproot 1337 1 0 19:43 ? 00:00:12 /usr/sbin/hostapd -B /etc/hostapd/hostapd.confdnsmasq 1340 1 0 19:43 ? 00:00:00 /usr/sbin/dnsmasq -C /etc/dnsmasq_AP.confjc@kali:~$ ip a sh dev ethusb06: ethusb0:  mtu 1500 qdisc mq state UP group default qlen 1000link/ether c8:3a:35:d3:1b:4e brd ff:ff:ff:ff:ff:ffinet 20.20.20.1/24 brd 20.20.20.255 scope global ethusb0valid_lft forever preferred_lft foreverinet6 fe80::ca3a:35ff:fed3:1b4e/64 scope linkvalid_lft forever preferred_lft forever

将windows作为客户端尝试连接raspberry_AP,cygwin输出信息如下:

无线局域网适配器 无线网络连接: 连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Realtek RTL8723AE Wireless LAN 802.11n PCI-E NIC 物理地址. . . . . . . . . . . . . : FF-FF-FF-FF-FF-FF DHCP 已启用 . . . . . . . . . . . : 是 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::c011:2b50:411b:56b7%38(首选) IPv4 地址 . . . . . . . . . . . . : 20.20.20.8(首选) 子网掩码 . . . . . . . . . . . . : 255.255.255.0 获得租约的时间 . . . . . . . . . : 2017年5月14日 19:46:52 租约过期的时间 . . . . . . . . . : 2017年5月15日 7:46:52 默认网关. . . . . . . . . . . . . : 20.20.20.1 DHCP 服务器 . . . . . . . . . . . : 20.20.20.1 DHCPv6 IAID . . . . . . . . . . . : 810821406 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-1C-58-D9-FD-44-8A-5B-ED-33-CF DNS 服务器 . . . . . . . . . . . : 20.20.20.1 TCPIP 上的 NetBIOS . . . . . . . : 已启用

尝试ping一下伟大的百度:

[jiangche00.jiangche00-PC]  ping www.baidu.com 正在 Ping www.a.shifen.com [111.206.223.206] 具有 32 字节的数据: 来自 111.206.223.206 的回复: 字节=32 时间=7ms TTL=56 来自 111.206.223.206 的回复: 字节=32 时间=13ms TTL=56 来自 111.206.223.206 的回复: 字节=32 时间=12ms TTL=56 来自 111.206.223.206 的回复: 字节=32 时间=9ms TTL=56 111.206.223.206 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 7ms,最长 = 13ms,平均 = 10ms

以上就是dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装的详细内容了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注行业资讯!

服务 配置 文件 网卡 名称 封装 时间 内容 地址 字节 服务器 树莓 笔者 命令 客户 客户端 系统 功能 信息 网络 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库面试100题 无法接到服务器 服务器监控软件 安全的 数据库名和数据库用户名 服务器影响无盘系统的输入吗 黄浦区特定网络技术开发哪里好 广西区公安厅网络安全总队总队长 深圳软件开发工程师平均工资 多媒体与网络技术考试题 哪个平台生产裸金属服务器好 软件开发费如何写记账凭证 四川软件开发张喜来 聊天室系统软件开发 网络安全法从什么时候实施的 上海局部点胶软件开发 电信网络安全十三不准 余姚机械刀片服务器不二之选 把网络安全的故事讲给孩子听 饭卡数据库系统优越性 应用数学 网络安全 泰州应用软件开发的价钱 pg数据库查询超时时间 网络安全法的三要素是什么 移动互联网年度解读七麦科技 方舟pc版怎么开私人服务器 我的世界自由创建的服务器 成为一个网络安全工程师 哪个服务器免费好用 网络安全问题桌面 济南嵌入式软件开发团队
0