Raspberry Pi + CentOS = Wi-Fi Hotspot (կամ ազնվամորու երթուղիչ կարմիր գլխարկով)

Ինտերնետում հսկայական տեղեկատվություն կա Raspberry-ի մեկ տախտակով ԱՀ-ի հիման վրա Wi-Fi մուտքի կետեր ստեղծելու վերաբերյալ: Որպես կանոն, դա նշանակում է օգտագործել Raspbian օպերացիոն համակարգը, որը պատկանում է Raspberry-ին:

Լինելով RPM-ի վրա հիմնված համակարգերի հետևորդ՝ ես չէի կարող անցնել այս փոքրիկ հրաշքի կողքով և չփորձել դրա վրա իմ սիրելի CentOS-ը:

Հոդվածում տրված են հրահանգներ Raspberry Pi 5 Model B+-ից 3 ԳՀց/AC Wi-Fi երթուղիչ պատրաստելու համար՝ հիմնված CentOS օպերացիոն համակարգի վրա: Կլինեն մի քանի ստանդարտ, բայց քիչ հայտնի հնարքներ, իսկ որպես բոնուս՝ Raspberry-ին լրացուցիչ Wi-Fi սարքավորում միացնելու համար նկարչություն, որը թույլ կտա նրան միաժամանակ աշխատել մի քանի ռեժիմով (2,4+5 ԳՀց):

Raspberry Pi + CentOS = Wi-Fi Hotspot (կամ ազնվամորու երթուղիչ կարմիր գլխարկով)
(անվճար հասանելի պատկերների խառնուրդ)

Անմիջապես նշենք, որ տիեզերական որոշ արագություններ չեն աշխատի։ Ես իմ 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 իսկ ով չի մարսում ներկառուցվածը համակարգային ժամանակաչափեր, կարող է հաստատել այն, ինչ բացակայում է: / var / log- և նայիր լրագրող. Եթե ​​Ձեզ անհրաժեշտ է մատյանների պատմություն (ըստ լռելյայն, տեղեկատվությունը պահվում է միայն համակարգի գործարկման պահից).

# 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):

Ներբեռնեք ընթացիկ Raspbian պատկերը. Ծույլերը կարող են պատկերը գրել microSD-ում և այնտեղից վերցնել որոնվածով ֆայլերը։ Կամ կարող եք տեղադրել պատկերի արմատային բաժինը Linux-ում և պատճենել այն, ինչ ձեզ հարկավոր է այնտեղից.

# 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 սերվերը կգործի արտաքին ցանցում (Ինտերնետ):

Անվանման հետևողականության խնդիր и հայտնի գվատեմալացի ծրագրավորող - երկու անախորժություններ, որոնք սպասում են բոլորին, ովքեր կարգավորում են ցանցային միջերեսները և ծառայությունները systemd բաշխումներում:

Զուգահեռ քաոս (լիրիկական շեղում)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 դեռ չեն հասկացել: Իմ կարծիքով.

Եթե ​​որևէ մեկը մոռանա, ուրեմն...hostapd - սա այն բանն է, որը վերահսկում է Wi-Fi ադապտերները (մասնավորապես, այն կզբաղվի վիրտուալ ցանցին միացնելու համար LAN «ազնվամորի»), թույլատրում և գրանցում է անլար հաճախորդներին:

դնսմասք — կարգավորում է հաճախորդների ցանցային փաթեթը. թողարկում է IP հասցեներ, DNS սերվերներ, լռելյայն դարպասներ և նմանատիպ հաճույքներ:

Սկսենք 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

Добавить комментарий