Raspberry Pi + CentOS = Wi-Fi Hotspot (o raspberry router na may pulang sumbrero)

Mayroong isang malaking halaga ng impormasyon sa Internet sa paglikha ng mga Wi-Fi access point batay sa isang Raspberry single-board PC. Bilang isang patakaran, nangangahulugan ito ng paggamit ng Raspbian operating system na katutubong sa Raspberry.

Bilang isang sumusunod sa mga sistemang nakabatay sa RPM, hindi ko madaanan ang maliit na himalang ito at hindi ko subukan ang aking minamahal na CentOS dito.

Nagbibigay ang artikulo ng mga tagubilin para sa paggawa ng 5GHz/AC Wi-Fi router mula sa Raspberry Pi 3 Model B+ batay sa CentOS operating system. Magkakaroon ng ilang mga pamantayan ngunit hindi gaanong kilalang mga trick, at bilang isang bonus - isang pagguhit para sa pagkonekta ng karagdagang kagamitan sa Wi-Fi sa Raspberry, na nagpapahintulot sa ito na sabay na gumana sa ilang mga mode (2,4+5GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (o raspberry router na may pulang sumbrero)
(halo ng mga malayang magagamit na larawan)

Tandaan natin kaagad na ang ilang cosmic velocities ay hindi gagana. Pinipigilan ko ang maximum na 100 Mbps mula sa aking Raspberry sa hangin, at sinasaklaw nito ang bilis ng aking Internet provider. Bakit kailangan mo ng isang matamlay na AC, kung sa teorya maaari kang makakuha ng kalahating gigabit kahit sa N? Kung naitanong mo sa iyong sarili ang tanong na ito, pagkatapos ay pumunta sa tindahan upang bumili ng isang tunay na router na may walong panlabas na antenna.

0. Ano ang kakailanganin mo

  • Sa totoo lang, ang "produktong raspberry" mismo ay may kalibre: Pi 3 Model B+ (upang makamit ang hinahangad na 5GHz na bilis at mga channel);
  • Magandang microSD >= 4GB;
  • Workstation na may Linux at microSD reader/writer;
  • Ang pagkakaroon ng sapat na mga kasanayan sa Linux, ang artikulo ay para sa isang sinanay na Geek;
  • Wired network (eth0) connectivity sa pagitan ng Raspberry at Linux, na nagpapatakbo ng DHCP server sa lokal na network at Internet access mula sa parehong device.

Isang maliit na komento sa huling punto. "Alin ang nauna, ang itlog o..." paano gumawa ng isang Wi-Fi router sa kawalan ng anumang kagamitan sa pag-access sa Internet? Iwanan natin ang nakakaaliw na ehersisyong ito sa labas ng saklaw ng artikulo at ipagpalagay lamang na ang Raspberry ay konektado sa lokal na network sa pamamagitan ng wire at may access sa Internet. Sa kasong ito, hindi namin kakailanganin ang isang karagdagang TV at isang manipulator upang i-set up ang "raspberry".

1. I-install ang CentOS

Home page ng proyekto

Sa oras ng pagsulat ng artikulong ito, ang tumatakbong bersyon ng CentOS sa device ay 32-bit. Sa isang lugar sa World Wide Web, nakita ko ang mga opinyon na ang pagganap ng mga naturang OS sa 64-bit na arkitektura ng ARM ay nabawasan ng hanggang 20%. Iiwan ko ang sandaling ito nang walang komento.

Sa Linux, i-download ang minimal na imahe gamit ang kernel "-RaspberryPI-"at isulat ito sa microSD:

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

Bago simulan ang paggamit ng imahe, aalisin namin ang SWAP partition mula dito, palawakin ang root sa buong magagamit na volume at aalisin ang SELinux. Ang algorithm ay simple: gumawa ng isang kopya ng ugat sa Linux, tanggalin ang lahat ng mga partisyon mula sa microSD maliban sa una (/boot), lumikha ng bagong ugat at ibalik ang mga nilalaman nito mula sa kopya.

Halimbawa ng mga kinakailangang pagkilos (matinding console output)

# 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

Pagkatapos i-unpack ang mga nilalaman ng root partition, oras na para gumawa ng ilang pagbabago dito.

Huwag paganahin ang SELinux sa /mnt/etc/selinux/config:

SELINUX=disabled

Pag-edit /mnt/etc/fstab, nag-iiwan lamang dito ng dalawang entry tungkol sa mga partisyon: boot (/boot, walang pagbabago) at root (binabago namin ang halaga ng UUID, na maaaring malaman sa pamamagitan ng pag-aaral ng output ng blkid command sa Linux):

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

Sa wakas, binago namin ang mga parameter ng kernel boot: tinukoy namin ang isang bagong lokasyon para sa root partition, hindi pinagana ang output ng impormasyon sa pag-debug at (opsyonal) ipagbabawal ang kernel na magtalaga ng mga IPv6 address sa mga interface ng network:

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

Narito ang nilalaman /mnt/cmdline.txt sa sumusunod na anyo (isang linyang walang gitling):

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

Tapos na:

# cd
# umount /mnt
# sync

Inayos namin muli ang microSD sa "raspberry", ilunsad ito at kumuha ng access sa network dito sa pamamagitan ng ssh (root/centos).

2. Pagse-set up ng CentOS

Ang unang tatlong hindi matitinag na paggalaw: passwd, yum -y update, i-reboot.

Nagbibigay kami ng pamamahala sa network networkd:

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

Lumikha ng isang file (kasama ang mga direktoryo) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

I-reboot namin ang "raspberry" at muling kumuha ng access sa network dito sa pamamagitan ng ssh (maaaring magbago ang IP address). Bigyang-pansin kung ano ang ginagamit /etc/resolv.conf, na ginawa ng mas maaga ng Network Manager. Samakatuwid, sa kaso ng mga problema sa paglutas, i-edit ang mga nilalaman nito. Gamitin nalutas ng systemd hindi namin gagawin.

Inalis namin ang "hindi kailangan", ayusin at pabilisin ang pag-load ng 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

Sinong may kailangan cron at kung sino ang hindi digest ang built-in mga systemd timer, maaaring magtatag ng kung ano ang nawawala. / var / log- at tingnan journalctl. Kung kailangan mo ng kasaysayan ng log (bilang default, ang impormasyon ay nakaimbak lamang mula sa sandaling magsimula ang system):

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

Huwag paganahin ang paggamit ng IPv6 ng mga pangunahing serbisyo (kung kinakailangan)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Ang kaugnayan ng oras sa "raspberry" ay isang mahalagang bagay. Dahil sa labas ng kahon ay walang kakayahan sa hardware na i-save ang kasalukuyang estado ng orasan sa pag-reboot, kailangan ang pag-synchronize. Isang napakahusay at mabilis na daemon para dito chrony - naka-install na at awtomatikong nagsisimula. Maaari mong baguhin ang mga NTP server sa pinakamalapit na mga server.

/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

Para itakda ang time zone na gagamitin namin panlilinlang. Dahil ang layunin namin ay lumikha ng Wi-Fi router na tumatakbo sa 5GHz frequency, maghahanda kami para sa mga sorpresa nang maaga. regulator:

# yum info crda
Buod: Regulatory compliance daemon para sa 802.11 wireless networking

Ang masamang disenyong ito, batay din sa time zone, ay "nagbabawal" sa paggamit (sa Russia) ng 5GHz na mga frequency at channel na may "mataas" na numero. Ang lansihin ay magtakda ng time zone nang hindi ginagamit ang mga pangalan ng mga kontinente/lungsod, iyon ay, sa halip na:

# timedatectl set-timezone Europe/Moscow

Pinindot namin ang:

# timedatectl set-timezone Etc/GMT-3

At ang panghuling pagpindot sa hairstyle ng system:

# 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. Mga Add-on ng CentOS

Ang lahat ng sinabi sa itaas ay maaaring ituring na kumpletong mga tagubilin para sa pag-install ng "vanilla" CentOS sa Raspberry Pi. Dapat kang magkaroon ng PC na (muling) mag-boot nang wala pang 10 segundo, gumagamit ng mas mababa sa 15 Megabytes ng RAM at 1.5 Gigabytes ng microSD (talagang mas mababa sa 1 Gigabyte dahil sa hindi kumpleto /boot, ngunit maging tapat tayo).

Upang mai-install ang Wi-Fi access point software sa system na ito, kakailanganin mong bahagyang palawakin ang mga kakayahan ng karaniwang pamamahagi ng CentOS. Una sa lahat, i-upgrade natin ang driver (firmware) ng built-in na Wi-Fi adapter. Ang home page ng proyekto ay nagsasabing:

Wifi sa Raspberry 3B at 3B+

Ang mga file ng firmware ng Raspberry PI 3B/3B+ ay hindi pinapayagang ipamahagi ng CentOS Project. Maaari mong gamitin ang mga sumusunod na artikulo upang maunawaan ang isyu, kunin ang firmware at i-set up ang wifi.

Ang ipinagbabawal para sa proyekto ng CentOS ay hindi ipinagbabawal para sa amin para sa personal na paggamit. Pinapalitan namin ang pamamahagi ng firmware ng Wi-Fi sa CentOS ng katumbas na isa mula sa mga developer ng Broadcom (mga parehong kinasusuklaman na binary blobs...). Ito, sa partikular, ay magbibigay-daan sa iyo na gumamit ng AC sa access point mode.

Pag-upgrade ng firmware ng Wi-FiAlamin ang modelo ng device at kasalukuyang bersyon ng firmware:

# 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 

Nakita namin na ang bersyon ng firmware ay 7.45.18 na may petsang 01.03.2015/XNUMX/XNUMX, at tandaan ang sumusunod na hanay ng mga numero: 43455 (brcmfmac43455-sdio.bin).

I-download ang kasalukuyang larawan ng Raspbian. Maaaring isulat ng mga tamad ang larawan sa microSD at kunin ang mga file gamit ang firmware mula doon. O maaari mong i-mount ang root partition ng imahe sa Linux at kopyahin kung ano ang kailangan mo mula doon:

# 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

Ang resultang Wi-Fi adapter firmware file ay dapat makopya at palitan ng "raspberry" sa direktoryo /usr/lib/firmware/brcm/

I-reboot namin ang hinaharap na router at kuntentong ngumiti:

# 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 

Bersyon: 7.45.154 na may petsang 27.02.2018/XNUMX/XNUMX.

At syempre 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. Network configuration at mga hamon sa hinaharap

Tulad ng napagkasunduan namin sa itaas, ang "raspberry" ay konektado sa pamamagitan ng "wire" sa lokal na network. Ipagpalagay natin na ang provider ay nagbibigay ng access sa Internet sa eksaktong parehong paraan: ang address sa pampublikong network ay dynamic na inisyu ng DHCP server (marahil ay may MAC binding). Sa kasong ito, pagkatapos ng huling pag-setup ng raspberry, kailangan mo lang "isaksak" ang cable ng provider dito at tapos ka na. Paggamit ng awtorisasyon systemd-networkd - ang paksa ng isang hiwalay na artikulo at hindi tinalakay dito.

Ang (mga) interface ng Wi-Fi ng Raspberry ay isang lokal na network, at ang built-in na Ethernet adapter (eth0) ay panlabas. Bilangin natin ang lokal na network nang statically, halimbawa: 192.168.0.0/24. Raspberry address: 192.168.0.1. Ang isang DHCP server ay gagana sa panlabas na network (Internet).

Problema sa Pagkakatugma ng Pangalan ΠΈ sikat na programmer ng Guatemala - dalawang problema na naghihintay sa sinumang nagko-configure ng mga interface at serbisyo ng network sa mga pamamahagi ng systemd.

Parallel chaos (lyrical digression)Ang Lennart Pottering ay nag-compile ng sarili nitong programa systemd Napakahusay. Ito systemd naglulunsad ng iba pang mga programa nang napakabilis na, na hindi nagkakaroon ng oras upang makabawi mula sa suntok ng whistle ng referee, natitisod at nahulog sa simula nang hindi man lang sinimulan ang kanilang obstacle course.

Ngunit seryoso, ang agresibong parallelization ng mga inilunsad na proseso sa simula ng systemd OS ay isang uri ng "donkey bridge" para sa mga napapanahong sequential LSB specialist. Sa kabutihang palad, ang pagdadala ng kaayusan sa "parallel na kaguluhan" na ito ay naging simple, bagaman hindi palaging halata.

Lumilikha kami ng dalawang virtual na interface ng tulay na may pare-parehong mga pangalan: lan ΠΈ wan. "Ikokonekta" namin ang (mga) Wi-Fi adapter sa una, at ang eth0 "raspberry" sa pangalawa.

/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=oo inaalis ang pangangailangan na magpahiwatig sa kernel sa pamamagitan ng sysctl upang paganahin ang pagruruta.
MACAddress= Mag-uncomment tayo at baguhin kung kinakailangan.

Una naming "kumonekta" eth0. Naaalala namin ang "problema sa pagkakapareho" at ginagamit lamang ang MAC address ng interface na ito, na maaaring malaman, halimbawa, tulad nito:

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

Lumilikha kami /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Tinatanggal namin ang nakaraang file ng pagsasaayos na eth0, i-reboot ang Raspberry at kumuha ng access sa network dito (malamang na magbago ang IP address):

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

5.DNSMASQ

Para sa paggawa ng mga Wi-Fi access point, walang tatalo sa matamis na pares dnsmasq + hostapd hindi pa naiisip. Sa aking opinyon.

Kung sakaling may nakalimutan, kung gayon...hostapd - ito ang bagay na kumokontrol sa mga Wi-Fi adapter (sa partikular, ito ang bahala sa pagkonekta sa kanila sa virtual lan "raspberries"), pinapahintulutan at nirerehistro ang mga wireless na kliyente.

dnsmasq β€” kino-configure ang network stack ng mga kliyente: nag-isyu ng mga IP address, DNS server, default na gateway at mga katulad na kasiyahan.

Magsimula tayo sa dnsmasq:

# yum install dnsmasq

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

i-edit ito ayon sa gusto mo.

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

Ang "magic" dito ay nakasalalay sa parameter bind-dynamic, na nagsasabi sa dnsmasq daemon na maghintay hanggang sa lumitaw ito sa system interface=lan, at hindi nanghihina dahil sa mapagmataas na kalungkutan pagkatapos ng simula.

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

6. HOSTAPD

At panghuli, ang magic hostapd configurations. Wala akong pag-aalinlangan na may nagbabasa ng artikulong ito sa paghahanap ng mga tiyak na mahalagang linyang ito.

Bago i-install ang hostapd, kailangan mong pagtagumpayan ang "problema sa pagkakapareho". Madaling mapapalitan ng built-in na Wi-Fi adapter na wlan0 ang pangalan nito sa wlan1 kapag kumokonekta ng karagdagang USB Wi-Fi equipment. Samakatuwid, aayusin namin ang mga pangalan ng interface sa sumusunod na paraan: gagawa kami ng mga natatanging pangalan para sa (wireless) na mga adaptor at itali ang mga ito sa mga MAC address.

Para sa built-in na Wi-Fi adapter, na wlan0 pa rin:

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

Lumilikha kami /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Ngayon ay sisiguraduhin natin iyon wl0 - Ito ay built-in na Wi-Fi. I-reboot namin ang Raspberry upang matiyak ito.

I-install:

# yum install hostapd wireless-tools

File ng configuration /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

Nang hindi nakakalimutan kahit isang sandali Komite sa Emergency ng Estado, baguhin ang mga parameter na kailangan namin at manu-manong suriin para sa functionality:

# hostapd /etc/hostapd/hostapd.conf

magsisimula ang hostapd sa interactive na mode, na ibo-broadcast ang estado nito sa console. Kung walang mga error, ang mga kliyenteng sumusuporta sa AC mode ay makakakonekta sa access point. Upang ihinto ang hostapd - Ctrl-C.

Ang natitira na lang ay paganahin ang hostapd sa system startup. Kung gagawin mo ang karaniwang bagay (paganahin ng systemctl ang hostapd), pagkatapos pagkatapos ng susunod na pag-reboot maaari kang makakuha ng isang demonyo na "gumugulong sa dugo" na may diagnosis na "hindi nahanap ang interface wl0". Bilang resulta ng "parallel chaos," nagsimula ang hostapd nang mas mabilis kaysa sa nakita ng kernel ang wireless adapter.

Ang Internet ay puno ng mga remedyo: mula sa sapilitang pag-timeout bago simulan ang daemon (ilang minuto), hanggang sa isa pang daemon na sumusubaybay sa hitsura ng interface at (muling) simulan ang hostpad. Ang mga solusyon ay lubos na magagawa, ngunit napakapangit. Tumatawag kami sa dakila para sa tulong systemd kasama ang "mga layunin" at "mga gawain" at "dependencies".

Kopyahin ang file ng serbisyo sa pamamahagi sa /etc/systemd/system/hostapd.service:

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

at bawasan ang mga nilalaman nito sa sumusunod na anyo:

[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

Ang mahika ng na-update na file ng serbisyo ay nakasalalay sa dynamic na pagbubuklod ng hostapd sa bagong target - ang interface ng wl0. Kapag lumitaw ang interface, magsisimula ang daemon; kapag nawala ito, hihinto ito. At lahat ito ay online - nang hindi nire-reboot ang system. Ang diskarteng ito ay lalong magiging kapaki-pakinabang kapag kumokonekta ng USB Wi-Fi adapter sa isang Raspberry.

Ngayon ay maaari ka nang:

# systemctl enable hostapd
# reboot

7. IPTABLES

β€œAno???” Β© Oo, oo! wala systemd. Walang newfangled combine (sa form firewalld), na nagtatapos sa paggawa ng parehong bagay.

Gamitin natin ang magandang luma iptables, na ang mga serbisyo, pagkatapos magsimula, ay maglo-load ng mga panuntunan sa network sa kernel at tahimik na magsasara nang hindi nananatiling residente at hindi kumukonsumo ng mga mapagkukunan. systemd ay may isang eleganteng IPMasquerade=, ngunit ipagkakatiwala pa rin namin ang pagsasalin ng address (NAT) at firewall sa mga iptable.

I-install:

# yum install iptables-services
# systemctl enable iptables ip6tables

Mas gusto kong iimbak ang pagsasaayos ng iptables bilang isang script (halimbawa):

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

Isinasagawa namin ang script sa itaas at nawalan kami ng kakayahang magtatag ng mga bagong wired na koneksyon sa SSH sa Raspberry. Tama, gumawa kami ng isang Wi-Fi router, ang pag-access kung saan "sa pamamagitan ng Internet" ay ipinagbabawal bilang default - ngayon lamang "sa hangin". Ikinonekta namin ang Ethernet cable ng provider at magsimulang mag-surf!

8. Bonus: +2,4GHz

Nang tipunin ko ang unang Raspberry router gamit ang drawing na inilarawan sa itaas, natuklasan ko ang ilang mga gadget sa aking sambahayan na, dahil sa kanilang mga limitasyon sa disenyo ng Wi-Fi, ay hindi makita ang "raspberry" sa lahat. Ang pag-reconfigure ng router upang gumana sa 802.11b/g/n ay hindi isporting, dahil ang maximum na bilis ng "over the air" sa kasong ito ay hindi lalampas sa 40 Mbit, at ang aking paboritong Internet provider ay nag-aalok sa akin ng 100 (sa pamamagitan ng cable).

Sa katunayan, ang isang solusyon sa problema ay naimbento na: isang pangalawang Wi-Fi interface na tumatakbo sa dalas ng 2,4 GHz, at isang pangalawang access point. Sa isang kalapit na stall binili ko hindi ang una, ngunit ang pangalawang USB Wi-Fi "whistle" na nakita ko. Ang nagbebenta ay pinahirapan ng mga tanong tungkol sa chipset, pagiging tugma sa mga kernel ng ARM Linux at ang posibilidad na magtrabaho sa AP mode (siya ang unang nagsimula).

Kino-configure namin ang "whistle" sa pamamagitan ng pagkakatulad sa built-in na Wi-Fi adapter.

Una, palitan natin ang pangalan nito sa 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

Ipagkakatiwala namin ang pamamahala ng bagong interface ng Wi-Fi sa isang hiwalay na hostapd daemon, na magsisimula at hihinto depende sa pagkakaroon ng isang mahigpit na tinukoy na "whistle" sa system: wl1.

File ng configuration /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]

Direktang nakadepende ang mga nilalaman ng file na ito sa modelo ng USB Wi-Fi adapter, kaya maaaring mabigo ka ng isang karaniwang kopya/i-paste.

Kopyahin ang file ng serbisyo sa pamamahagi sa /etc/systemd/system/hostapd2.service:

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

at bawasan ang mga nilalaman nito sa sumusunod na anyo:

[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

Ang natitira na lang ay paganahin ang isang bagong instance ng hostapd:

# systemctl enable hostapd2

Iyon lang! Hilahin ang "whistle" at ang "raspberry" mismo, tingnan ang mga wireless network sa paligid mo.

At sa wakas, gusto kong balaan ka tungkol sa kalidad ng USB Wi-Fi adapter at power supply ng Raspberry. Ang nakakonektang "hot whistle" ay minsan ay maaaring magdulot ng "raspberry freezing" dahil sa mga panandaliang problema sa kuryente.

Pinagmulan: www.habr.com

Magdagdag ng komento