Vecloud 发表于 2022-3-21 16:49:58

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

今天小编就为大家带来一篇dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。
使用命令行方式启动,并未将启动本身封装成为一个固定的“服务”
三代树莓派的内置网卡以及笔者使用的外置网卡的名称均为wlan*,在系统启动的时候有可能造成编号的错乱
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:~$sudoudevadminfo-a-p/sys/class/net/wlan1............ATTR{address}=="00:11:22:33:44:55"DRIVERS=="rt2800usb"............在/etc/systemd/network目录下面创建一个.link文件,内容如下:
jc@kali:~$sudocat/etc/systemd/network/10-ethusb0.linkMACAddress=00:11:22:33:44:55Description=USBtoEthernetAdapterName=ethusb0之后重启开启systemd-networkd这个服务(如果已经开启了,可以忽略上述操作),并且重新挂载网卡驱动,用ip命令可以查看到,网卡名称已经改变:
jc@kali:~$sudosystemctlenablesystemd-networkd.servicejc@kali:~$sudosystemctlstartsystemd-networkd.servicejc@kali:~$modprobe-rrt2800usbjc@kali:~$modprobert2800usbjc@kali:~$sudoiplsh|grepethusb06:ethusb0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscmqstateUPmodeDEFAULTgroupdefaultqlen1000之后对于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=CCMPdnsmasq的安装以及配置
下面介绍如何利用dnsmasq这个轻量级的应用来将树莓派作为DHCP服务端以及本地DNS服务器。首先简单介绍一下dnsmasq。这是一款轻量级的配置DNS代理以及DHCP和TFTP的工具,适用于小型网络,经常用于嵌入式系统,而且Openstack当中针对虚机实例的DHCP分发功能也是由dnsmasq来完成的。
首先,安装dnsmasq
jc@kali:~$sudoapt-getdnsmasq查询一下dnsmasq的介绍以及都安装了哪些内容:
jc@kali:~$dpkg-query-ldnsmasqDesired=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)||/NameVersionArchitectureDescription+++-======================-================-================-==================================================iidnsmasq2.76-5allSmallcachingDNSproxyandDHCP/TFTPserverjc@kali:~$dpkg-query-Ldnsmasq/./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:~$sudodpkg-query-Ldnsmasq-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.confservice封装
准备好上述过程之后,下面对于hostapd,dnsmasq进行统一的封装。
创建/lib/systemd/system/AP.service文件,内容如下所示。其中Unit段做描述以及服务依赖的配置;Service段做服务启动的配置,包括开启链路,配置网卡的IP地址,开启hostapd服务,以及开启dnsmasq服务;Install配置段指定该服务使用multi-user.target,对应于多用户状态。
Description=APWants=network.targetBefore=network.targetBindsTo=sys-subsystem-net-devices-ethusb0.deviceAfter=sys-subsystem-net-devices-ethusb0.deviceType=oneshotRemainAfterExit=yesExecStart=/sbin/iplinksetdevethusb0upExecStart=/sbin/ipaddradd20.20.20.1/24broadcast20.20.20.255devethusb0ExecStart=/usr/sbin/hostapd-B/etc/hostapd/hostapd.confExecStart=/usr/sbin/dnsmasq-C/etc/dnsmasq_AP.confExecStop=/sbin/ipaddrflushdevethusb0ExecStop=/sbin/iplinksetdevethusb0downWantedBy=multi-user.target通过如下命令激活该service,并设置为开机自动启动。观察ip地址,hostapd服务,dnsmasq服务是否已经启动:
jc@kali:~$sudosystemctlenableAP.servicejc@kali:~$sudosystemctlstartAP.servicejc@kali:~$ps-ef|grep-E".*hostapd|.*dnsmasq"|grep-vgreproot13371019:43?00:00:12/usr/sbin/hostapd-B/etc/hostapd/hostapd.confdnsmasq13401019:43?00:00:00/usr/sbin/dnsmasq-C/etc/dnsmasq_AP.confjc@kali:~$ipashdevethusb06:ethusb0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscmqstateUPgroupdefaultqlen1000link/etherc8:3a:35:d3:1b:4ebrdff:ff:ff:ff:ff:ffinet20.20.20.1/24brd20.20.20.255scopeglobalethusb0valid_lftforeverpreferred_lftforeverinet6fe80::ca3a:35ff:fed3:1b4e/64scopelinkvalid_lftforeverpreferred_lftforever将windows作为客户端尝试连接raspberry_AP,cygwin输出信息如下:
无线局域网适配器无线网络连接:连接特定的DNS后缀.......:描述...............:RealtekRTL8723AEWirelessLAN802.11nPCI-ENIC物理地址.............:FF-FF-FF-FF-FF-FFDHCP已启用...........:是自动配置已启用..........:是本地链接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.1DHCP服务器...........:20.20.20.1DHCPv6IAID...........:810821406DHCPv6客户端DUID.......:00-01-00-01-1C-58-D9-FD-44-8A-5B-ED-33-CFDNS服务器...........:20.20.20.1TCPIP上的NetBIOS.......:已启用尝试ping一下伟大的百度:
pingwww.baidu.com正在Pingwww.a.shifen.com具有32字节的数据:来自111.206.223.206的回复:字节=32时间=7msTTL=56来自111.206.223.206的回复:字节=32时间=13msTTL=56来自111.206.223.206的回复:字节=32时间=12msTTL=56来自111.206.223.206的回复:字节=32时间=9msTTL=56111.206.223.206的Ping统计信息:数据包:已发送=4,已接收=4,丢失=0(0%丢失),往返行程的估计时间(以毫秒为单位):最短=7ms,最长=13ms,平均=10ms以上就是dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装的详细内容了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注Vecloud行业资讯!
页: [1]
查看完整版本: dnsmasq的使用以及Raspberry Pi AP功能改进systemd服务封装