Raspberry Pi + CentOS = Wi-Fi Erişim Noktası (veya kırmızı şapkalı ahududu yönlendirici)

İnternette Raspberry tek kartlı PC'ye dayalı Wi-Fi erişim noktaları oluşturmaya ilişkin çok miktarda bilgi var. Kural olarak bu, Raspberry'e özgü Raspbian işletim sisteminin kullanılması anlamına gelir.

RPM tabanlı sistemlerin tutkunu biri olarak bu küçük mucizeyi atlayıp sevgili CentOS'umu üzerinde denemeden geçemezdim.

Makale, CentOS işletim sistemini temel alan Raspberry Pi 5 Model B+'dan 3 GHz/AC Wi-Fi yönlendirici oluşturmaya yönelik talimatlar sağlar. Birkaç standart ancak az bilinen püf noktası olacak ve bir bonus olarak, Raspberry'ye ek Wi-Fi ekipmanı bağlamak ve aynı anda çeşitli modlarda (2,4 + 5 GHz) çalışmasına olanak tanıyan bir çizim olacak.

Raspberry Pi + CentOS = Wi-Fi Erişim Noktası (veya kırmızı şapkalı ahududu yönlendirici)
(ücretsiz olarak kullanılabilen görsellerin karışımı)

Bazı kozmik hızların işe yaramayacağını hemen belirtelim. Raspberry'imden kablosuz olarak maksimum 100 Mbps'yi sıkıyorum ve bu, İnternet sağlayıcımın hızını kapsıyor. Teorik olarak N'de bile yarım gigabit alabiliyorsanız neden bu kadar yavaş bir AC'ye ihtiyacınız var? Kendinize bu soruyu sorduysanız, sekiz harici antene sahip gerçek bir yönlendirici satın almak için mağazaya gidin.

0. Neye ihtiyacınız olacak

  • Aslında "ahududu ürününün" kendisi şu kalibrededir: Pi 3 Model B+ (çok beğenilen 5GHz hızlara ve kanallara ulaşmak için);
  • İyi microSD >= 4GB;
  • Linux ve microSD okuyucu/yazıcıya sahip iş istasyonu;
  • Linux'ta yeterli beceriye sahip olunması, makale eğitimli bir Geek içindir;
  • Raspberry ve Linux arasında kablolu ağ (eth0) bağlantısı, yerel ağda DHCP sunucusunun çalıştırılması ve her iki cihazdan İnternet erişimi.

Son noktaya küçük bir yorum. “Hangisi önce geldi, yumurta mı yoksa...” herhangi bir İnternet erişim ekipmanının yokluğunda Wi-Fi yönlendirici nasıl yapılır? Bu eğlenceli alıştırmayı yazının kapsamı dışında bırakalım ve Raspberry'nin yerel ağa kablolu olarak bağlı olduğunu ve internete erişimi olduğunu varsayalım. Bu durumda "ahududu" kurulumu için ek bir TV'ye ve manipülatöre ihtiyacımız olmayacak.

1. CentOS'u yükleyin

Proje ana sayfası

Bu makalenin yazıldığı sırada cihazda CentOS'un çalışan sürümü 32 bittir. World Wide Web'in bir yerinde, bu tür işletim sistemlerinin 64 bit ARM mimarisi üzerindeki performansının% 20'ye kadar azaldığı yönünde görüşlerle karşılaştım. Bu anı yorumsuz bırakıyorum.

Linux'ta minimum görüntüyü çekirdekle birlikte indirin "-RaspberryPI-"ve bunu microSD'ye yazın:

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

İmajı kullanmaya başlamadan önce, SWAP bölümünü kaldıracağız, kökü mevcut birimin tamamına genişleteceğiz ve SELinux'tan kurtulacağız. Algoritma basittir: Linux'ta kökün bir kopyasını oluşturun, microSD'deki ilk bölüm (/boot) dışındaki tüm bölümleri silin, yeni bir kök oluşturun ve içeriğini kopyadan döndürün.

Gerekli eylemlere örnek (ciddi konsol çıkışı)

# 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

Kök bölümün içeriğini açtıktan sonra, üzerinde bazı değişiklikler yapmanın zamanı geldi.

SELinux'u devre dışı bırak /mnt/etc/selinux/config:

SELINUX=disabled

Düzenleme /mnt/etc/fstab, içinde bölümlerle ilgili yalnızca iki giriş bırakarak: boot (/boot, değişiklik yok) ve root (Linux'ta blkid komutunun çıktısını inceleyerek öğrenilebilecek UUID değerini değiştiriyoruz):

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

Son olarak çekirdek önyükleme parametrelerini değiştiriyoruz: kök bölüm için yeni bir konum belirliyoruz, hata ayıklama bilgilerinin çıktısını devre dışı bırakıyoruz ve (isteğe bağlı olarak) çekirdeğin ağ arayüzlerine IPv6 adresleri atamasını yasaklıyoruz:

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

İşte içerik /mnt/cmdline.txt aşağıdaki forma (tiresiz bir satır):

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

Finish:

# cd
# umount /mnt
# sync

MicroSD'yi "ahududu" olarak yeniden düzenliyoruz, başlatıyoruz ve ssh (kök/centos) aracılığıyla ona ağ erişimi sağlıyoruz.

2. CentOS'u kurma

İlk üç sarsılmaz hareket: passwd, yum -y güncellemesi, reboot.

Ağ yönetimini hediye ediyoruz :

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

Bir dosya oluşturun (dizinlerle birlikte) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

"Raspberry" i yeniden başlatıyoruz ve ssh aracılığıyla ona tekrar ağ erişimi sağlıyoruz (IP adresi değişebilir). Ne kullanıldığına dikkat edin / Etc / resolv.conf, daha önce Ağ Yöneticisi tarafından oluşturulmuştu. Bu nedenle, çözümle ilgili sorun olması durumunda içeriğini düzenleyin. Kullanmak sistem çözüldü Yapmayacağız.

“Gereksiz” olanları kaldırıyoruz, onarıyoruz ve işletim sisteminin yüklenmesini hızlandırıyoruz:

# 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

Kimin ihtiyacı var? cron ve yerleşik olanı kim sindirmez sistem zamanlayıcıları, neyin eksik olduğunu tespit edebilir. / Var / log- ve içine bak Journalctl. Günlük geçmişine ihtiyacınız varsa (varsayılan olarak bilgiler yalnızca sistemin başlatıldığı andan itibaren saklanır):

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

IPv6'nın temel hizmetler tarafından kullanımını devre dışı bırakın (gerekiyorsa)/ Etc / SSH / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Zamanın “ahududu” ile ilgisi önemli bir şeydir. Kutunun dışında, yeniden başlatma sırasında saatin mevcut durumunu kaydedecek donanım yeteneği olmadığından senkronizasyon gereklidir. Bunun için çok iyi ve hızlı bir arka plan programı chronyd - zaten yüklü ve otomatik olarak başlıyor. NTP sunucularını en yakın olanlarla değiştirebilirsiniz.

/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

Kullanacağımız saat dilimini ayarlamak için hile. Amacımız 5GHz frekansında çalışan bir Wi-Fi router oluşturmak olduğundan sürprizlere önceden hazırlanacağız regülatör:

# yum bilgisi crda
Özet: 802.11 kablosuz ağ iletişimi için mevzuata uygunluk arka planı

Zaman dilimini de temel alan bu şeytani tasarım, (Rusya'da) 5GHz frekanslarının ve “yüksek” rakamlı kanalların kullanımını “yasaklıyor”. İşin püf noktası, kıtaların/şehirlerin adlarını kullanmadan bir saat dilimi ayarlamaktır; bunun yerine:

# timedatectl set-timezone Europe/Moscow

Basıyoruz:

# timedatectl set-timezone Etc/GMT-3

Ve sistemin saç stiline son dokunuşlar:

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

Yukarıda söylenen her şey, Raspberry Pi'ye "vanilya" CentOS kurulumuna ilişkin eksiksiz talimatlar olarak düşünülebilir. 10 saniyeden daha kısa sürede (yeniden) başlatılan, 15 Megabayt'tan daha az RAM ve 1.5 Gigabayt microSD (aslında eksik /önyükleme nedeniyle 1 Gigabayt'tan az, ama dürüst olalım) kullanan bir PC'ye sahip olmalısınız.

Bu sisteme Wi-Fi erişim noktası yazılımı yüklemek için standart CentOS dağıtımının yeteneklerini biraz genişletmeniz gerekecektir. Öncelikle yerleşik Wi-Fi adaptörünün sürücüsünü (ürün yazılımını) yükseltelim. Proje ana sayfasında şöyle yazıyor:

Raspberry 3B ve 3B+'da WiFi

Raspberry PI 3B/3B+ ürün yazılımı dosyalarının CentOS Projesi tarafından dağıtılmasına izin verilmez. Sorunu anlamak, firmware'i edinmek ve wifi kurulumunu yapmak için aşağıdaki makalelerden yararlanabilirsiniz.

CentOS projesi için yasak olan, kişisel kullanım için bizim için yasak değildir. CentOS'taki dağıtım Wi-Fi donanım yazılımını Broadcom geliştiricilerinin (aynı nefret edilen ikili bloblar...) karşılık gelen yazılımıyla değiştiriyoruz. Bu özellikle AC'yi erişim noktası modunda kullanmanıza olanak tanır.

Wi-Fi ürün yazılımı yükseltmesiCihaz modelini ve mevcut donanım yazılımı sürümünü öğrenin:

# 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 

Ürün yazılımı sürümünün 7.45.18/01.03.2015/XNUMX tarihli XNUMX olduğunu görüyoruz ve aşağıdaki sayı dizisini hatırlıyoruz: 43455 (brcmfmac43455-sdio.bin).

Mevcut Raspbian görüntüsünü indirin. Tembel insanlar görüntüyü microSD'ye yazabilir ve aygıt yazılımının bulunduğu dosyaları oradan alabilir. Veya görüntünün kök bölümünü Linux'a bağlayabilir ve ihtiyacınız olanı oradan kopyalayabilirsiniz:

# 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

Ortaya çıkan Wi-Fi bağdaştırıcısı ürün yazılımı dosyalarının dizine kopyalanması ve "ahududu" ile değiştirilmesi gerekir. /usr/lib/firmware/brcm/

Gelecekteki yönlendiriciyi yeniden başlatıyoruz ve memnuniyetle gülümsüyoruz:

# 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 

Versiyon: 7.45.154 tarihli 27.02.2018.

Ve tabii ki 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. Ağ yapılandırması ve önümüzdeki zorluklar

Yukarıda anlaştığımız gibi, "ahududu" yerel ağa "kablo" ile bağlanır. Sağlayıcının İnternet erişimini tamamen aynı şekilde sağladığını varsayalım: Genel ağdaki adres, DHCP sunucusu tarafından dinamik olarak verilir (belki de MAC bağlamayla). Bu durumda, ahududunun son kurulumundan sonra, sağlayıcının kablosunu ona "takmanız" yeterlidir ve işlem tamamdır. Kullanarak yetkilendirme sistemd-ağ - ayrı bir makalenin konusu ve burada tartışılmıyor.

Raspberry'nin Wi-Fi arayüz(ler)i yerel bir ağdır ve yerleşik Ethernet adaptörü (eth0) haricidir. Yerel ağı statik olarak numaralandıralım, örneğin: 192.168.0.0/24. Ahududu adresi: 192.168.0.1. Bir DHCP sunucusu harici ağda (İnternet) çalışacaktır.

Adlandırma Tutarlılığı Sorunu и ünlü Guatemalalı programcı - sistem dağıtımlarında ağ arayüzlerini ve hizmetlerini yapılandıran herkesi bekleyen iki sorun.

Paralel kaos (lirik ara söz)Lennart Pottering kendi programını derledi systemd Çok güzel. Bu systemd diğer programları o kadar hızlı başlatır ki, hakemin düdük çalmasından sonra toparlanmaya zamanları olmadığından, engelli parkurlarına bile başlayamadan başlangıçta tökezler ve düşerler.

Ancak cidden, sistemd işletim sisteminin başlangıcında başlatılan süreçlerin agresif paralelleştirilmesi, deneyimli sıralı LSB uzmanları için bir tür "eşek köprüsü" dür. Neyse ki, bu "paralel kaosu" düzene sokmanın her zaman açık olmasa da basit olduğu ortaya çıkıyor.

Sabit adlara sahip iki sanal köprü arayüzü oluşturuyoruz: lan и bitik. Wi-Fi adaptörünü/adaptörlerini birinciye, eth0 “raspberry”yi ikinciye “bağlayacağız”.

/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=evet Yönlendirmeyi etkinleştirmek için çekirdeğe sysctl aracılığıyla ipucu verme ihtiyacını ortadan kaldırır.
MACAdresi= Yorumu kaldıralım ve gerekirse değiştirelim.

İlk önce eth0'ı “bağlıyoruz”. "Tekdüzelik sorununu" hatırlıyoruz ve bu arayüzün yalnızca MAC adresini kullanıyoruz; bu, örneğin şu şekilde bulunabilir:

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

oluşturmak /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Önceki yapılandırma dosyası eth0'ı siliyoruz, Raspberry'yi yeniden başlatıyoruz ve ona ağ erişimi sağlıyoruz (IP adresi büyük olasılıkla değişecektir):

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

5.DNSMASQ

Wi-Fi erişim noktaları oluşturmak için hiçbir şey birkaç tatlı noktanın yerini tutamaz dnsmask + ev sahibi henüz çözemedim. Bence.

Biri unutursa, o zaman...ev sahibi - Wi-Fi bağdaştırıcılarını kontrol eden şey budur (özellikle onları sanal ağa bağlamakla ilgilenir) lan "raspberries"), kablosuz istemcileri yetkilendirir ve kaydeder.

dnsmask — istemcilerin ağ yığınını yapılandırır: IP adreslerini, DNS sunucularını, varsayılan ağ geçidini ve benzeri hizmetleri verir.

Dnsmasq ile başlayalım:

# yum install dnsmasq

Şablon / 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

beğeninize göre düzenleyin.

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

Buradaki "sihir" parametrede yatıyor bağlama-dinamikdnsmasq arka plan programına sistemde görünene kadar beklemesini söyleyen arayüz=lanve başlangıçtan sonra gururlu bir yalnızlık krizinden bayılmadım.

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

6. HOSTAPD

Ve son olarak sihirli hostapd yapılandırmaları. Birisinin bu makaleyi tam da bu değerli satırları aramak için okuduğundan hiç şüphem yok.

Hostapd'ı kurmadan önce “tekdüzelik sorununu” aşmanız gerekiyor. Yerleşik Wi-Fi adaptörü wlan0, ek USB Wi-Fi ekipmanı bağlandığında adını kolayca wlan1 olarak değiştirebilir. Bu nedenle arayüz adlarını şu şekilde düzelteceğiz: (kablosuz) adaptörler için benzersiz adlar bulacağız ve bunları MAC adreslerine bağlayacağız.

Hala wlan0 olan yerleşik Wi-Fi adaptörü için:

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

oluşturmak /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Artık bundan emin olacağız wl0 - Bu yerleşik Wi-Fi'dir. Bundan emin olmak için Raspberry'i yeniden başlatıyoruz.

Düzenlemek:

# yum install hostapd wireless-tools

Yapılandırma dosyası /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

Bir an bile unutmadan Acil Komitesi, ihtiyacımız olan parametreleri değiştirin ve işlevselliği manuel olarak kontrol edin:

# hostapd /etc/hostapd/hostapd.conf

hostapd etkileşimli modda başlayacak ve durumunu konsola yayınlayacaktır. Herhangi bir hata yoksa, AC modunu destekleyen istemciler erişim noktasına bağlanabilecektir. Hostapd'ı durdurmak için - Ctrl-C.

Geriye kalan tek şey sistem başlangıcında hostapd'ı etkinleştirmek. Standart şeyi yaparsanız (systemctl hostapd'ı etkinleştirirseniz), bir sonraki yeniden başlatmanın ardından "kan içinde yuvarlanan" bir iblis ile "tanısını alabilirsiniz"wl0 arayüzü bulunamadı". "Paralel kaosun" bir sonucu olarak hostapd, çekirdeğin kablosuz bağdaştırıcıyı bulmasından daha hızlı başladı.

İnternet çarelerle doludur: arka plan programını başlatmadan önceki zorunlu zaman aşımından (birkaç dakika), arayüzün görünümünü izleyen ve ana bilgisayarı (yeniden) başlatan başka bir arka plan programına kadar. Çözümler oldukça uygulanabilir ama son derece çirkin. Büyük olanı yardıma çağırıyoruz systemd “hedefleri”, “görevleri” ve “bağımlılıkları” ile.

Dağıtım hizmeti dosyasını şuraya kopyalayın: /etc/systemd/system/hostapd.service:

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

ve içeriğini aşağıdaki forma indirgeyin:

[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

Güncellenen hizmet dosyasının büyüsü, hostapd'ın yeni hedefe, yani wl0 arayüzüne dinamik olarak bağlanmasında yatmaktadır. Arayüz göründüğünde daemon başlar, kaybolduğunda durur. Ve bunların hepsi çevrimiçi - sistemi yeniden başlatmaya gerek kalmadan. Bu teknik özellikle USB Wi-Fi adaptörünü Raspberry'e bağlarken faydalı olacaktır.

Şimdi yapabilirsin:

# systemctl enable hostapd
# reboot

7. IPTABLE'LAR

"Ne???" © Evet, evet! Hiçbiri systemd. Yeni çıkmış kombinasyon yok (formda güvenlik duvarı), sonuçta aynı şeyi yapıyor.

Eski güzel olanı kullanalım iptablesHizmetleri başladıktan sonra ağ kurallarını çekirdeğe yükleyecek ve yerleşik kalmadan ve kaynak tüketmeden sessizce kapanacak. systemd zarif bir yapıya sahiptir IPMaskeli Balo=, ancak yine de adres çevirisini (NAT) ve güvenlik duvarını iptables'a emanet edeceğiz.

Düzenlemek:

# yum install iptables-services
# systemctl enable iptables ip6tables

İptables yapılandırmasını bir komut dosyası olarak saklamayı tercih ederim (örnek):

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

Yukarıdaki betiği çalıştırıyoruz ve Raspberry ile yeni kablolu SSH bağlantıları kurma yeteneğimizi kaybediyoruz. Doğru, erişimin "İnternet üzerinden" varsayılan olarak yasak olduğu bir Wi-Fi yönlendirici yaptık - artık yalnızca "kablosuz". Sağlayıcının Ethernet kablosunu bağlayıp sörf yapmaya başlıyoruz!

8. Bonus: +2,4 GHz

Yukarıda açıklanan çizimi kullanarak ilk Raspberry yönlendiriciyi monte ettiğimde, evimde Wi-Fi tasarım sınırlamaları nedeniyle "ahududu" yu hiç göremeyen bir dizi gadget keşfettim. Yönlendiriciyi 802.11b/g/n'de çalışacak şekilde yeniden yapılandırmak pek sportmence değildi, çünkü bu durumda "kablo üzerinden" maksimum hız 40 Mbit'i geçmedi ve en sevdiğim İnternet sağlayıcısı bana 100 (kablo aracılığıyla) teklif etti.

Aslında soruna bir çözüm zaten icat edildi: 2,4 GHz frekansında çalışan ikinci bir Wi-Fi arayüzü ve ikinci bir erişim noktası. Yakındaki bir durakta karşılaştığım ilk değil, ikinci USB Wi-Fi "ıslığını" satın aldım. Satıcı, yonga seti, ARM Linux çekirdekleriyle uyumluluk ve AP modunda çalışma olasılığı hakkındaki sorulardan dolayı eziyet çekti (ilk başlayan oydu).

“Düdüğü” yerleşik Wi-Fi adaptörüne benzeterek yapılandırıyoruz.

Öncelikle adını şu şekilde değiştirelim: 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

Yeni Wi-Fi arayüzünün yönetimini, sistemde kesin olarak tanımlanmış bir "ıslık" varlığına bağlı olarak başlayacak ve duracak olan ayrı bir hostapd arka plan programına emanet edeceğiz: wl1.

Yapılandırma dosyası /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]

Bu dosyanın içeriği doğrudan USB Wi-Fi adaptörünün modeline bağlıdır, bu nedenle sıradan bir kopyalama/yapıştır işlemi başarısız olabilir.

Dağıtım hizmeti dosyasını şuraya kopyalayın: /etc/systemd/system/hostapd2.service:

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

ve içeriğini aşağıdaki forma indirgeyin:

[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

Geriye kalan tek şey yeni bir hostapd örneğini etkinleştirmek:

# systemctl enable hostapd2

Bu kadar! “Düdüğü” ve “ahududu”yu çekin, etrafınızdaki kablosuz ağlara bakın.

Son olarak Raspberry'nin USB Wi-Fi adaptörünün ve güç kaynağının kalitesi konusunda sizi uyarmak istiyorum. Bağlanan “sıcak düdük” bazen kısa süreli elektrik arızalarından dolayı “ahududu donmasına” neden olabilir.

Kaynak: habr.com

Yorum ekle