రాస్ప్బెర్రీ పై + సెంటొస్ = Wi-Fi హాట్‌స్పాట్ (లేదా ఎరుపు టోపీతో కోరిందకాయ రూటర్)

రాస్ప్బెర్రీ సింగిల్-బోర్డ్ PC ఆధారంగా Wi-Fi యాక్సెస్ పాయింట్లను సృష్టించడంపై ఇంటర్నెట్లో భారీ మొత్తంలో సమాచారం ఉంది. నియమం ప్రకారం, రాస్ప్‌బెర్రీకి చెందిన రాస్‌బియన్ ఆపరేటింగ్ సిస్టమ్‌ను ఉపయోగించడం దీని అర్థం.

RPM-ఆధారిత సిస్టమ్‌లకు కట్టుబడి ఉన్నందున, నేను ఈ చిన్న అద్భుతాన్ని అధిగమించలేకపోయాను మరియు దానిపై నా ప్రియమైన CentOSని ప్రయత్నించలేదు.

CentOS ఆపరేటింగ్ సిస్టమ్ ఆధారంగా Raspberry Pi 5 మోడల్ B+ నుండి 3GHz/AC Wi-Fi రూటర్‌ని తయారు చేయడానికి కథనం సూచనలను అందిస్తుంది. అనేక ప్రామాణికమైన కానీ అంతగా తెలియని ఉపాయాలు మరియు బోనస్‌గా ఉంటాయి - రాస్ప్‌బెర్రీకి అదనపు Wi-Fi పరికరాలను కనెక్ట్ చేయడానికి డ్రాయింగ్, ఇది అనేక మోడ్‌లలో (2,4+5GHz) ఏకకాలంలో పనిచేయడానికి అనుమతిస్తుంది.

రాస్ప్బెర్రీ పై + సెంటొస్ = Wi-Fi హాట్‌స్పాట్ (లేదా ఎరుపు టోపీతో కోరిందకాయ రూటర్)
(ఉచితంగా లభించే చిత్రాల మిశ్రమం)

కొన్ని కాస్మిక్ వేగాలు పని చేయవని వెంటనే గమనించండి. నేను నా రాస్ప్‌బెర్రీ నుండి గరిష్టంగా 100 Mbpsని గాలిలో దూర్చాను మరియు ఇది నా ఇంటర్నెట్ ప్రొవైడర్ వేగాన్ని కవర్ చేస్తుంది. థియరీలో మీరు Nలో కూడా సగం గిగాబిట్‌ని పొందగలిగితే, మీకు ఇంత నిదానమైన AC ఎందుకు అవసరం? మీరు ఈ ప్రశ్నను మీరే అడిగినట్లయితే, ఎనిమిది బాహ్య యాంటెన్నాలతో నిజమైన రౌటర్‌ను కొనుగోలు చేయడానికి దుకాణానికి వెళ్లండి.

0. మీకు ఏమి కావాలి

  • వాస్తవానికి, “కోరిందకాయ ఉత్పత్తి” కూడా క్యాలిబర్‌ని కలిగి ఉంటుంది: Pi 3 మోడల్ B+ (అపేక్షిత 5GHz వేగం మరియు ఛానెల్‌లను సాధించడానికి);
  • మంచి మైక్రో SD >= 4GB;
  • Linux మరియు మైక్రో SD రీడర్/రైటర్‌తో వర్క్‌స్టేషన్;
  • Linuxలో తగినంత నైపుణ్యాల లభ్యత, వ్యాసం శిక్షణ పొందిన గీక్ కోసం;
  • Raspberry మరియు Linux మధ్య వైర్డు నెట్‌వర్క్ (eth0) కనెక్టివిటీ, స్థానిక నెట్‌వర్క్‌లో DHCP సర్వర్‌ని అమలు చేయడం మరియు రెండు పరికరాల నుండి ఇంటర్నెట్ యాక్సెస్.

చివరి పాయింట్‌పై చిన్న వ్యాఖ్య. "మొదట వచ్చింది, గుడ్డు లేదా..." ఇంటర్నెట్ యాక్సెస్ పరికరాలు లేనప్పుడు Wi-Fi రూటర్‌ను ఎలా తయారు చేయాలి? ఈ వినోదాత్మక వ్యాయామాన్ని కథనం యొక్క పరిధికి వెలుపల వదిలివేసి, రాస్ప్బెర్రీ స్థానిక నెట్‌వర్క్‌కి వైర్ ద్వారా కనెక్ట్ చేయబడిందని మరియు ఇంటర్నెట్‌కు ప్రాప్యతను కలిగి ఉందని ఊహిద్దాం. ఈ సందర్భంలో, "కోరిందకాయ"ని సెటప్ చేయడానికి మాకు అదనపు టీవీ మరియు మానిప్యులేటర్ అవసరం లేదు.

1. CentOSని ఇన్‌స్టాల్ చేయండి

ప్రాజెక్ట్ హోమ్ పేజీ

ఈ కథనాన్ని వ్రాసే సమయంలో, పరికరంలో CentOS యొక్క రన్నింగ్ వెర్షన్ 32-బిట్. వరల్డ్ వైడ్ వెబ్‌లో ఎక్కడో 64-బిట్ ARM ఆర్కిటెక్చర్‌లో అటువంటి OSల పనితీరు 20% వరకు తగ్గిందని నేను అభిప్రాయాలను చూశాను. నేను వ్యాఖ్య లేకుండా ఈ క్షణం వదిలివేస్తాను.

Linuxలో, కెర్నల్‌తో కనీస చిత్రాన్ని డౌన్‌లోడ్ చేయండి "-రాస్ప్బెర్రీ పై-"మరియు దానిని మైక్రో SDకి వ్రాయండి:

# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz | 
  dd of=/dev/mmcblk0 bs=4M
# sync

చిత్రాన్ని ఉపయోగించడం ప్రారంభించే ముందు, మేము దాని నుండి SWAP విభజనను తీసివేస్తాము, అందుబాటులో ఉన్న మొత్తం వాల్యూమ్‌కు రూట్‌ను విస్తరింపజేస్తాము మరియు SELinuxని వదిలించుకుంటాము. అల్గోరిథం చాలా సులభం: Linuxలో రూట్ యొక్క కాపీని తయారు చేయండి, మొదటి (/boot) మినహా మైక్రో SD నుండి అన్ని విభజనలను తొలగించండి, కొత్త రూట్‌ను సృష్టించండి మరియు కాపీ నుండి దాని కంటెంట్‌లను తిరిగి ఇవ్వండి.

అవసరమైన చర్యల ఉదాహరణ (తీవ్రమైన కన్సోల్ అవుట్‌పుట్)

# 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, దానిలో విభజనల గురించి రెండు ఎంట్రీలను మాత్రమే వదిలివేస్తాము: బూట్ (/బూట్, మార్పులు లేవు) మరియు రూట్ (మేము 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

మేము మైక్రో SDని "కోరిందకాయ"లోకి మార్చాము, దానిని ప్రారంభించాము మరియు ssh (రూట్/సెంటోస్) ద్వారా దానికి నెట్‌వర్క్ యాక్సెస్‌ను పొందుతాము.

2. CentOSని సెటప్ చేస్తోంది

మొదటి మూడు అస్థిరమైన కదలికలు: passwd, yum-y update, రీబూట్.

మేము నెట్‌వర్క్ నిర్వహణను అందిస్తాము నెట్‌వర్క్ చేయబడింది:

# 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, నెట్‌వర్క్ మేనేజర్ ద్వారా ముందుగా సృష్టించబడింది. అందువల్ల, పరిష్కారంలో సమస్యలు ఉన్నట్లయితే, దాని కంటెంట్‌లను సవరించండి. వా డు systemd- పరిష్కరించబడింది మా కు అక్కరలేదు.

మేము "అనవసరం" ను తీసివేస్తాము, OS యొక్క లోడ్ను మరమ్మత్తు చేస్తాము మరియు వేగవంతం చేస్తాము:

# 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

ఎవరికి కావాలి క్రాన్ మరియు అంతర్నిర్మితాన్ని ఎవరు జీర్ణించుకోరు systemd టైమర్‌లు, తప్పిపోయిన వాటిని స్థాపించవచ్చు. / Var / log- మరియు ద్వారా చూడండి journalctl. మీకు లాగ్ చరిత్ర అవసరమైతే (డిఫాల్ట్‌గా, సిస్టమ్ ప్రారంభమైన క్షణం నుండి మాత్రమే సమాచారం నిల్వ చేయబడుతుంది):

# 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

టైమ్ జోన్‌ని సెట్ చేయడానికి మేము ఉపయోగిస్తాము ఉపాయం. 5GHz పౌనఃపున్యాల వద్ద పనిచేసే Wi-Fi రూటర్‌ని సృష్టించడం మా లక్ష్యం కాబట్టి, మేము ముందుగానే ఆశ్చర్యకరమైనవి కోసం సిద్ధం చేస్తాము నియంత్రకం:

# yum సమాచారం crda
సారాంశం: 802.11 వైర్‌లెస్ నెట్‌వర్కింగ్ కోసం రెగ్యులేటరీ కంప్లైయన్స్ డెమోన్

ఈ దుష్ట డిజైన్, టైమ్ జోన్ ఆధారంగా కూడా 5GHz పౌనఃపున్యాలు మరియు "అధిక" సంఖ్యలతో ఛానెల్‌ల వినియోగాన్ని (రష్యాలో) "నిషేధిస్తుంది". ఉపాయం ఏమిటంటే, ఖండాలు/నగరాల పేర్లను ఉపయోగించకుండా టైమ్ జోన్‌ను సెట్ చేయడం, అంటే బదులుగా:

# 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 యాడ్-ఆన్‌లు

రాస్ప్బెర్రీ పైలో “వనిల్లా” సెంటొస్‌ను ఇన్‌స్టాల్ చేయడానికి పైన చెప్పిన ప్రతిదీ పూర్తి సూచనలను పరిగణించవచ్చు. మీరు 10 సెకన్లలోపు (రీ) బూట్ అయ్యే, 15 మెగాబైట్‌ల కంటే తక్కువ ర్యామ్ మరియు 1.5 గిగాబైట్ల మైక్రో SD (అసంపూర్ణ /బూట్ కారణంగా వాస్తవానికి 1 గిగాబైట్ కంటే తక్కువ, కానీ నిజాయితీగా ఉండండి) ఉపయోగించే PCని మీరు ముగించాలి.

ఈ సిస్టమ్‌లో Wi-Fi యాక్సెస్ పాయింట్ సాఫ్ట్‌వేర్‌ను ఇన్‌స్టాల్ చేయడానికి, మీరు ప్రామాణిక CentOS పంపిణీ సామర్థ్యాలను కొద్దిగా విస్తరించాలి. ముందుగా, అంతర్నిర్మిత Wi-Fi అడాప్టర్ యొక్క డ్రైవర్ (ఫర్మ్‌వేర్)ని అప్‌గ్రేడ్ చేద్దాం. ప్రాజెక్ట్ హోమ్ పేజీ ఇలా చెబుతోంది:

రాస్ప్బెర్రీ 3B మరియు 3B+లో Wifi

రాస్ప్‌బెర్రీ PI 3B/3B+ ఫర్మ్‌వేర్ ఫైల్‌లు CentOS ప్రాజెక్ట్ ద్వారా పంపిణీ చేయడానికి అనుమతించబడవు. మీరు సమస్యను అర్థం చేసుకోవడానికి, ఫర్మ్‌వేర్‌ని పొందడానికి మరియు wifiని సెటప్ చేయడానికి క్రింది కథనాలను ఉపయోగించవచ్చు.

CentOS ప్రాజెక్ట్ కోసం నిషేధించబడినది వ్యక్తిగత ఉపయోగం కోసం మాకు నిషేధించబడలేదు. మేము CentOSలో పంపిణీ Wi-Fi ఫర్మ్‌వేర్‌ని బ్రాడ్‌కామ్ డెవలపర్‌ల నుండి సంబంధిత దానితో భర్తీ చేస్తాము (అదే అసహ్యించుకునే బైనరీ బ్లాబ్‌లు...). ఇది ప్రత్యేకంగా, యాక్సెస్ పాయింట్ మోడ్‌లో 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).

ప్రస్తుత రాస్పియన్ చిత్రాన్ని డౌన్‌లోడ్ చేయండి. సోమరిపోతులు మైక్రో SD కి చిత్రాన్ని వ్రాసి, అక్కడ నుండి ఫర్మ్‌వేర్‌తో ఫైల్‌లను తీసుకోవచ్చు. లేదా మీరు లైనక్స్‌లో ఇమేజ్ యొక్క రూట్ విభజనను మౌంట్ చేయవచ్చు మరియు అక్కడ నుండి మీకు కావలసిన వాటిని కాపీ చేయవచ్చు:

# 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/firmware/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/XNUMX/XNUMX.

మరియు వాస్తవానికి 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 - ప్రత్యేక వ్యాసం యొక్క అంశం మరియు ఇక్కడ చర్చించబడలేదు.

రాస్ప్బెర్రీ యొక్క Wi-Fi ఇంటర్ఫేస్(లు) స్థానిక నెట్‌వర్క్ మరియు అంతర్నిర్మిత ఈథర్నెట్ అడాప్టర్ (eth0) బాహ్యమైనది. స్థానిక నెట్‌వర్క్‌ను స్థిరంగా నంబర్ చేద్దాం, ఉదాహరణకు: 192.168.0.0/24. రాస్ప్బెర్రీ చిరునామా: 192.168.0.1. DHCP సర్వర్ బాహ్య నెట్‌వర్క్ (ఇంటర్నెట్)లో పని చేస్తుంది.

నామకరణ క్రమబద్ధత సమస్య и ప్రసిద్ధ గ్వాటెమాలన్ ప్రోగ్రామర్ - systemd డిస్ట్రిబ్యూషన్‌లలో నెట్‌వర్క్ ఇంటర్‌ఫేస్‌లు మరియు సేవలను కాన్ఫిగర్ చేసే ఎవరికైనా ఎదురుచూసే రెండు సమస్యలు.

సమాంతర గందరగోళం (లిరికల్ డైగ్రెషన్)లెన్నార్ట్ పాటరింగ్ దాని స్వంత ప్రోగ్రామ్‌ను సంకలనం చేసింది systemd చాలా బాగుంది. ఈ systemd ఇతర ప్రోగ్రామ్‌లను చాలా త్వరగా ప్రారంభిస్తుంది, రిఫరీ యొక్క విజిల్ దెబ్బ నుండి కోలుకోవడానికి సమయం లేకపోవడంతో, వారి అడ్డంకి కోర్సును కూడా ప్రారంభించకుండా ప్రారంభంలో పొరపాట్లు చేసి పడిపోయారు.

కానీ తీవ్రంగా, systemd OS ప్రారంభంలో ప్రారంభించబడిన ప్రక్రియల యొక్క దూకుడు సమాంతరీకరణ అనేది అనుభవజ్ఞులైన సీక్వెన్షియల్ 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ని తొలగిస్తాము, రాస్ప్‌బెర్రీని రీబూట్ చేస్తాము మరియు దానికి నెట్‌వర్క్ యాక్సెస్‌ను పొందుతాము (IP చిరునామా ఎక్కువగా మారుతుంది):

# rm -fv /etc/systemd/network/eth0.network
# reboot

5.DNSMASQ

Wi-Fi యాక్సెస్ పాయింట్‌లను రూపొందించడం కోసం, ఏదీ ఒక మధురమైన జంటను అధిగమించదు dnsmasq + hostapd దాన్ని ఇంకా గుర్తించలేదు. నా అభిప్రాయం లో.

ఒకవేళ ఎవరైనా మరచిపోతే...hostapd - ఇది Wi-Fi ఎడాప్టర్‌లను నియంత్రించే విషయం (ముఖ్యంగా, వాటిని వర్చువల్‌కు కనెక్ట్ చేయడంలో ఇది జాగ్రత్త తీసుకుంటుంది LAN "రాస్ప్బెర్రీస్"), వైర్‌లెస్ క్లయింట్‌లను అధీకృతం చేస్తుంది మరియు నమోదు చేస్తుంది.

dnsmasq — క్లయింట్‌ల నెట్‌వర్క్ స్టాక్‌ను కాన్ఫిగర్ చేస్తుంది: 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 డెమోన్‌కి చెబుతుంది interface=lan, మరియు ప్రారంభమైన తర్వాత గర్వించదగిన ఒంటరితనం నుండి మూర్ఛపోకూడదు.

# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f

6. HOSTAPD

చివరకు, మ్యాజిక్ హోస్ట్‌టాప్డ్ కాన్ఫిగరేషన్‌లు. ఈ ఐశ్వర్యవంతమైన పంక్తుల కోసం ఎవరైనా ఈ కథనాన్ని చదువుతున్నారనడంలో నాకు సందేహం లేదు.

hostapdని ఇన్‌స్టాల్ చేసే ముందు, మీరు "ఏకరూపత సమస్యను" అధిగమించాలి. అదనపు USB Wi-Fi పరికరాలను కనెక్ట్ చేసేటప్పుడు అంతర్నిర్మిత Wi-Fi అడాప్టర్ wlan0 దాని పేరును సులభంగా wlan1గా మార్చగలదు. అందువల్ల, మేము ఈ క్రింది విధంగా ఇంటర్‌ఫేస్ పేర్లను పరిష్కరిస్తాము: మేము (వైర్‌లెస్) ఎడాప్టర్‌ల కోసం ప్రత్యేకమైన పేర్లతో ముందుకు వస్తాము మరియు వాటిని 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. దీన్ని నిర్ధారించుకోవడానికి మేము రాస్ప్‌బెర్రీని రీబూట్ చేస్తాము.

ఇన్‌స్టాల్ చేయండి:

# 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 enable 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

నవీకరించబడిన సేవా ఫైల్ యొక్క మ్యాజిక్ కొత్త లక్ష్యం - wl0 ఇంటర్‌ఫేస్‌కి hostapd యొక్క డైనమిక్ బైండింగ్‌లో ఉంది. ఇంటర్ఫేస్ కనిపించినప్పుడు, డెమోన్ ప్రారంభమవుతుంది; అది అదృశ్యమైనప్పుడు, అది ఆగిపోతుంది. మరియు ఇదంతా ఆన్‌లైన్‌లో ఉంది - సిస్టమ్‌ను రీబూట్ చేయకుండా. USB Wi-Fi అడాప్టర్‌ను రాస్ప్‌బెర్రీకి కనెక్ట్ చేసేటప్పుడు ఈ సాంకేతికత ప్రత్యేకంగా ఉపయోగపడుతుంది.

ఇప్పుడు మీరు చేయవచ్చు:

# systemctl enable hostapd
# reboot

7. ఐప్టేబుల్స్

"ఏం???" © అవును, అవును! ఏదీ లేదు systemd. కొత్త వింతైన కలయికలు లేవు (రూపంలో firewalld), ఇది అదే పనిని ముగించింది.

మంచి పాతదాన్ని వాడుకుందాం iptables, దీని సేవలు, ప్రారంభించిన తర్వాత, నెట్‌వర్క్ నియమాలను కెర్నల్‌లోకి లోడ్ చేస్తాయి మరియు నివాసంగా ఉండకుండా మరియు వనరులను వినియోగించకుండా నిశ్శబ్దంగా మూసివేయబడతాయి. systemd ఒక సొగసైనది IPMasquerade=, కానీ మేము ఇప్పటికీ చిరునామా అనువాదం (NAT) మరియు ఫైర్‌వాల్‌ను 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

మేము పై స్క్రిప్ట్‌ని అమలు చేస్తాము మరియు రాస్ప్‌బెర్రీతో కొత్త వైర్డు SSH కనెక్షన్‌లను ఏర్పాటు చేసే సామర్థ్యాన్ని కోల్పోతాము. అది నిజం, మేము Wi-Fi రూటర్‌ని తయారు చేసాము, "ఇంటర్నెట్ ద్వారా" యాక్సెస్ చేయడం డిఫాల్ట్‌గా నిషేధించబడింది - ఇప్పుడు కేవలం "ఎయిర్" మాత్రమే. మేము ప్రొవైడర్ యొక్క ఈథర్నెట్ కేబుల్‌ని కనెక్ట్ చేసి, సర్ఫింగ్ ప్రారంభిస్తాము!

8. బోనస్: +2,4GHz

నేను పైన వివరించిన డ్రాయింగ్‌ని ఉపయోగించి మొదటి రాస్‌ప్‌బెర్రీ రూటర్‌ను అసెంబుల్ చేసినప్పుడు, నా ఇంట్లో అనేక గాడ్జెట్‌లను కనుగొన్నాను, వాటి Wi-Fi డిజైన్ పరిమితుల కారణంగా, “కోరిందకాయ” అస్సలు కనిపించలేదు. 802.11b/g/nలో పని చేసేలా రూటర్‌ని రీకాన్ఫిగర్ చేయడం స్పోర్టింగ్ కాదు, ఎందుకంటే ఈ సందర్భంలో గరిష్ట వేగం “గాలిపై” 40 Mbit కంటే మించలేదు మరియు నాకు ఇష్టమైన ఇంటర్నెట్ ప్రొవైడర్ నాకు 100 (కేబుల్ ద్వారా) అందిస్తుంది.

వాస్తవానికి, సమస్యకు పరిష్కారం ఇప్పటికే కనుగొనబడింది: 2,4 GHz ఫ్రీక్వెన్సీలో పనిచేసే రెండవ Wi-Fi ఇంటర్ఫేస్ మరియు రెండవ యాక్సెస్ పాయింట్. సమీపంలోని స్టాల్‌లో నేను మొదటిది కాదు, రెండవ 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 డెమోన్‌కు అప్పగిస్తాము, ఇది సిస్టమ్‌లో ఖచ్చితంగా నిర్వచించబడిన “విజిల్” ఉనికిని బట్టి ప్రారంభమవుతుంది మరియు ఆగిపోతుంది: 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

అంతే! "విజిల్" మరియు "కోరిందకాయ" ను లాగండి, మీ చుట్టూ ఉన్న వైర్‌లెస్ నెట్‌వర్క్‌లను చూడండి.

చివరగా, USB Wi-Fi అడాప్టర్ యొక్క నాణ్యత మరియు రాస్ప్బెర్రీ యొక్క విద్యుత్ సరఫరా గురించి నేను మిమ్మల్ని హెచ్చరించాలనుకుంటున్నాను. కనెక్ట్ చేయబడిన "హాట్ విజిల్" కొన్నిసార్లు స్వల్పకాలిక విద్యుత్ సమస్యల కారణంగా "కోరిందకాయ గడ్డకట్టడానికి" కారణం కావచ్చు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి