標籤:ap dnsmasq 樹莓派
前言
在上一篇《Raspberry pi 設定自動撥號, 搭建無線路由環境》一文中,筆者利用hostapd和udhcpd程式,建立無線熱點,實現地址分配以及DNS伺服器的設定。本篇將基於上一篇的環境,對樹莓派AP進行改進:使用dnsmasq代替udhcpd實現DNS以及地址租約,並將AP功能封裝成為一個服務
上一篇中使用的hostapd以及udhcpd,其方式有一些缺陷:
使用命令列方式啟動,並未將啟動本身封裝成為一個固定的“服務”
三代樹莓派的內建網卡以及筆者使用的外置網卡的名稱均為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,將會在其他的博文中詳細闡述,本文以實際應用為主
我們需要查詢到我們想要的硬體資訊,通過如下命令:
[email protected]:~$ sudo udevadm info -a -p /sys/class/net/wlan1............ATTR{address}=="00:11:22:33:44:55"DRIVERS=="rt2800usb"............
在/etc/systemd/network目錄下面建立一個.link檔案,內容如下:
[email protected]:~$ 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命令可以查看到,網卡名稱已經改變:
[email protected]:~$ sudo systemctl enable systemd-networkd.service[email protected]:~$ sudo systemctl start systemd-networkd.service[email protected]:~$ modprobe -r rt2800usb[email protected]:~$ modprobe rt2800usb[email protected]:~$ sudo ip l sh | grep ethusb06: ethusb0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
[email protected]:~$ sudo apt-get dnsmasq
查詢一下dnsmasq的介紹以及都安裝了哪些內容:
[email protected]:~$ 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 server[email protected]:~$ 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[email protected]:~$ 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撥號的時候,會自動獲得。
[email protected]:~$ 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
建立/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服務是否已經啟動:
[email protected]:~$ sudo systemctl enable AP.service[email protected]:~$ sudo systemctl start AP.service[email protected]:~$ 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.conf[email protected]:~$ ip a sh dev ethusb06: ethusb0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
至此,樹莓派AP改造完畢!
本文出自 “技術成就夢想” 部落格,請務必保留此出處http://jiangche00.blog.51cto.com/4377920/1925623
Raspberry Pi AP功能改進: systemd服務封裝以及dnsmasq的使用