Raspberry Pi + CentOS = Wi-Fi tÄ«klājs (vai aveņu marÅ”rutētājs ar sarkanu cepuri)

Internetā ir milzÄ«gs daudzums informācijas par Wi-Fi piekļuves punktu izveidi, pamatojoties uz Raspberry viena plates datoru. Parasti tas nozÄ«mē Raspberry operētājsistēmas izmantoÅ”anu.

Tā kā es esmu uz RPM balstÄ«tu sistēmu piekritējs, es nevarēju nepaiet garām Å”im mazajam brÄ«numam un neizmēģināt tajā savu mīļo CentOS.

Rakstā sniegti norādÄ«jumi par 5 GHz/AC Wi-Fi marÅ”rutētāja izveidi no Raspberry Pi 3 Model B+, pamatojoties uz CentOS operētājsistēmu. BÅ«s vairāki standarta, bet maz zināmi triki un kā bonuss - zÄ«mējums papildu Wi-Fi tehnikas pieslēgÅ”anai Raspberry, ļaujot tai vienlaicÄ«gi darboties vairākos režīmos (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi tÄ«klājs (vai aveņu marÅ”rutētājs ar sarkanu cepuri)
(brīvi pieejamu attēlu sajaukums)

TÅ«lÄ«t atzÄ«mēsim, ka daži kosmiskie ātrumi nedarbosies. Es no sava Raspberry pa gaisu izspiežu maksimāli 100 Mb/s, un tas aptver mana interneta pakalpojumu sniedzēja ātrumu. Kāpēc vajag tik gausu maiņstrāvu, ja teorētiski var dabÅ«t pusgigabitu pat uz N? Ja esi sev uzdevis Å”o jautājumu, tad dodies uz veikalu, lai iegādātos Ä«stu rÅ«teri ar astoņām ārējām antenām.

0. Kas jums būs nepiecieŔams

  • PatiesÄ«bā pats ā€œaveņu produktsā€ ir tāda kalibra: Pi 3 Model B+ (lai sasniegtu kāroto 5GHz ātrumu un kanālus);
  • Labs microSD >= 4GB;
  • Darbstacija ar Linux un microSD lasÄ«tāju/rakstÄ«tāju;
  • Pietiekamu prasmju pieejamÄ«ba operētājsistēmā Linux, raksts ir paredzēts apmācÄ«tam Geek;
  • Vadu tÄ«kla (eth0) savienojums starp Raspberry un Linux, darbojas DHCP serveris lokālajā tÄ«klā un piekļuve internetam no abām ierÄ«cēm.

Neliels komentārs par pēdējo punktu. ā€œKas bija pirmais, ola vai...ā€ kā izveidot Wi-Fi marÅ”rutētāju, ja nav interneta piekļuves aprÄ«kojuma? Atstāsim Å”o izklaidējoÅ”o uzdevumu ārpus raksta darbÄ«bas jomas un vienkārÅ”i pieņemsim, ka Raspberry ir savienots ar vietējo tÄ«klu, izmantojot vadu, un tam ir piekļuve internetam. Å ajā gadÄ«jumā mums nebÅ«s nepiecieÅ”ams papildu televizors un manipulators, lai iestatÄ«tu ā€œaveņuā€.

1. Instalējiet CentOS

Projekta mājas lapa

Rakstot Å”o rakstu, CentOS versija ierÄ«cē ir 32 bitu versija. Kaut kur globālajā tÄ«meklÄ« saskāros ar viedokļiem, ka Ŕādu OS veiktspēja 64 bitu ARM arhitektÅ«rā ir samazināta pat par 20%. Å o brÄ«di atstāŔu bez komentāriem.

Operētājsistēmā Linux lejupielādējiet minimālo attēlu ar kodolu "-RaspberryPI-un ierakstiet to microSD:

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

Pirms attēla izmantoÅ”anas mēs noņemsim no tā SWAP nodalÄ«jumu, paplaÅ”ināsim sakni lÄ«dz visam pieejamajam apjomam un atbrÄ«vosimies no SELinux. Algoritms ir vienkārÅ”s: izveidojiet saknes kopiju operētājsistēmā Linux, izdzēsiet visus nodalÄ«jumus no microSD, izņemot pirmo (/boot), izveidojiet jaunu sakni un atgrieziet tās saturu no kopijas.

NepiecieÅ”amo darbÄ«bu piemērs (smaga konsoles izvade)

# 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

Pēc saknes nodalÄ«juma satura izpakoÅ”anas ir pienācis laiks tajā veikt dažas izmaiņas.

Atspējot SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

RediģēŔana /mnt/etc/fstab, atstājot tajā tikai divus ierakstus par nodalÄ«jumiem: boot (/boot, bez izmaiņām) un root (mēs mainām UUID vērtÄ«bu, ko var uzzināt, izpētot komandas blkid izvadi operētājsistēmā Linux):

UUID=6a1a0694-8196-4724-a58d-edde1f189b31  /     ext4    defaults,noatime 0 0
UUID=6938-F4F2                             /boot vfat    defaults,noatime 0 0

Visbeidzot, mēs mainām kodola sāknÄ“Å”anas parametrus: mēs norādām jaunu vietu saknes nodalÄ«jumam, atspējojam atkļūdoÅ”anas informācijas izvadi un (pēc izvēles) aizliedzam kodolam pieŔķirt IPv6 adreses tÄ«kla saskarnēs:

# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt

Å eit ir saturs /mnt/cmdline.txt uz Ŕādu formu (viena rinda bez defisēm):

root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1

Gatavs:

# cd
# umount /mnt
# sync

Mēs pārkārtojam microSD uz ā€œaveņuā€, palaižam to un iegÅ«stam piekļuvi tÄ«klam, izmantojot ssh (root/centos).

2. CentOS iestatīŔana

Pirmās trÄ«s nesatricināmās kustÄ«bas: passwd, yum -y atjauninājums, atsāknÄ“Å”ana.

Mēs dāvinām tīkla pārvaldību tīklā:

# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off

Izveidojiet failu (kopā ar direktorijiem) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Mēs pārstartējam ā€œaveņuā€ un atkal iegÅ«stam piekļuvi tÄ«klam, izmantojot ssh (IP adrese var mainÄ«ties). Pievērsiet uzmanÄ«bu tam, kas tiek izmantots / Etc / resolv.conf, ko agrāk izveidoja tÄ«kla pārvaldnieks. Tāpēc, ja rodas problēmas ar risinājumu, rediģējiet tā saturu. Izmantot systemd atrisināts mēs to nedarÄ«sim.

Mēs noņemam ā€œnevajadzÄ«goā€, salabojam un paātrinām OS ielādi:

# 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

Kam vajag cron un kurÅ” nesagremo iebÅ«vēto sistēmiskie taimeri, var noteikt, kas trÅ«kst. / var / log- un paskaties cauri journalctl. Ja nepiecieÅ”ama žurnāla vēsture (pēc noklusējuma informācija tiek saglabāta tikai no sistēmas palaiÅ”anas brīža):

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf

Atspējot IPv6 izmantoÅ”anu pamatpakalpojumos (ja nepiecieÅ”ams)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Laika atbilstÄ«ba ā€œavenēmā€ ir svarÄ«ga lieta. Tā kā aparatÅ«ra nevar saglabāt paÅ”reizējo pulksteņa stāvokli pēc atkārtotas palaiÅ”anas, ir nepiecieÅ”ama sinhronizācija. Tam ir ļoti labs un ātrs dēmons hronija - jau instalēts un sākas automātiski. JÅ«s varat nomainÄ«t NTP serverus uz tuvākajiem.

/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

Lai iestatÄ«tu laika joslu, ko izmantosim triks. Tā kā mÅ«su mērÄ·is ir izveidot Wi-Fi rÅ«teri, kas darbotos 5GHz frekvencēs, tad jau iepriekÅ” gatavosimies pārsteigumiem regulators:

# yum info cda
Kopsavilkums: Regulējuma atbilstības dēmons 802.11 bezvadu tīklam

Å is ļaunais dizains, kas balstÄ«ts arÄ« uz laika joslu, ā€œaizliedzā€ izmantot (Krievijā) 5 GHz frekvences un kanālus ar ā€œaugstiemā€ numuriem. Triks ir iestatÄ«t laika joslu, neizmantojot kontinentu/pilsētu nosaukumus, tas ir, nevis:

# timedatectl set-timezone Europe/Moscow

Mēs nospiežam:

# timedatectl set-timezone Etc/GMT-3

Un pēdējais pieskāriens sistēmas frizūrai:

# 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 papildinājumi

Visu, kas tika teikts iepriekÅ”, var uzskatÄ«t par pilnÄ«giem norādÄ«jumiem par ā€œvaniļasā€ CentOS instalÄ“Å”anu Raspberry Pi. Jums vajadzētu nonākt pie datora, kas (atkārtoti) sāk darboties mazāk nekā 10 sekundēs, izmanto mazāk nekā 15 megabaitus RAM un 1.5 gigabaitus microSD (faktiski mazāk nekā 1 gigabaitu nepilnÄ«gas/sāknÄ“Å”anas dēļ, taču bÅ«sim godÄ«gi).

Lai Å”ajā sistēmā instalētu Wi-Fi piekļuves punkta programmatÅ«ru, jums bÅ«s nedaudz jāpaplaÅ”ina standarta CentOS izplatÄ«Å”anas iespējas. Pirmkārt, jaunināsim iebÅ«vētā Wi-Fi adaptera draiveri (programmaparatÅ«ru). Projekta mājaslapā teikts:

Wi-Fi uz Raspberry 3B un 3B+

CentOS projekts nedrīkst izplatīt Raspberry PI 3B/3B+ programmaparatūras failus. Varat izmantot tālāk norādītos rakstus, lai izprastu problēmu, iegūtu programmaparatūru un iestatītu wifi.

Tas, kas ir aizliegts CentOS projektam, mums nav aizliegts personÄ«gai lietoÅ”anai. Mēs aizstājam izplatÄ«Å”anas Wi-Fi programmaparatÅ«ru CentOS ar atbilstoÅ”o Broadcom izstrādātāju (tās paÅ”as ienÄ«stās binārās lāses...). Tas jo Ä«paÅ”i ļaus jums izmantot maiņstrāvu piekļuves punkta režīmā.

Wi-Fi programmaparatÅ«ras jauninājumsUzziniet ierÄ«ces modeli un paÅ”reizējo programmaparatÅ«ras versiju:

# 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 

Mēs redzam, ka programmaparatÅ«ras versija ir 7.45.18, datēta ar 01.03.2015/XNUMX/XNUMX, un atceramies Ŕādu skaitļu kopu: 43455 (brcmfmac43455-sdio.bin).

Lejupielādējiet paÅ”reizējo Raspbian attēlu. Slinki cilvēki var ierakstÄ«t attēlu microSD un no turienes paņemt failus ar programmaparatÅ«ru. Vai arÄ« varat uzstādÄ«t attēla saknes nodalÄ«jumu operētājsistēmā Linux un kopēt no turienes nepiecieÅ”amo:

# 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

IegÅ«tie Wi-Fi adaptera programmaparatÅ«ras faili ir jākopē un jāaizstāj ar ā€œaveņuā€ direktorijā /usr/lib/firmware/brcm/

Mēs pārstartējam topoÅ”o marÅ”rutētāju un apmierināti pasmaidām:

# 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 

Versija: 7.45.154, datēta ar 27.02.2018.

Un, protams, 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. Tīkla konfigurācija un priekŔā stāvoŔie izaicinājumi

Kā mēs vienojāmies iepriekÅ”, "aveņu" ir savienots ar "vadu" ar vietējo tÄ«klu. Pieņemsim, ka pakalpojumu sniedzējs nodroÅ”ina piekļuvi internetam tieÅ”i tādā paŔā veidā: adresi publiskajā tÄ«klā dinamiski izsniedz DHCP serveris (varbÅ«t ar MAC saistÄ«Å”anu). Å ajā gadÄ«jumā pēc aveņu galÄ«gās iestatÄ«Å”anas jums vienkārÅ”i ir "jāpievieno" pakalpojumu sniedzēja kabelis, un tas ir izdarÄ«ts. Autorizācija, izmantojot systemd-networkd - atseviŔķa raksta tēma un Å”eit netiek apspriesta.

Raspberry Wi-Fi saskarne(-es) ir lokālais tīkls, un iebūvētais Ethernet adapteris (eth0) ir ārējs. Vietējo tīklu numurēsim statiski, piemēram: 192.168.0.0/24. Aveņu adrese: 192.168.0.1. DHCP serveris darbosies ārējā tīklā (internetā).

Nosaukuma konsekvences problēma Šø slavenais Gvatemalas programmētājs - divas problēmas, kas gaida ikvienu, kurÅ” konfigurē tÄ«kla saskarnes un pakalpojumus systemd izplatÄ«jumos.

Paralēls haoss (liriska atkāpe)Lennarts Poterings ir sastādÄ«jis savu programmu systemd Ä»oti labi. Å is systemd palaiž citas programmas tik ātri, ka viņi, nepaspējot atgÅ«ties pēc tiesneÅ”a svilpes sitiena, startā paklÅ«p un nokrÄ«t, pat nesākot ŔķērŔļu joslu.

Bet ja nopietni, tad agresÄ«vā uzsākto procesu paralēlizÄ“Å”ana sistēmiskās OS sākumā ir sava veida ā€œÄ“zeļa tiltsā€ pieredzējuÅ”iem secÄ«giem LSB speciālistiem. Par laimi, sakārtot Å”o ā€œparalēlo haosuā€ izrādās vienkārÅ”i, kaut arÄ« ne vienmēr acÄ«mredzami.

Mēs izveidojam divas virtuālā tilta saskarnes ar nemainÄ«giem nosaukumiem: lan Šø bāls. Mēs ā€œsavienosimā€ Wi-Fi adapteri(-us) ar pirmo, bet eth0 ā€œaveņuā€ ar otro.

/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=jā novērÅ” nepiecieÅ”amÄ«bu sniegt mājienu kodolam, izmantojot sysctl, lai iespējotu marÅ”rutÄ“Å”anu.
MACAdrese = Atteiksim komentārus un mainīsim, ja nepiecieŔams.

Vispirms mēs ā€œsavienojamā€ eth0. Mēs atceramies ā€œvienveidÄ«bas problēmuā€ un izmantojam tikai Ŕīs saskarnes MAC adresi, kuru var uzzināt, piemēram, Ŕādi:

# cat /sys/class/net/eth0/address 

Mēs radām /etc/systemd/network/eth.network:

[Match]
MACAddress=b8:27:eb:xx:xx:xx

[Network]
Bridge=wan

Mēs izdzÄ“Å”am iepriekŔējo konfigurācijas failu eth0, restartējam Raspberry un iegÅ«stam piekļuvi tÄ«klam (visticamāk, IP adrese mainÄ«sies):

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

5.DNSMASQ

Lai izveidotu Wi-Fi piekļuves punktus, nekas nav labāks par labu dnsmasq + hostapd vēl neesmu izdomājis. Pēc manām domām.

Ja kāds ir aizmirsis, tad...hostapd - Ŕī ir lieta, kas kontrolē Wi-Fi adapterus (jo Ä«paÅ”i tas parÅ«pēsies par to savienoÅ”anu ar virtuālo lan "avenes"), autorizē un reÄ£istrē bezvadu klientus.

dnsmasq ā€” konfigurē klientu tÄ«kla steku: izsniedz IP adreses, DNS serverus, noklusējuma vārteju un lÄ«dzÄ«gus priekus.

Sāksim ar dnsmasq:

# yum install dnsmasq

Paraugs / 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

rediģējiet to pēc saviem ieskatiem.

minimālistisks /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

ā€œMaÄ£ijaā€ Å”eit slēpjas parametrā saist-dinamisks, kas liek dnsmasq dēmonam gaidÄ«t, lÄ«dz tas parādās sistēmā interfeiss=lan, un nenoģībt no lepnas vientulÄ«bas lēkmes pēc starta.

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

6. HOSTAPD

Un visbeidzot, maÄ£iskās hostapd konfigurācijas. Man nav Å”aubu, ka kāds lasa Å”o rakstu, meklējot tieÅ”i Ŕīs vērtÄ«gās lÄ«nijas.

Pirms hostapd instalÄ“Å”anas jums jāpārvar ā€œvienveidÄ«bas problēmaā€. IebÅ«vētais Wi-Fi adapteris wlan0 var viegli mainÄ«t nosaukumu uz wlan1, pievienojot papildu USB Wi-Fi aprÄ«kojumu. Tāpēc mēs labosim interfeisa nosaukumus Ŕādi: mēs izdomāsim unikālus (bezvadu) adapteru nosaukumus un saistÄ«sim tos ar MAC adresēm.

Iebūvētajam Wi-Fi adapterim, kas joprojām ir wlan0:

# cat /sys/class/net/wlan0/address 
b8:27:eb:xx:xx:xx

Mēs radām /etc/systemd/network/wl0.link:

[Match]
MACAddress=b8:27:eb:xx:xx:xx

[Link]
Name=wl0

Tagad mēs par to būsim pārliecināti wl0 - Tas ir iebūvēts Wi-Fi. Mēs atsāknējam Raspberry, lai par to pārliecinātos.

Uzstādīt:

# yum install hostapd wireless-tools

Konfigurācijas fails /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

Neaizmirstot ne mirkli Valsts ārkārtas situāciju komiteja, mainiet mums nepiecieŔamos parametrus un manuāli pārbaudiet funkcionalitāti:

# hostapd /etc/hostapd/hostapd.conf

hostapd sāksies interaktīvā režīmā, pārraidot savu stāvokli konsolei. Ja kļūdu nav, klienti, kas atbalsta maiņstrāvas režīmu, varēs izveidot savienojumu ar piekļuves punktu. Lai apturētu hostapd - Ctrl-C.

Atliek tikai iespējot hostapd sistēmas startÄ“Å”anas laikā. Ja veicat standarta darbÄ«bu (systemctl enable hostapd), tad pēc nākamās pārstartÄ“Å”anas jÅ«s varat saņemt dēmonu, kas ā€œripo asinÄ«sā€ ar diagnozi ā€œinterfeiss wl0 nav atrasts". ā€œParalēlā haosaā€ rezultātā hostapd startēja ātrāk, nekā kodols atrada bezvadu adapteri.

Internets ir pilns ar lÄ«dzekļiem: no piespiedu noildzes pirms dēmona palaiÅ”anas (vairākas minÅ«tes) lÄ«dz citam dēmonam, kas uzrauga saskarnes izskatu un (atkārtoti) startē resursdatora bloku. Risinājumi ir diezgan praktiski, bet Å”ausmÄ«gi neglÄ«ti. Mēs saucam palÄ«gā lielo systemd ar saviem ā€œmērÄ·iemā€ un ā€œuzdevumiemā€ un ā€œatkarÄ«bāmā€.

Kopējiet izplatÄ«Å”anas pakalpojuma failu uz /etc/systemd/system/hostapd.service:

# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system

un samazināt tā saturu līdz Ŕādai formai:

[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

Atjauninātā pakalpojuma faila burvÄ«ba slēpjas hostapd dinamiskajā saistÄ«Å”anā ar jauno mērÄ·i - wl0 saskarni. Kad parādās interfeiss, dēmons sākas; kad tas pazÅ«d, tas apstājas. Un tas viss notiek tieÅ”saistē - bez sistēmas pārstartÄ“Å”anas. Å is paņēmiens bÅ«s Ä«paÅ”i noderÄ«gs, pievienojot USB Wi-Fi adapteri Raspberry.

Tagad Tu vari:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Ko???" Ā© Jā, jā! Nav systemd. Nav jaunizveidotu kombainu (formā ugunsmÅ«ris), kas galu galā dara to paÅ”u.

Izmantosim veco labo iptables, kura pakalpojumi pēc palaiÅ”anas ielādēs tÄ«kla noteikumus kodolā un mierÄ«gi izslēgsies, nepaliekot rezidentam un nepatērējot resursus. systemd ir elegants IPMasquerade=, taču adreses tulkoÅ”anu (NAT) un ugunsmÅ«ri joprojām uzticēsim iptables.

Uzstādīt:

# yum install iptables-services
# systemctl enable iptables ip6tables

Es dodu priekÅ”roku iptables konfigurācijas saglabāŔanai kā skriptam (piemērs):

#!/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

Mēs izpildām iepriekÅ” minēto skriptu un zaudējam iespēju izveidot jaunus vadu SSH savienojumus ar Raspberry. TieÅ”i tā, mēs esam izveidojuÅ”i Wi-Fi marÅ”rutētāju, kuram pēc noklusējuma ir aizliegta piekļuve ā€œcaur internetuā€ - tagad tikai ā€œpa gaisuā€. Mēs pievienojam pakalpojumu sniedzēja Ethernet kabeli un sākam sērfot!

8. Bonuss: +2,4 GHz

Kad es saliku pirmo Raspberry marÅ”rutētāju, izmantojot iepriekÅ” aprakstÄ«to zÄ«mējumu, es atklāju savā mājsaimniecÄ«bā vairākus sÄ«krÄ«kus, kas to Wi-Fi dizaina ierobežojumu dēļ vispār nevarēja redzēt "aveņu". MarÅ”rutētāja pārkonfigurÄ“Å”ana darbam 802.11b/g/n bija nesportiska, jo maksimālais ātrums ā€œpa gaisuā€ Å”ajā gadÄ«jumā nepārsniedza 40 Mbit, un mans iecienÄ«tākais interneta pakalpojumu sniedzējs man piedāvā 100 (caur kabeli).

Faktiski jau ir izgudrots problēmas risinājums: otrs Wi-Fi interfeiss, kas darbojas ar frekvenci 2,4 GHz, un otrs piekļuves punkts. Netālu esoÅ”ajā stendā nopirku nevis pirmo, bet otro USB Wi-Fi ā€œsvilpiā€, ko sastapu. Pārdevēju mocÄ«ja jautājumi par mikroshēmojumu, saderÄ«bu ar ARM Linux kodoliem un iespēju strādāt AP režīmā (viņŔ bija pirmais, kurÅ” sāka).

Mēs konfigurējam ā€œsvilpiā€ pēc analoÄ£ijas ar iebÅ«vēto Wi-Fi adapteri.

Vispirms pārdēvēsim to uz 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

Mēs uzticēsim jaunā Wi-Fi interfeisa pārvaldÄ«bu atseviŔķam hostapd dēmonam, kas sāksies un apstāsies atkarÄ«bā no stingri noteiktas ā€œsvilpesā€ klātbÅ«tnes sistēmā: wl1.

Konfigurācijas fails /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]

Å Ä« faila saturs ir tieÅ”i atkarÄ«gs no USB Wi-Fi adaptera modeļa, tāpēc banāla kopÄ“Å”ana/ielÄ«mÄ“Å”ana var neizdoties.

Kopējiet izplatÄ«Å”anas pakalpojuma failu uz /etc/systemd/system/hostapd2.service:

# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service

un samazināt tā saturu līdz Ŕādai formai:

[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

Atliek tikai iespējot jaunu hostapd gadījumu:

# systemctl enable hostapd2

Tas ir viss! Pavelciet ā€œsvilpiā€ un paÅ”u ā€œaveņuā€, apskatiet apkārtējos bezvadu tÄ«klus.

Visbeidzot, es vēlos jÅ«s brÄ«dināt par USB Wi-Fi adaptera un Raspberry baroÅ”anas avota kvalitāti. Savienota ā€œkarsta svilpeā€ dažkārt var izraisÄ«t ā€œaveņu sasalÅ”anuā€ Ä«slaicÄ«gu elektrÄ«bas traucējumu dēļ.

Avots: www.habr.com

Pievieno komentāru