您好,登錄后才能下訂單哦!
今天小編就為大家帶來一篇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:~$ 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 Adapter Name=ethusb0
之后重啟開啟systemd-networkd這個服務(如果已經開啟了,可以忽略上述操作),并且重新掛載網卡驅動,用ip命令可以查看到,網卡名稱已經改變:
jc@kali:~$ sudo systemctl enable systemd-networkd.service jc@kali:~$ sudo systemctl start systemd-networkd.service jc@kali:~$ modprobe -r rt2800usb jc@kali:~$ modprobe rt2800usb jc@kali:~$ sudo ip l sh | grep ethusb0 6: ethusb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
之后對于hostapd的配置文件(hostapd的安裝配置過程,請詳見前言中提到的上一篇博文),進行修改,修改之后的內容如下:
interface=ethusb0 ssid=raspberry_AP hw_mode=g channel=11 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=PASSWORD wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_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 dnsmasq Desired=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 server jc@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/dnsmasq jc@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 #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服務是否已經啟動:
jc@kali:~$ sudo systemctl enable AP.service jc@kali:~$ sudo systemctl start AP.service jc@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 jc@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 后綴 . . . . . . . : 描述. . . . . . . . . . . . . . . : 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服務封裝的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。