Raspberry Pi + CentOS = Wi-Fi Hotspot (atau Router Raspberry dengan Topi Merah)

Ada banyak informasi di Internet tentang membuat titik akses Wi-Fi berdasarkan pada PC Raspberry papan tunggal. Sebagai aturan, ini menyiratkan penggunaan sistem operasi asli untuk Raspberry - Raspbian.

Menjadi penganut sistem berbasis RPM, saya tidak bisa melewati keajaiban kecil ini dan tidak mencoba CentOS favorit saya.

Artikel ini memberikan instruksi untuk membuat router Wi-Fi 5GHz / AC dari Raspberry Pi 3 Model B + berdasarkan sistem operasi CentOS. Akan ada beberapa trik standar, tetapi sedikit diketahui, dan sebagai bonus - gambar menghubungkan ke peralatan Wi-Fi tambahan "raspberry", yang memungkinkannya untuk bekerja secara bersamaan dalam beberapa mode (2,4 + 5GHz).

gambar
(campuran gambar dari akses gratis)

Kami segera mencatat bahwa beberapa kecepatan kosmik tidak akan berfungsi. Saya memeras maksimum 100 Mbit dari "raspberry" saya di udara, dan ini mencakup kecepatan penyedia Internet saya. Mengapa kita membutuhkan AC yang lamban, jika bahkan pada N, secara teori, Anda bisa mendapatkan setengah gigabyte? Jika Anda menanyakan pertanyaan ini, maka pergi ke toko untuk router nyata dengan delapan antena eksternal.

0. Apa yang dibutuhkan


  • Sebenarnya, "produk raspberry" kaliber itu sendiri: Pi 3 Model B + (untuk mencapai kecepatan dan saluran 5GHz yang didambakan);
  • MicroSD padat> = 4GB;
  • Linux workstation dengan pembaca / penulis microSD;
  • Kehadiran keterampilan yang memadai di Linux, artikel ini disiapkan untuk Geek;
  • Konektivitas jaringan kabel (eth0) antara Raspberry dan Linux, server DHCP yang berfungsi pada jaringan lokal, dan akses Internet dari kedua perangkat.

Komentar singkat tentang poin terakhir. โ€œApa yang datang lebih dulu, telur atau ...โ€ bagaimana membuat router Wi-Fi tanpa adanya peralatan akses Internet? Mari kita tinggalkan latihan yang menghibur ini di luar ruang lingkup artikel dan anggap saja Raspberry terhubung ke jaringan lokal melalui kabel dan memiliki akses Internet. Dalam hal ini, kami tidak memerlukan TV tambahan dan manipulator untuk menyiapkan raspberry.

1. Instal CentOS


Beranda proyek

Pada saat penulisan ini, versi kerja CentOS pada perangkat adalah 32-bit. Di suatu tempat di luasnya World Wide Web, saya menemukan pendapat tentang penurunan kinerja OS tersebut pada arsitektur ARM 64-bit sebanyak 20%. Saya akan meninggalkan titik ini tanpa komentar.

Di Linux, unduh gambar minimal dengan kernel " -RaspberryPI- " dan tulis ke microSD:

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

Sebelum menggunakan gambar, hapus bagian SWAP dari itu, perluas root ke seluruh volume yang tersedia dan singkirkan SELinux. Algoritma ini sederhana: kami membuat salinan root di Linux, menghapus semua partisi dari microSD kecuali yang pertama (/ boot), membuat root baru dan mengembalikan isinya dari salinan.

Contoh tindakan yang diperlukan (output konsol yang keras)
 # 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 

Setelah membongkar isi partisi root, saatnya untuk melakukan beberapa perubahan padanya.

Nonaktifkan SELinux di / mnt / etc / selinux / config :

 SELINUX=disabled 

Kami mengedit / mnt / etc / fstab , hanya menyisakan dua entri partisi di dalamnya: boot (/ boot, tidak berubah) dan root (ubah nilai UUID, yang dapat ditemukan dengan memeriksa output dari perintah blkid di Linux):

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

Terakhir, kami mengubah parameter boot kernel: tentukan lokasi baru partisi root, nonaktifkan output informasi debug, dan (opsional) melarang kernel untuk menetapkan alamat IPv6 pada antarmuka jaringan:

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

Kami membawa konten /mnt/cmdline.txt ke formulir berikut (satu baris tanpa tanda hubung):

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

Selesai:

 # cd # umount /mnt # sync 


Kami mengatur ulang microSD di "Malinka", menjalankannya dan mendapatkan akses jaringan ke sana melalui ssh (root / centos).

2. Mengkonfigurasi CentOS


Tiga gerakan pertama yang tidak tergoyahkan: passwd , pembaruan yum -y , reboot .

Kami memberikan manajemen jaringan ke networkd :

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

Buat file (bersama dengan direktori) /etc/systemd/network/eth0.network :

 [Match] Name=eth0 [Network] DHCP=ipv4 

Kami me-reboot "raspberry" dan sekali lagi kami mendapatkan akses jaringan ke sana melalui ssh (alamat IP dapat berubah). Perhatikan bahwa /etc/resolv.conf , yang sebelumnya dibuat oleh Network Manager, digunakan. Karena itu, jika ada masalah dengan penyelesaian, edit isinya. Kami tidak akan menggunakan systemd-diselesaikan .

Kami menghapus "berlebihan", memperbaiki dan mempercepat pemuatan 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 

Siapa yang butuh cron dan siapa yang tidak mencerna timer systemd bawaan , dapat menginstal yang hilang. / var / log - dan lihat jurnalctl . Jika Anda memerlukan riwayat log (secara default, informasi disimpan hanya dari saat sistem dimulai):

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

Nonaktifkan penggunaan IPv6 oleh layanan inti (jika diperlukan)
/ etc / ssh / sshd_config :

 AddressFamily inet 

/ etc / sysconfig / chronyd :
 OPTIONS="-4" 


Relevansi waktu pada "raspberry" adalah hal yang penting. Karena "di luar kotak" tidak ada kemampuan perangkat keras untuk menyimpan keadaan jam saat ini saat reboot, Anda perlu sinkronisasi. Daemon yang sangat bagus dan cepat untuk ini - chrony - sudah diinstal dan mulai secara otomatis. Anda dapat mengubah server NTP ke yang berikutnya.

/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 

Kami akan menggunakan trik untuk mengatur zona waktu. Karena tujuan kami adalah membuat router Wi-Fi yang beroperasi pada frekuensi 5GHz, kami akan mempersiapkan terlebih dahulu untuk kejutan regulator :
# yum info crda
Ringkasan: Daemon kepatuhan peraturan untuk jaringan nirkabel 802.11

Desain dengki ini, dengan fokus, antara lain, pada zona waktu, "melarang" penggunaan (di Rusia) frekuensi dan saluran 5GHz dengan angka "besar". Caranya adalah dengan mengatur zona waktu tanpa menggunakan nama-nama daratan / kota, yaitu, bukannya:

 # timedatectl set-timezone Europe/Moscow 

Tekan:

 # timedatectl set-timezone Etc/GMT-3 

Dan sentuhan terakhir dalam gaya rambut sistem:

 # hostnamectl set-hostname router 

/root/.bash_profile :

 . . . # User specific environment and startup programs export PROMPT_COMMAND="echo -n $(($(</sys/class/thermal/thermal_zone0/temp) / 1000))\'C\ " export LANG=en_US.UTF-8 export PATH=$PATH:$HOME/bin 

3. Pengaya CentOS


Semua yang dikatakan di atas dapat dianggap sebagai instruksi lengkap untuk menginstal "vanilla" CentOS pada Raspberry Pi. Anda harus memiliki PC yang melakukan booting dalam waktu kurang dari 10 detik, menggunakan RAM kurang dari 15 megabytes dan 1,5 GB microSD (sebenarnya kurang dari 1 gigabyte karena tidak lengkap / boot, tetapi kami akan jujur โ€‹โ€‹sampai akhir):






Untuk menginstal perangkat lunak titik akses Wi-Fi pada sistem ini, Anda perlu sedikit memperluas kemampuan distribusi CentOS standar. Pertama-tama, โ€œpompaโ€ driver (firmware) dari adaptor Wi-Fi bawaan. Situs proyek mengatakan:
Wifi di Raspberry 3B dan 3B +

File firmware Raspberry PI 3B / 3B + tidak diizinkan untuk didistribusikan oleh Proyek CentOS. Anda dapat menggunakan artikel berikut ini untuk memahami masalah ini, mendapatkan firmware dan mengatur wifi.

Apa yang tidak dapat dilakukan proyek CentOS tidak dilarang bagi kami untuk penggunaan pribadi. Kami mengganti distribusi Wi-Fi firmware di CentOS dengan yang sesuai dari pengembang Broadcom (gumpalan biner yang sama dibenci ...). Ini, khususnya, akan memungkinkan penggunaan AC dalam mode titik akses.

Pembaruan firmware Wi-Fi
Kami mengetahui model perangkat dan versi firmware saat ini:

 # 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 

Kami melihat bahwa versi firmware adalah 7.45.18 tanggal 03/01/2015, dan kami mengingat serangkaian angka berikut: 43455 (brcmfmac43455-sdio.bin).

Unduh gambar Raspbian saat ini . Orang malas dapat menulis gambar ke microSD dan dari sana mengambil file dengan firmware. Dan Anda dapat me-mount partisi root dari gambar di Linux dan menyalin yang Anda butuhkan dari sana:

 # 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 

File firmware yang dihasilkan untuk adaptor Wi-Fi harus disalin dengan penggantian "raspberry" di direktori / usr / lib / firmware / brcm /

Kami me-reboot router yang akan datang dan lebih banyak tersenyum:

 # 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 

Versi: 7.45.154 dari 02.27.2018.

Dan tentu saja 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. Konfigurasi Jaringan dan Tantangan Mendatang


Seperti yang kami sepakati di atas, "Malinka" dihubungkan oleh "kawat" ke jaringan lokal. Misalkan penyedia menyediakan akses Internet dengan cara yang persis sama: alamat pada jaringan publik secara dinamis dikeluarkan oleh server DHCP (dapat dihubungkan ke MAC). Dalam hal ini, setelah pengaturan akhir "raspberry", cukup untuk "mencolokkan" kabel penyedia ke dalamnya dan semuanya siap. Otorisasi menggunakan systemd-networkd adalah topik dari artikel terpisah dan tidak dipertimbangkan di sini.

Antarmuka Wi-Fi Raspberry adalah jaringan lokal, dan adaptor Ethernet bawaan (eth0) bersifat eksternal. Kami memberi nomor jaringan lokal secara statis, misalnya: 192.168.0.0/24. Alamat Malinka: 192.168.0.1. Dalam jaringan eksternal (Internet) server DHCP akan berfungsi.

Masalah keseragaman penamaan dan programmer Guatemala terkenal adalah dua masalah menunggu semua orang yang terlibat dalam mengkonfigurasi antarmuka jaringan dan layanan dalam distribusi systemd.

Kekacauan Paralel (penyimpangan liris)
Lennart Pottering membuat program systemd- nya dengan sangat baik. Systemd ini meluncurkan program-program lain dengan sangat cepat sehingga mereka, karena tidak punya waktu untuk menyadarinya dari peluit wasit, tersandung dan jatuh di awal bahkan tanpa memulai rintangan mereka.

Tapi serius, paralelisasi agresif dari proses yang diluncurkan pada awal systemd-OS adalah semacam "jembatan keledai" untuk driver LSB seri berpengalaman. Untungnya, merapikan "kekacauan paralel" ini ternyata sederhana, meskipun kebenarannya tidak selalu jelas.

Kami membuat dua antarmuka jembatan virtual dengan nama konstan: lan dan wan . Kami akan "menghubungkan" adapter Wi-Fi ke yang pertama, dan eth0 dari "raspberry" ke yang kedua.

/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 = yes menghilangkan kebutuhan untuk mengisyaratkan ke kernel melalui sysctl untuk mengaktifkan routing.
MACAddress = batalkan komentar dan ubah jika perlu.

Pertama, kami menghubungkan eth0. Ingat "masalah keseragaman" dan hanya gunakan alamat MAC dari antarmuka ini, yang dapat Anda temukan, misalnya, seperti ini:

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

Buat /etc/systemd/network/eth.network :

 [Match] MACAddress=b8:27:eb:xx:xx:xx [Network] Bridge=wan 

Hapus file konfigurasi eth0 sebelumnya, reboot "raspberry" dan dapatkan akses jaringan ke sana (kemungkinan alamat IP akan berubah):

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

5. DNSMASQ


Untuk pembuatan titik akses Wi-Fi, belum ada yang lebih baik dari pasangan manis dari dnsmasq + hostapd yang belum ditemukan. Menurut saya.

Jika ada yang lupa, maka ...
hostapd adalah hal yang mengelola adapter Wi-Fi (khususnya, akan menyulitkan untuk menghubungkannya ke ran virtual raspberry), itu mengotorisasi dan mendaftarkan klien nirkabel.

dnsmasq - mengkonfigurasi tumpukan jaringan klien: memberikan alamat IP, server DNS, gateway default, dan sejenisnya.

Kita mulai dengan dnsmasq:

 # yum install dnsmasq 

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

edit sesuai keinginan Anda.

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

"Magic" di sini adalah parameter bind-dynamic , yang memberitahu daemon dnsmasq untuk menunggu interface = lan muncul di sistem, dan tidak pingsan karena serangan kesepian yang bangga setelah permulaan.

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

6. HOSTAPD


Akhirnya, konfigurasi hostapd ajaib. Saya tidak ragu bahwa seseorang sedang membaca artikel ini untuk mencari garis-garis berharga ini.

Sebelum menginstal hostapd, Anda harus berurusan dengan "masalah keseragaman". Adaptor Wi-Fi wlan0 built-in dapat dengan mudah mengubah namanya menjadi wlan1 saat menghubungkan peralatan USB Wi-Fi tambahan. Oleh karena itu, kami akan memperbaiki nama-nama antarmuka dengan cara berikut: kami akan datang dengan (nirkabel) adapter nama unik dan mengikatnya ke alamat MAC.

Untuk adaptor Wi-Fi bawaan, yang masih wlan0:

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

Buat /etc/systemd/network/wl0.link :

 [Match] MACAddress=b8:27:eb:xx:xx:xx [Link] Name=wl0 

Sekarang kita akan yakin bahwa wl0 adalah Wi-Fi bawaan . Kami me-reboot "raspberry" untuk melihat ini.

Pasang:

 # yum install hostapd wireless-tools 

File konfigurasi /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 

Tanpa melupakan GKChP selama satu menit, kami mengubah parameter yang kami butuhkan dan memeriksa kinerja secara manual:

 # hostapd /etc/hostapd/hostapd.conf 

hostapd akan mulai secara interaktif, menerjemahkan kondisinya ke konsol. Jika tidak ada kesalahan, maka klien yang mendukung mode AC sudah dapat terhubung ke titik akses. Untuk menghentikan hostapd - Ctrl-C.

Masih memasukkan hostapd dalam startup sistem. Jika Anda bertindak secara standar (systemctl aktifkan hostapd), maka setelah reboot berikutnya, Anda bisa mendapatkan "daemon dalam darah" iblis dengan diagnosis " antarmuka wl0 tidak ditemukan ." Sebagai hasil dari "kekacauan paralel," hostapd berakhir lebih cepat daripada kernel menemukan adaptor nirkabel.

Internet penuh dengan obat-obatan: dari penghentian waktu paksa sebelum daemon dimulai (selama beberapa menit), ke daemon lain yang memantau tampilan antarmuka dan (kembali) memulai hostpad. Solusinya cukup berhasil, tetapi sangat jelek. Kami meminta bantuan systemd yang hebat dengan "tujuan" dan " tugas " "ketergantungannya".

Salin file layanan distribusi ke /etc/systemd/system/hostapd.service :

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

dan bawa isinya ke formulir berikut:

 [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 

Keajaiban dari file layanan yang diperbarui adalah untuk secara dinamis mengikat hostapd ke target baru - antarmuka wl0. Ketika antarmuka muncul, daemon mulai, ketika menghilang, itu berhenti. Dan semuanya online - tanpa me-reboot sistem. Khususnya teknik ini akan berguna saat menghubungkan ke adaptor Wi-Fi USB "raspberry".

Sekarang kamu bisa:

 # systemctl enable hostapd # reboot 

7. IPTABLES


"Shta ???" ยฉ Ya, ya! Tidak ada sistemd . Tidak ada kombinasi model baru (dalam bentuk firewalld ), yang pada akhirnya melakukan hal yang sama.

Kami menggunakan iptables lama yang baik, layanan yang, setelah dimulainya, akan mengunggah aturan jaringan ke kernel dan diam-diam dimatikan tanpa penduduk tetap dan tanpa menghabiskan sumber daya. Systemd memiliki IPMasquerade = yang elegan, tetapi kami masih akan mempercayakan iptables dengan terjemahan alamat (NAT) dan firewall.

Pasang:

 # yum install iptables-services # systemctl enable iptables ip6tables 

Saya lebih suka menyimpan konfigurasi iptables sebagai skrip (contoh):

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

Kami menjalankan skrip di atas dan kehilangan kemampuan untuk membangun koneksi ssh kabel baru dengan "Malinka". Itu benar, kami membuat router Wi-Fi, akses yang "via Internet" secara default dilarang - sekarang hanya "melalui udara." Kami menghubungkan kabel penyedia ke Ethernet dan mulai berselancar!

8. Bonus: + 2.4GHz


Ketika saya merakit router Raspberry pertama dari gambar yang dijelaskan di atas, saya menemukan di peternakan saya sejumlah gadget bahwa, karena keterbatasan desain mereka, Wi-Fi tidak bisa melihat "raspberry" sama sekali. Mengkonfigurasi ulang router agar berfungsi di 802.11b / g / n tidak seperti olahraga, karena kecepatan maksimum "over the air" dalam kasus ini tidak melebihi 40 Mbps, dan penyedia Internet favorit saya menawarkan saya 100 (melalui kabel).

Bahkan, solusi untuk masalah telah ditemukan: antarmuka Wi-Fi kedua yang beroperasi pada 2,4GHz, dan titik akses kedua. Di warung terdekat, saya membeli bukan yang pertama, tetapi โ€œpeluitโ€ USB Wi-Fi kedua yang datang kepada saya. Penjual tersiksa oleh pertanyaan tentang chipset, kompatibilitas dengan Linux ARM-core dan kemungkinan bekerja dalam mode AP (ia pertama kali memulai).

Kami mengonfigurasi "peluit" dengan analogi dengan adaptor Wi-Fi bawaan.

Pertama, ubah nama menjadi 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 

Kami akan mempercayakan pengelolaan antarmuka Wi-Fi baru ke daemon hostapd terpisah, yang akan mulai dan berhenti tergantung pada keberadaan "peluit" yang didefinisikan secara ketat dalam sistem: wl1.

File konfigurasi /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] 

Isi file ini secara langsung tergantung pada model adaptor Wi-Fi USB, sehingga salinan / tempel yang sepele dapat mengecewakan Anda.

Salin file layanan distribusi ke /etc/systemd/system/hostapd2.service :

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

dan bawa isinya ke formulir berikut:

 [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 

Tetap menyertakan contoh baru hostapd:

 # systemctl enable hostapd2 

Itu saja! Tarik peluit dan raspberry itu sendiri, lihat jaringan nirkabel di sekitarnya.

Dan akhirnya, saya ingin memperingatkan tentang kualitas adaptor Wi-Fi USB dan catu daya Raspberry. Terhubung "ke peluit panas", kadang-kadang dapat menyebabkan "raspberry hang" karena masalah listrik jangka pendek.

Source: https://habr.com/ru/post/id458994/


All Articles