Ինտերնետում հսկայական տեղեկատվություն կա Raspberry-ի մեկ տախտակով ԱՀ-ի հիման վրա Wi-Fi մուտքի կետեր ստեղծելու վերաբերյալ: Որպես կանոն, դա նշանակում է օգտագործել Raspbian օպերացիոն համակարգը, որը պատկանում է Raspberry-ին:
Լինելով RPM-ի վրա հիմնված համակարգերի հետևորդ՝ ես չէի կարող անցնել այս փոքրիկ հրաշքի կողքով և չփորձել դրա վրա իմ սիրելի CentOS-ը:
Հոդվածում տրված են հրահանգներ Raspberry Pi 5 Model B+-ից 3 ԳՀց/AC Wi-Fi երթուղիչ պատրաստելու համար՝ հիմնված CentOS օպերացիոն համակարգի վրա: Կլինեն մի քանի ստանդարտ, բայց քիչ հայտնի հնարքներ, իսկ որպես բոնուս՝ Raspberry-ին լրացուցիչ Wi-Fi սարքավորում միացնելու համար նկարչություն, որը թույլ կտա նրան միաժամանակ աշխատել մի քանի ռեժիմով (2,4+5 ԳՀց):
(անվճար հասանելի պատկերների խառնուրդ)
Անմիջապես նշենք, որ տիեզերական որոշ արագություններ չեն աշխատի։ Ես իմ Raspberry-ից օդով սեղմում եմ առավելագույնը 100 Մբիթ/վրկ արագություն, և դա ծածկում է իմ ինտերնետ մատակարարի արագությունը: Ինչի՞ն է պետք այդքան դանդաղ AC, եթե տեսականորեն նույնիսկ N-ով կարող ես կես գիգաբիթ ստանալ: Եթե դուք ինքներդ ձեզ տվել եք այս հարցը, ապա գնացեք խանութ՝ ութ արտաքին ալեհավաքով իսկական երթուղիչ գնելու համար:
0. Այն, ինչ ձեզ հարկավոր կլինի
- Իրականում, «ազնվամորու արտադրանքը» ինքնին տրամաչափի է՝ Pi 3 Model B+ (5 ԳՀց բաղձալի արագություններին և ալիքներին հասնելու համար);
- Լավ microSD >= 4 ԳԲ;
- Workstation Linux-ով և microSD ընթերցողով/գրողով;
- Linux-ում բավարար հմտությունների առկայություն, հոդվածը վերապատրաստված Geek-ի համար է.
- Լարային ցանցի (eth0) միացում Raspberry-ի և Linux-ի միջև, DHCP սերվերի գործարկում տեղական ցանցում և ինտերնետ հասանելիություն երկու սարքերից:
Մի փոքրիկ մեկնաբանություն վերջին կետի վերաբերյալ. «Ո՞րն է առաջինը եկել՝ ձուն, թե՞...», ինչպե՞ս պատրաստել Wi-Fi երթուղիչ ինտերնետ հասանելիության որևէ սարքավորման բացակայության դեպքում: Եկեք թողնենք այս զվարճալի վարժությունը հոդվածի շրջանակներից դուրս և պարզապես ենթադրենք, որ Raspberry-ն միացված է տեղական ցանցին մետաղալարով և հասանելի է ինտերնետին: Այս դեպքում մեզ լրացուցիչ հեռուստացույց և մանիպուլյատոր պետք չի լինի «ազնվամորու» տեղադրման համար։
1. Տեղադրեք CentOS-ը
Այս հոդվածը գրելու պահին սարքի վրա CentOS-ի գործող տարբերակը 32-բիթանոց է: Համաշխարհային ցանցում ինչ-որ տեղ ես հանդիպեցի կարծիքների, որ նման ՕՀ-ների կատարումը 64-բիթանոց ARM ճարտարապետության վրա կրճատվել է մինչև 20%: Այս պահը կթողնեմ առանց մեկնաբանության։
Linux-ում ներբեռնեք նվազագույն պատկերը միջուկով:- RaspberryPI-«և գրեք այն microSD-ում.
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Նախքան պատկերն օգտագործելը, մենք դրանից կհեռացնենք SWAP միջնորմը, կընդլայնենք արմատը մինչև ողջ հասանելի ծավալը և կազատվենք SELinux-ից։ Ալգորիթմը պարզ է՝ Linux-ում պատճենեք արմատը, ջնջեք բոլոր բաժինները microSD-ից, բացի առաջինից (/boot), ստեղծեք նոր արմատ և վերադարձրեք դրա բովանդակությունը պատճենից։
Պահանջվող գործողությունների օրինակ (խիստ կոնսոլի ելք)
# mount /dev/mmcblk0p3 /mnt
# cd /mnt
# tar cfz ~/pi.tgz . --no-selinux
# cd
# umount /mnt
# parted /dev/mmcblk0
(parted) unit s
(parted) print free
Model: SD SC16G (sd/mmc)
Disk /dev/mmcblk0: 31116288s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 1370111s 1368064s primary fat32 boot, lba
2 1370112s 2369535s 999424s primary linux-swap(v1)
3 2369536s 5298175s 2928640s primary ext4
5298176s 31116287s 25818112s Free Space
(parted) rm 3
(parted) rm 2
(parted) print free
Model: SD SC16G (sd/mmc)
Disk /dev/mmcblk0: 31116288s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 1370111s 1368064s primary fat32 boot, lba
1370112s 31116287s 29746176s Free Space
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 1370112s
End? 31116287s
(parted) set
Partition number? 2
Flag to Invert? lba
New state? on/[off]? off
(parted) print free
Model: SD SC16G (sd/mmc)
Disk /dev/mmcblk0: 31116288s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 1370111s 1368064s primary fat32 boot, lba
2 1370112s 31116287s 29746176s primary ext4
(parted) quit
# mkfs.ext4 /dev/mmcblk0p2
mke2fs 1.44.6 (5-Mar-2019)
/dev/mmcblk0p2 contains a swap file system labelled '_swap'
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 3718272 4k blocks and 930240 inodes
Filesystem UUID: 6a1a0694-8196-4724-a58d-edde1f189b31
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
# mount /dev/mmcblk0p2 /mnt
# tar xfz ~/pi.tgz -C /mnt --no-selinux
Արմատային միջնորմի պարունակությունը բացելուց հետո ժամանակն է որոշ փոփոխություններ մտցնել դրա մեջ:
Անջատել SELinux-ը /mnt/etc/selinux/config:
SELINUX=disabled
Խմբագրում /mnt/etc/fstab, դրանում թողնելով միայն երկու գրառում միջնորմների մասին՝ boot (/boot, no change) և root (մենք փոխում ենք UUID արժեքը, որը կարելի է պարզել՝ ուսումնասիրելով Linux-ի blkid հրամանի ելքը).
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
Ի վերջո, մենք փոխում ենք միջուկի բեռնման պարամետրերը. մենք նշում ենք արմատային բաժանման նոր տեղ, անջատում ենք վրիպազերծման տեղեկատվության ելքը և (ըստ ցանկության) արգելում ենք միջուկին IPv6 հասցեներ հատկացնել ցանցային ինտերֆեյսներում.
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Ահա բովանդակությունը /mnt/cmdline.txt հետևյալ ձևով (մեկ տող առանց գծիկների).
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Կատարված:
# cd
# umount /mnt
# sync
Մենք վերադասավորում ենք microSD-ը «ազնվամորու» մեջ, գործարկում ենք այն և ստանում ցանցի մուտք դեպի այն ssh-ի միջոցով (root/centos):
2. CentOS-ի կարգավորում
Առաջին երեք անսասան շարժումները. passwd, yum -y թարմացում, reboot.
Մենք տալիս ենք ցանցի կառավարում ցանցային:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Ստեղծեք ֆայլ (դիրեկտորիաների հետ միասին) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Մենք վերագործարկում ենք «ազնվամորու» և նորից ցանցային մուտք ենք ստանում ssh-ի միջոցով (IP հասցեն կարող է փոխվել): Ուշադրություն դարձրեք, թե ինչ է օգտագործվում /etc/resolv.conf, ավելի վաղ ստեղծված Network Manager-ի կողմից: Հետևաբար, լուծման հետ կապված խնդիրների դեպքում խմբագրեք դրա բովանդակությունը: Օգտագործեք համակարգային լուծված մենք չենք անի:
Մենք հեռացնում ենք «ավելորդը», վերանորոգում և արագացնում ենք ՕՀ-ի բեռնումը.
# systemctl set-default multi-user.target
# yum remove GeoIP Network* aic* alsa* cloud-utils-growpart
cronie* dhc* firewal* initscripts iwl* kexec* logrotate
postfix rsyslog selinux-pol* teamd wpa_supplicant
Ում է պետք cron իսկ ով չի մարսում ներկառուցվածը
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Անջատել IPv6-ի օգտագործումը հիմնական ծառայությունների կողմից (անհրաժեշտության դեպքում)/ etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Կարևոր է «ազնվամորու» ժամանակի համապատասխանությունը։ Քանի որ արկղից դուրս չկա ապարատային հնարավորություն՝ ժամացույցի ներկայիս վիճակը վերագործարկվելիս պահպանելու համար, անհրաժեշտ է համաժամացում: Դրա համար շատ լավ և արագ դևոն է քրոնիկ - արդեն տեղադրված է և ավտոմատ կերպով սկսվում է: Դուք կարող եք փոխել NTP սերվերները մոտակա սերվերներին:
/etc/chrony.conf:
server 0.ru.pool.ntp.org iburst
server 1.ru.pool.ntp.org iburst
server 2.ru.pool.ntp.org iburst
server 3.ru.pool.ntp.org iburst
Ժամային գոտին սահմանելու համար մենք կօգտագործենք հնարք. Քանի որ մեր նպատակն է ստեղծել 5 ԳՀց հաճախականություններով աշխատող Wi-Fi երթուղիչ, մենք նախապես պատրաստվելու ենք անակնկալների կարգավորիչ:
# yum info crda
Համառոտ. 802.11 անլար ցանցի կանոնակարգային համապատասխանության դեյմոն
Այս չար դիզայնը, որը հիմնված է նաև ժամային գոտու վրա, «արգելում» է (Ռուսաստանում) 5 ԳՀց հաճախականությունների և «բարձր» թվերով ալիքների օգտագործումը։ Հնարքն այն է, որ սահմանեք ժամային գոտի՝ առանց մայրցամաքների/քաղաքների անունների օգտագործման, այսինքն՝ փոխարենը.
# timedatectl set-timezone Europe/Moscow
Մենք սեղմում ենք.
# timedatectl set-timezone Etc/GMT-3
Եվ համակարգի սանրվածքի վերջին շոշափումները.
# hostnamectl set-hostname router
/root/.bash_profile:
. . .
# User specific environment and startup programs
export PROMPT_COMMAND="vcgencmd measure_temp"
export LANG=en_US.UTF-8
export PATH=$PATH:$HOME/bin
3. CentOS հավելումներ
Այն ամենը, ինչ ասվեց վերևում, կարելի է համարել Raspberry Pi-ում «վանիլային» CentOS-ի տեղադրման ամբողջական հրահանգներ: Դուք պետք է հայտնվեք համակարգչի հետ, որը (վերա)բեռնում է 10 վայրկյանից պակաս ժամանակում, օգտագործում է 15 Մեգաբայթից պակաս RAM և 1.5 Գիգաբայթ microSD (իրականում 1 Գիգաբայթից պակաս՝ թերի/բեռնման պատճառով, բայց եկեք անկեղծ լինենք):
Այս համակարգում Wi-Fi մուտքի կետի ծրագրակազմ տեղադրելու համար ձեզ հարկավոր է մի փոքր ընդլայնել ստանդարտ CentOS բաշխման հնարավորությունները: Նախ, եկեք թարմացնենք ներկառուցված Wi-Fi ադապտերի դրայվերը (որոնվածը): Ծրագրի գլխավոր էջում ասվում է.
Wifi Raspberry 3B-ի և 3B+-ի վրա
Raspberry PI 3B/3B+ որոնվածը չի թույլատրվում տարածել CentOS Project-ի կողմից: Կարող եք օգտագործել հետևյալ հոդվածները՝ խնդիրը հասկանալու, որոնվածը ստանալու և wifi-ը կարգավորելու համար:
Այն, ինչ արգելված է CentOS նախագծի համար, մեզ համար արգելված չէ անձնական օգտագործման համար: Մենք փոխարինում ենք բաշխման Wi-Fi որոնվածը CentOS-ում Broadcom-ի մշակողների համապատասխանով (այդ նույն ատելի երկուական բլբերը...): Սա, մասնավորապես, թույլ կտա մուտքի կետի ռեժիմում օգտագործել AC-ը:
Wi-Fi որոնվածի արդիականացումՊարզեք սարքի մոդելը և որոնվածի ընթացիկ տարբերակը.
# journalctl | grep $(basename $(readlink /sys/class/net/wlan0/device/driver))
Jan 01 04:00:03 router kernel: brcmfmac: F1 signature read @0x18000000=0x15264345
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdio.bin for chip 0x004345(17221) rev 0x000006
Jan 01 04:00:03 router kernel: usbcore: registered new interface driver brcmfmac
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Mar 1 2015 07:29:38 version 7.45.18 (r538002) FWID 01-6a2c8ad4
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 7.14.8 Compiler: 1.24.9 ClmImport: 1.24.9 Creation: 2014-09-02 03:05:33 Inc Data: 7.17.1 Inc Compiler: 1.26.11 Inc ClmImport: 1.26.11 Creation: 2015-03-01 07:22:34
Մենք տեսնում ենք, որ որոնվածի տարբերակը 7.45.18 է՝ 01.03.2015/XNUMX/XNUMX, և հիշեք հետևյալ թվերի հավաքածուն. 43455 (brcmfmac43455-sdio.bin):
# wget https://downloads.raspberrypi.org/raspbian_lite_latest
# unzip -p raspbian_lite_latest > raspbian.img
# fdisk -l raspbian.img
Disk raspbian.img: 2 GiB, 2197815296 bytes, 4292608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x17869b7d
Device Boot Start End Sectors Size Id Type
raspbian.img1 8192 532480 524289 256M c W95 FAT32 (LBA)
raspbian.img2 540672 4292607 3751936 1.8G 83 Linux
# mount -t ext4 -o loop,offset=$((540672 * 512)) raspbian.img /mnt
# cp -fv /mnt/lib/firmware/brcm/*43455* ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.bin' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.txt' -> ...
# umount /mnt
Ստացված Wi-Fi ադապտերների որոնվածի ֆայլերը պետք է պատճենվեն և փոխարինվեն «ազնվամորու» գրացուցակում: /usr/lib/որոնվածը/brcm/
Մենք վերաբեռնում ենք ապագա երթուղիչը և գոհունակ ժպտում.
# journalctl | grep $(basename $(readlink /sys/class/net/wlan0/device/driver))
Jan 01 04:00:03 router kernel: brcmfmac: F1 signature read @0x18000000=0x15264345
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdio.bin for chip 0x004345(17221) rev 0x000006
Jan 01 04:00:03 router kernel: usbcore: registered new interface driver brcmfmac
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Feb 27 2018 03:15:32 version 7.45.154 (r684107 CY) FWID 01-4fbe0b04
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 9.10.105 Compiler: 1.29.4 ClmImport: 1.36.3 Creation: 2018-03-09 18:56:28
Տարբերակ՝ 7.45.154 27.02.2018թ.
Եվ իհարկե EPEL:
# cat > /etc/yum.repos.d/epel.repo << EOF
[epel]
name=Epel rebuild for armhfp
baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/
enabled=1
gpgcheck=0
EOF
# yum clean all
# rm -rfv /var/cache/yum
# yum update
4. Ցանցի կազմաձևումը և առջևում առկա մարտահրավերները
Ինչպես վերևում պայմանավորվեցինք, «ազնվամորին» միացված է «լարով» տեղական ցանցին: Ենթադրենք, որ պրովայդերը ապահովում է ինտերնետ հասանելիությունը ճիշտ նույն ձևով. հանրային ցանցի հասցեն դինամիկ կերպով թողարկվում է DHCP սերվերի կողմից (գուցե MAC կապով): Այս դեպքում, ազնվամորու վերջնական կարգավորումից հետո, դուք պարզապես պետք է «միացնեք» մատակարարի մալուխը դրա մեջ և վերջ: Թույլտվություն օգտագործելով systemd-networkd - առանձին հոդվածի թեմա և այստեղ չի քննարկվում:
Raspberry-ի Wi-Fi ինտերֆեյսը (ներ)ը տեղական ցանց է, իսկ ներկառուցված Ethernet ադապտեր (eth0) արտաքին է: Ստատիկ համարակալենք լոկալ ցանցը, օրինակ՝ 192.168.0.0/24։ Raspberry հասցե՝ 192.168.0.1: DHCP սերվերը կգործի արտաքին ցանցում (Ինտերնետ):
Զուգահեռ քաոս (լիրիկական շեղում)Lennart Pottering-ը կազմել է իր ծրագիրը systemd Շատ լավ. Սա systemd այնքան արագ է մեկնարկում այլ ծրագրեր, որ նրանք, չհասցնելով ուշքի գալ մրցավարի սուլիչի հարվածից, սայթաքում են և ընկնում հենց մեկնարկում՝ անգամ չսկսելով իրենց արգելքի ընթացքը:
Բայց եթե լուրջ, ապա համակարգված ՕՀ-ի սկզբում գործարկված գործընթացների ագրեսիվ զուգահեռացումը մի տեսակ «էշի կամուրջ» է փորձառու հաջորդական LSB մասնագետների համար: Բարեբախտաբար, այս «զուգահեռ քաոսին» կարգի բերելը պարզ է, թեև ոչ միշտ ակնհայտ։
Մենք ստեղծում ենք երկու վիրտուալ կամուրջ ինտերֆեյս՝ հաստատուն անուններով. LAN и wan. Մենք «կկապենք» Wi-Fi ադապտեր(ներ)ը առաջինին, իսկ eth0 «ազնվամորուը»՝ երկրորդին:
/etc/systemd/network/lan.netdev:
[NetDev]
Name=lan
Kind=bridge
/etc/systemd/network/lan.network:
[Match]
Name=lan
[Network]
Address=192.168.0.1/24
IPForward=yes
/etc/systemd/network/wan.netdev:
[NetDev]
Name=wan
Kind=bridge
#MACAddress=xx:xx:xx:xx:xx:xx
/etc/systemd/network/wan.network:
[Match]
Name=wan
[Network]
DHCP=ipv4
IPForward=yes
IPForward=այո վերացնում է sysctl-ի միջոցով միջուկին ակնարկելու անհրաժեշտությունը՝ երթուղավորումը միացնելու համար:
MACA հասցե= Եկեք չմեկնաբանենք և անհրաժեշտության դեպքում փոխենք:
Նախ մենք «միացնում ենք» eth0-ը: Մենք հիշում ենք «միօրինակության խնդիրը» և օգտագործում ենք միայն այս ինտերֆեյսի MAC հասցեն, որը կարելի է պարզել, օրինակ, այսպես.
# cat /sys/class/net/eth0/address
Մենք ստեղծում ենք /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Մենք ջնջում ենք նախորդ կազմաձևման ֆայլը eth0, վերագործարկում ենք Raspberry-ն և ստանում ցանցի մուտք դեպի այն (IP հասցեն, ամենայն հավանականությամբ, կփոխվի).
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Wi-Fi մուտքի կետեր ստեղծելու համար ոչինչ չի գերազանցում մի քանի քաղցրավենիք դնսմասք + hostapd դեռ չեն հասկացել: Իմ կարծիքով.
Եթե որևէ մեկը մոռանա, ուրեմն...
Սկսենք dnsmasq-ից.
# yum install dnsmasq
Կաղապար /etc/resolv.conf:
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 77.88.8.8
nameserver 77.88.8.1
domain router.local
search router.local
խմբագրեք այն ձեր ցանկությամբ:
մինիմալիստական /etc/dnsmasq.conf:
domain-needed
bogus-priv
interface=lan
bind-dynamic
expand-hosts
domain=#
dhcp-range=192.168.0.100,192.168.0.199,255.255.255.0,24h
conf-dir=/etc/dnsmasq.d
Այստեղ «կախարդանքը» պարամետրի մեջ է կապել-դինամիկ, որն ասում է dnsmasq daemon-ին սպասել, մինչև հայտնվի համակարգում ինտերֆեյս = lan, և չուշաթափվել մեկնարկից հետո հպարտ մենակության նոպայից:
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Եվ վերջապես, կախարդական hostapd-ի կոնֆիգուրացիաները: Ես կասկած չունեմ, որ ինչ-որ մեկը կարդում է այս հոդվածը՝ հենց այս թանկագին տողերը փնտրելու համար:
Նախքան hostapd-ը տեղադրելը, դուք պետք է հաղթահարեք «միօրինակության խնդիրը»: Ներկառուցված Wi-Fi ադապտեր wlan0-ը կարող է հեշտությամբ փոխել իր անունը wlan1՝ լրացուցիչ USB Wi-Fi սարքավորում միացնելիս: Հետևաբար, մենք կֆիքսենք ինտերֆեյսի անունները հետևյալ կերպ. մենք կգտնենք եզակի անուններ (անլար) ադապտերների համար և կկապենք դրանք MAC հասցեներին:
Ներկառուցված Wi-Fi ադապտերի համար, որը դեռ wlan0 է.
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Մենք ստեղծում ենք /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Հիմա մենք դրանում վստահ կլինենք wl0 - Սա ներկառուցված Wi-Fi է: Մենք վերագործարկում ենք Raspberry-ն՝ համոզվելու համար:
Տեղադրել:
# yum install hostapd wireless-tools
Կազմաձևման ֆայլ /etc/hostapd/hostapd.conf:
ssid=rpi
wpa_passphrase=1234567890
channel=36
country_code=US
interface=wl0
bridge=lan
driver=nl80211
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
macaddr_acl=0
hw_mode=a
wmm_enabled=1
# N
ieee80211n=1
require_ht=1
ht_capab=[MAX-AMSDU-3839][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
# AC
ieee80211ac=1
require_vht=1
ieee80211d=0
ieee80211h=0
vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42
Առանց մի պահ մոռանալու
# hostapd /etc/hostapd/hostapd.conf
hostapd-ը կսկսվի ինտերակտիվ ռեժիմով՝ հեռարձակելով իր վիճակը կոնսոլին: Եթե սխալներ չկան, ապա հաճախորդները, որոնք աջակցում են AC ռեժիմին, կկարողանան միանալ մուտքի կետին: Hostapd-ը դադարեցնելու համար՝ Ctrl-C:
Մնում է միայն միացնել hostapd-ը համակարգի գործարկման մեջ: Եթե դուք անում եք ստանդարտ բանը (systemctl միացնում է hostapd-ը), ապա հաջորդ վերագործարկումից հետո կարող եք ստանալ «արյան մեջ գլորվող» դև՝ «ախտորոշմամբ:wl0 միջերեսը չի գտնվել«. «Զուգահեռ քաոսի» արդյունքում hostapd-ը գործարկվեց ավելի արագ, քան միջուկը գտավ անլար ադապտեր:
Համացանցը լի է միջոցներով. սկսած դեյմոնը սկսելուց առաջ հարկադիր ժամանակի ընդմիջումից (մի քանի րոպե), մինչև մեկ այլ դևոն, որը վերահսկում է ինտերֆեյսի տեսքը և (վեր)գործարկում հոսթփադը: Լուծումները բավականին գործունակ են, բայց ահավոր տգեղ։ Օգնության ենք կանչում մեծին systemd իր «նպատակներով», «առաջադրանքներով» ու «կախվածություններով»։
Պատճենեք բաշխման ծառայության ֆայլը /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
և կրճատել դրա բովանդակությունը հետևյալ ձևով.
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=sys-subsystem-net-devices-wl0.device
BindsTo=sys-subsystem-net-devices-wl0.device
[Service]
Type=forking
PIDFile=/run/hostapd.pid
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B
[Install]
WantedBy=sys-subsystem-net-devices-wl0.device
Թարմացված սպասարկման ֆայլի հմայքը կայանում է նրանում, որ hostapd-ը դինամիկ կապում է նոր թիրախին՝ wl0 ինտերֆեյսին: Երբ ինտերֆեյսը հայտնվում է, դեյմոնը սկսվում է, երբ անհետանում է, դադարում է: Եվ այս ամենը առցանց է՝ առանց համակարգը վերագործարկելու: Այս տեխնիկան հատկապես օգտակար կլինի USB Wi-Fi ադապտեր Raspberry-ին միացնելիս:
Այժմ դուք կարող եք.
# systemctl enable hostapd
# reboot
7. IPTABLES
«Ինչ???» © Այո, այո! Ոչ ոք systemd. Չկան նորաստեղծ կոմբայններ (ձևով firewalld), որոնք ավարտվում են նույն բանով:
Եկեք օգտագործենք լավ հինը iptables, որի ծառայությունները, մեկնարկից հետո, կբեռնեն ցանցի կանոնները միջուկ և հանգիստ կփակվեն՝ առանց ռեզիդենտ մնալու և առանց ռեսուրսներ սպառելու։ systemd-ն ունի էլեգանտ IPMasquerade=, բայց մենք դեռ հասցեների թարգմանությունը (NAT) և firewall-ը կվստահենք iptables-ին:
Տեղադրել:
# yum install iptables-services
# systemctl enable iptables ip6tables
Ես նախընտրում եմ iptables կոնֆիգուրացիան պահել որպես սցենար (օրինակ).
#!/bin/bash
#
# Disable IPv6
#
ip6tables --flush
ip6tables --delete-chain
ip6tables --policy INPUT DROP
ip6tables --policy FORWARD DROP
ip6tables --policy OUTPUT DROP
ip6tables-save > /etc/sysconfig/ip6tables
systemctl restart ip6tables
#
# Cleaning
#
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#
# Loopback, lan
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i lan -j ACCEPT
#
# Ping, Established
#
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# NAT
#
iptables -t nat -A POSTROUTING -o wan -j MASQUERADE
#
# Saving
#
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables
Մենք կատարում ենք վերը նշված սցենարը և կորցնում ենք Raspberry-ի հետ նոր լարային SSH կապեր հաստատելու հնարավորությունը: Ճիշտ է, մենք ստեղծել ենք Wi-Fi երթուղիչ, որի մուտքը «Ինտերնետի միջոցով» լռելյայն արգելված է, այժմ միայն «եթերում»: Մենք միացնում ենք մատակարարի Ethernet մալուխը և սկսում ենք ճամփորդել:
8. Բոնուս՝ +2,4 ԳՀց
Երբ ես հավաքեցի առաջին Raspberry երթուղիչը՝ օգտագործելով վերը նկարագրված գծագիրը, ես իմ տնային տնտեսությունում հայտնաբերեցի մի շարք գաջեթներ, որոնք իրենց Wi-Fi-ի դիզայնի սահմանափակումների պատճառով ընդհանրապես չէին տեսնում «ազնվամորին»: Երթուղիչի վերակազմավորումը 802.11b/g/n-ով աշխատելու համար ոչ սպորտային էր, քանի որ առավելագույն արագությունը «օդում» այս դեպքում չի գերազանցում 40 Մբիթ, և իմ սիրելի ինտերնետ պրովայդերն ինձ առաջարկում է 100 (մալուխի միջոցով):
Փաստորեն, խնդրի լուծումն արդեն հորինված է՝ երկրորդ Wi-Fi ինտերֆեյսը, որն աշխատում է 2,4 ԳՀց հաճախականությամբ, և երկրորդ մուտքի կետ։ Մոտակա կրպակում ես գնեցի ոչ թե առաջին, այլ երկրորդ USB Wi-Fi «սուլիչը», որին հանդիպեցի: Վաճառողին տանջում էին չիպսեթի, ARM Linux միջուկների հետ համատեղելիության և AP ռեժիմով աշխատելու հնարավորության մասին հարցերը (նա առաջինն էր սկսել):
Մենք կարգավորում ենք «սուլիչը» ներկառուցված Wi-Fi ադապտերի անալոգիայով:
Նախ, եկեք վերանվանենք այն wl1:
# cat /sys/class/net/wlan0/address
b0:6e:bf:xx:xx:xx
/etc/systemd/network/wl1.link:
[Match]
MACAddress=b0:6e:bf:xx:xx:xx
[Link]
Name=wl1
Նոր Wi-Fi ինտերֆեյսի կառավարումը մենք կվստահենք առանձին hostapd daemon-ին, որը կսկսվի և կդադարի կախված համակարգում խիստ սահմանված «սուլիչի» առկայությունից՝ wl1:
Կազմաձևման ֆայլ /etc/hostapd/hostapd2.conf:
ssid=rpi2
wpa_passphrase=1234567890
#channel=1
#channel=6
channel=11
interface=wl1
bridge=lan
driver=nl80211
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
macaddr_acl=0
hw_mode=g
wmm_enabled=1
# N
ieee80211n=1
require_ht=1
ht_capab=[HT40][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
Այս ֆայլի բովանդակությունը ուղղակիորեն կախված է USB Wi-Fi ադապտերի մոդելից, ուստի սովորական պատճենումը/տեղադրումը կարող է ձախողվել:
Պատճենեք բաշխման ծառայության ֆայլը /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
և կրճատել դրա բովանդակությունը հետևյալ ձևով.
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=sys-subsystem-net-devices-wl1.device
BindsTo=sys-subsystem-net-devices-wl1.device
[Service]
Type=forking
PIDFile=/run/hostapd2.pid
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd2.conf -P /run/hostapd2.pid -B
[Install]
WantedBy=sys-subsystem-net-devices-wl1.device
Մնում է միայն միացնել hostapd-ի նոր օրինակը.
# systemctl enable hostapd2
Այսքանը: Քաշեք «սուլիչը» և հենց «ազնվամորին», նայեք ձեր շուրջը գտնվող անլար ցանցերին:
Եվ վերջապես, ես ուզում եմ ձեզ զգուշացնել Raspberry-ի USB Wi-Fi ադապտորի որակի և սնուցման մասին: Միացված «տաք սուլիչը» երբեմն կարող է առաջացնել «ազնվամորու սառեցում» կարճաժամկետ էլեկտրական խնդիրների պատճառով:
Source: www.habr.com