Terdapat sejumlah besar maklumat di Internet tentang mencipta titik akses Wi-Fi berdasarkan PC papan tunggal Raspberry. Sebagai peraturan, ini bermakna menggunakan sistem pengendalian Raspbian yang berasal dari Raspberry.
Sebagai penganut sistem berasaskan RPM, saya tidak dapat melewati keajaiban kecil ini dan tidak mencuba CentOS kesayangan saya padanya.
Artikel ini menyediakan arahan untuk membuat penghala Wi-Fi 5GHz/AC daripada Raspberry Pi 3 Model B+ berdasarkan sistem pengendalian CentOS. Akan ada beberapa helah standard tetapi kurang diketahui, dan sebagai bonus - lukisan untuk menyambungkan peralatan Wi-Fi tambahan ke Raspberry, membolehkannya beroperasi secara serentak dalam beberapa mod (2,4+5GHz).
(campuran imej yang tersedia secara percuma)
Mari kita ambil perhatian segera bahawa beberapa halaju kosmik tidak akan berfungsi. Saya memerah maksimum 100 Mbps daripada Raspberry saya melalui udara, dan ini meliputi kelajuan pembekal Internet saya. Mengapa anda memerlukan AC yang lembap, jika secara teori anda boleh mendapat setengah gigabit walaupun pada N? Jika anda telah bertanya kepada diri sendiri soalan ini, kemudian pergi ke kedai untuk membeli penghala sebenar dengan lapan antena luaran.
0. Apa yang anda perlukan
- Sebenarnya, "produk raspberi" itu sendiri adalah berkaliber: Pi 3 Model B+ (untuk mencapai kelajuan dan saluran 5GHz yang diidamkan);
- microSD yang baik >= 4GB;
- Stesen kerja dengan Linux dan pembaca/penulis microSD;
- Ketersediaan kemahiran yang mencukupi dalam Linux, artikel itu adalah untuk Geek terlatih;
- Kesambungan rangkaian berwayar (eth0) antara Raspberry dan Linux, menjalankan pelayan DHCP pada rangkaian tempatan dan akses Internet daripada kedua-dua peranti.
Komen kecil pada point terakhir. "Yang datang dahulu, telur atau..." bagaimana untuk membuat penghala Wi-Fi tanpa ketiadaan peralatan akses Internet? Mari tinggalkan latihan menghiburkan ini di luar skop artikel dan anggap sahaja Raspberry disambungkan ke rangkaian tempatan melalui wayar dan mempunyai akses ke Internet. Dalam kes ini, kami tidak memerlukan TV tambahan dan manipulator untuk menyediakan "raspberi".
1. Pasang CentOS
Pada masa menulis artikel ini, versi berjalan CentOS pada peranti adalah 32-bit. Di suatu tempat di World Wide Web saya menemui pendapat bahawa prestasi OS sedemikian pada seni bina ARM 64-bit dikurangkan sebanyak 20%. Saya akan meninggalkan masa ini tanpa komen.
Di Linux, muat turun imej minimum dengan kernel "-Pai raspberi-"dan tuliskannya ke microSD:
# xzcat CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz |
dd of=/dev/mmcblk0 bs=4M
# sync
Sebelum mula menggunakan imej, kami akan mengalih keluar partition SWAP daripadanya, mengembangkan akar kepada keseluruhan volum yang tersedia dan menyingkirkan SELinux. Algoritmanya mudah: buat salinan root pada Linux, padam semua partition daripada microSD kecuali yang pertama (/boot), buat root baharu dan kembalikan kandungannya daripada salinan.
Contoh tindakan yang diperlukan (output konsol yang teruk)
# 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
Selepas membongkar kandungan partition root, sudah tiba masanya untuk membuat beberapa perubahan padanya.
Lumpuhkan SELinux dalam /mnt/etc/selinux/config:
SELINUX=disabled
Mengedit /mnt/etc/fstab, meninggalkan hanya dua entri tentang partition: boot (/boot, tiada perubahan) dan root (kami menukar nilai UUID, yang boleh didapati dengan mengkaji output arahan blkid di Linux):
UUID=6a1a0694-8196-4724-a58d-edde1f189b31 / ext4 defaults,noatime 0 0
UUID=6938-F4F2 /boot vfat defaults,noatime 0 0
Akhir sekali, kami menukar parameter but kernel: kami menentukan lokasi baharu untuk partition root, melumpuhkan output maklumat penyahpepijatan dan (secara pilihan) melarang kernel daripada memberikan alamat IPv6 pada antara muka rangkaian:
# cd
# umount /mnt
# mount /dev/mmcblk0p1 /mnt
Inilah kandungannya /mnt/cmdline.txt kepada bentuk berikut (satu baris tanpa tanda sempang):
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet ipv6.disable_ipv6=1
Selesai:
# cd
# umount /mnt
# sync
Kami menyusun semula microSD ke dalam "raspberi", melancarkannya dan mendapatkan akses rangkaian kepadanya melalui ssh (root/centos).
2. Menyediakan CentOS
Tiga pergerakan pertama yang tidak tergoyahkan: passwd, yum -y update, reboot.
Kami memberikan pengurusan rangkaian rangkaiand:
# yum install systemd-networkd
# systemctl enable systemd-networkd
# systemctl disable NetworkManager
# chkconfig network off
Buat fail (bersama dengan direktori) /etc/systemd/network/eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Kami but semula "raspberi" dan sekali lagi mendapatkan akses rangkaian kepadanya melalui ssh (alamat IP mungkin berubah). Perhatikan apa yang digunakan /etc/resolv.conf, dicipta lebih awal oleh Pengurus Rangkaian. Oleh itu, sekiranya terdapat masalah dengan penyelesaian, edit kandungannya. guna diselesaikan secara sistematik kami tidak akan.
Kami mengalih keluar "tidak perlu", membaiki dan mempercepatkan 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 perlukan cron dan yang tidak mencerna yang terbina dalam
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
# vi /etc/systemd/journald.conf
Lumpuhkan penggunaan IPv6 oleh perkhidmatan asas (jika diperlukan)/ etc / ssh / sshd_config:
AddressFamily inet
/etc/sysconfig/chronyd:
OPTIONS="-4"
Perkaitan masa pada "raspberi" adalah satu perkara yang penting. Memandangkan di luar kotak tidak ada keupayaan perkakasan untuk menyimpan keadaan semasa jam semasa but semula, penyegerakan diperlukan. Daemon yang sangat baik dan pantas untuk ini adalah kroni - sudah dipasang dan bermula secara automatik. Anda boleh menukar pelayan NTP kepada yang terdekat.
/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
Untuk menetapkan zon waktu yang akan kami gunakan tipu helah. Memandangkan matlamat kami adalah untuk mencipta penghala Wi-Fi yang beroperasi pada frekuensi 5GHz, kami akan bersedia untuk kejutan lebih awal pengawal selia:
# yum info crda
Ringkasan: Daemon pematuhan kawal selia untuk rangkaian wayarles 802.11
Reka bentuk jahat ini, juga berdasarkan zon waktu, "melarang" penggunaan (di Rusia) frekuensi dan saluran 5GHz dengan nombor "tinggi". Caranya ialah dengan menetapkan zon waktu tanpa menggunakan nama benua/bandar, iaitu, bukannya:
# timedatectl set-timezone Europe/Moscow
Kami tekan:
# timedatectl set-timezone Etc/GMT-3
Dan sentuhan terakhir pada gaya rambut sistem:
# 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. Alat tambah CentOS
Semua yang dinyatakan di atas boleh dianggap sebagai arahan lengkap untuk memasang CentOS "vanila" pada Raspberry Pi. Anda sepatutnya mempunyai PC yang (semula) but dalam masa kurang daripada 10 saat, menggunakan kurang daripada 15 Megabait RAM dan 1.5 Gigabait microSD (sebenarnya kurang daripada 1 Gigabait disebabkan oleh /boot yang tidak lengkap, tetapi jujurlah).
Untuk memasang perisian pusat akses Wi-Fi pada sistem ini, anda perlu mengembangkan sedikit keupayaan pengedaran CentOS standard. Pertama sekali, mari kita tingkatkan pemacu (perisian tegar) penyesuai Wi-Fi terbina dalam. Halaman utama projek berkata:
Wifi pada Raspberry 3B dan 3B+
Fail perisian tegar Raspberry PI 3B/3B+ tidak dibenarkan untuk diedarkan oleh Projek CentOS. Anda boleh menggunakan artikel berikut untuk memahami isu ini, mendapatkan perisian tegar dan menyediakan wifi.
Apa yang dilarang untuk projek CentOS tidak dilarang untuk kami untuk kegunaan peribadi. Kami menggantikan perisian tegar Wi-Fi pengedaran dalam CentOS dengan yang sepadan daripada pembangun Broadcom (gumpalan binari yang dibenci yang sama...). Ini, khususnya, akan membolehkan anda menggunakan AC dalam mod titik akses.
Peningkatan perisian tegar Wi-FiKetahui model peranti dan versi perisian tegar semasa:
# 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 bahawa versi perisian tegar ialah 7.45.18 bertarikh 01.03.2015/XNUMX/XNUMX, dan ingat set nombor berikut: 43455 (brcmfmac43455-sdio.bin).
# 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
Fail perisian tegar penyesuai Wi-Fi yang terhasil mesti disalin dan digantikan dengan "raspberi" ke dalam direktori /usr/lib/firmware/brcm/
Kami but semula penghala masa depan dan tersenyum puas:
# 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 bertarikh 27.02.2018/XNUMX/XNUMX.
Dan sudah tentu 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 rangkaian dan cabaran di hadapan
Seperti yang kita bersetuju di atas, "raspberi" disambungkan dengan "wayar" ke rangkaian tempatan. Mari kita anggap bahawa pembekal menyediakan akses Internet dengan cara yang sama: alamat pada rangkaian awam dikeluarkan secara dinamik oleh pelayan DHCP (mungkin dengan pengikatan MAC). Dalam kes ini, selepas persediaan akhir raspberi, anda hanya perlu "memasang" kabel pembekal ke dalamnya dan anda sudah selesai. Kebenaran menggunakan systemd-networkd - topik artikel berasingan dan tidak dibincangkan di sini.
Antara muka Wi-Fi Raspberry ialah rangkaian tempatan dan penyesuai Ethernet terbina dalam (eth0) adalah luaran. Mari kita nombor rangkaian tempatan secara statik, contohnya: 192.168.0.0/24. Alamat Raspberry: 192.168.0.1. Pelayan DHCP akan beroperasi pada rangkaian luaran (Internet).
Kekacauan selari (penyimpangan lirik)Lennart Pottering telah menyusun programnya sendiri sistem Sangat bagus. ini sistem melancarkan program-program lain dengan begitu cepat sehingga mereka, tidak mempunyai masa untuk pulih daripada tiupan wisel pengadil, tersandung dan jatuh pada permulaan tanpa memulakan laluan halangan mereka.
Tetapi serius, penyelarasan agresif proses yang dilancarkan pada permulaan OS systemd adalah sejenis "jambatan keldai" untuk pakar LSB berjujukan berpengalaman. Nasib baik, mengatur "kekacauan selari" ini ternyata mudah, walaupun tidak selalu jelas.
Kami mencipta dua antara muka jambatan maya dengan nama tetap: lan ΠΈ wan. Kami akan "menyambungkan" penyesuai Wi-Fi kepada yang pertama, dan eth0 "raspberi" 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=ya menghapuskan keperluan untuk memberi petunjuk kepada kernel melalui sysctl untuk membolehkan penghalaan.
MACAddress= Jom uncomment dan tukar jika perlu.
Mula-mula kita "menyambung" eth0. Kami mengingati "masalah keseragaman" dan hanya menggunakan alamat MAC antara muka ini, yang boleh didapati, sebagai contoh, seperti ini:
# cat /sys/class/net/eth0/address
Kami cipta /etc/systemd/network/eth.network:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Network]
Bridge=wan
Kami memadamkan fail konfigurasi sebelumnya eth0, but semula Raspberry dan dapatkan akses rangkaian kepadanya (alamat IP kemungkinan besar akan berubah):
# rm -fv /etc/systemd/network/eth0.network
# reboot
5.DNSMASQ
Untuk membuat titik akses Wi-Fi, tiada apa yang mengalahkan pasangan yang manis dnsmasq + hostapd belum terfikir lagi. Pada pendapat saya.
Sekiranya ada yang terlupa, maka...
Mari kita mulakan dengan dnsmasq:
# yum install dnsmasq
Sampel /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 ikut kesukaan anda.
minimalistik /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
"Sihir" di sini terletak pada parameter bind-dynamic, yang memberitahu daemon dnsmasq untuk menunggu sehingga ia muncul pada sistem antara muka=lan, dan tidak pengsan kerana kesunyian bangga selepas permulaan.
# systemctl enable dnsmasq
# systemctl start dnsmasq; journalctl -f
6. HOSTAPD
Dan akhirnya, konfigurasi hostapd ajaib. Saya tidak ragu-ragu bahawa seseorang sedang membaca artikel ini untuk mencari dengan tepat baris yang berharga ini.
Sebelum memasang hostapd, anda perlu mengatasi "masalah keseragaman". Penyesuai Wi-Fi terbina dalam wlan0 boleh menukar namanya kepada wlan1 dengan mudah apabila menyambungkan peralatan Wi-Fi USB tambahan. Oleh itu, kami akan membetulkan nama antara muka dengan cara berikut: kami akan menghasilkan nama unik untuk penyesuai (wayarles) dan mengikatnya pada alamat MAC.
Untuk penyesuai Wi-Fi terbina dalam, yang masih wlan0:
# cat /sys/class/net/wlan0/address
b8:27:eb:xx:xx:xx
Kami cipta /etc/systemd/network/wl0.link:
[Match]
MACAddress=b8:27:eb:xx:xx:xx
[Link]
Name=wl0
Sekarang kita akan pastikan itu wl0 - Ini ialah Wi-Fi terbina dalam. Kami but semula Raspberry untuk memastikan perkara ini.
Pasang:
# yum install hostapd wireless-tools
Fail 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 terlupa sesaat
# hostapd /etc/hostapd/hostapd.conf
hostapd akan bermula dalam mod interaktif, menyiarkan keadaannya ke konsol. Jika tiada ralat, maka pelanggan yang menyokong mod AC akan dapat menyambung ke pusat akses. Untuk menghentikan hostapd - Ctrl-C.
Yang tinggal hanyalah untuk mendayakan hostapd dalam permulaan sistem. Jika anda melakukan perkara standard (systemctl enable hostapd), maka selepas but semula seterusnya anda boleh mendapatkan syaitan "bergolek dalam darah" dengan diagnosis "antara muka wl0 tidak ditemui". Akibat daripada "kekacauan selari," hostapd bermula lebih cepat daripada kernel yang menemui penyesuai wayarles.
Internet penuh dengan remedi: daripada tamat masa paksa sebelum memulakan daemon (beberapa minit), kepada daemon lain yang memantau penampilan antara muka dan (semula) memulakan pad hos. Penyelesaiannya agak boleh dilaksanakan, tetapi sangat hodoh. Kami memanggil yang hebat untuk mendapatkan bantuan sistem dengan "matlamat" dan "tugas" dan "pergantungan".
Salin fail perkhidmatan pengedaran ke /etc/systemd/system/hostapd.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system
dan kurangkan kandungannya kepada bentuk 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 fail perkhidmatan yang dikemas kini terletak pada pengikatan dinamik hostapd kepada sasaran baharu - antara muka wl0. Apabila antara muka muncul, daemon bermula; apabila ia hilang, ia berhenti. Dan ini semua dalam talian - tanpa but semula sistem. Teknik ini amat berguna apabila menyambungkan penyesuai Wi-Fi USB ke Raspberry.
Sekarang kamu boleh:
# systemctl enable hostapd
# reboot
7. IPTABLES
βApa???β Β© Ya, ya! tiada sistem. Tiada gabungan bermodel baru (dalam bentuk firewalld), yang akhirnya melakukan perkara yang sama.
Mari kita gunakan yang lama yang baik iptables, yang perkhidmatannya, selepas bermula, akan memuatkan peraturan rangkaian ke dalam kernel dan ditutup secara senyap-senyap tanpa kekal bermastautin dan tanpa menggunakan sumber. systemd mempunyai elegan IPMasquerade=, tetapi kami masih akan mempercayakan terjemahan alamat (NAT) dan tembok api kepada iptables.
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 melaksanakan skrip di atas dan kehilangan keupayaan untuk mewujudkan sambungan SSH berwayar baharu dengan Raspberry. Betul, kami telah membuat penghala Wi-Fi, akses yang "melalui Internet" dilarang secara lalai - kini hanya "melalui udara". Kami menyambungkan kabel Ethernet pembekal dan mula melayari!
8. Bonus: +2,4GHz
Apabila saya memasang penghala Raspberry pertama menggunakan lukisan yang diterangkan di atas, saya menemui beberapa alat dalam rumah saya yang, disebabkan oleh batasan reka bentuk Wi-Fi mereka, tidak dapat melihat "raspberi" sama sekali. Mengkonfigurasi semula penghala untuk berfungsi dalam 802.11b/g/n adalah tidak sporting, kerana kelajuan maksimum "melalui udara" dalam kes ini tidak melebihi 40 Mbit, dan pembekal Internet kegemaran saya menawarkan saya 100 (melalui kabel).
Malah, penyelesaian kepada masalah itu telah pun dicipta: antara muka Wi-Fi kedua yang beroperasi pada frekuensi 2,4 GHz, dan titik akses kedua. Di gerai berdekatan saya bukan membeli yang pertama, tetapi "wisel" Wi-Fi USB kedua yang saya temui. Penjual diseksa oleh soalan mengenai chipset, keserasian dengan kernel ARM Linux dan kemungkinan bekerja dalam mod AP (dia adalah orang pertama yang memulakan).
Kami mengkonfigurasi "wisel" dengan analogi dengan penyesuai Wi-Fi terbina dalam.
Mula-mula, mari kita namakan semula 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 pengurusan antara muka Wi-Fi baharu kepada daemon hostapd yang berasingan, yang akan bermula dan berhenti bergantung pada kehadiran "wisel" yang ditakrifkan dengan ketat dalam sistem: wl1.
Fail 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]
Kandungan fail ini bergantung secara langsung pada model penyesuai Wi-Fi USB, jadi salinan/tampal cetek mungkin gagal anda.
Salin fail perkhidmatan pengedaran ke /etc/systemd/system/hostapd2.service:
# cp -fv /usr/lib/systemd/system/hostapd.service /etc/systemd/system/hostapd2.service
dan kurangkan kandungannya kepada bentuk 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
Yang tinggal hanyalah untuk mendayakan contoh baharu hostapd:
# systemctl enable hostapd2
Itu sahaja! Tarik "wisel" dan "raspberi" itu sendiri, lihat rangkaian wayarles di sekeliling anda.
Dan akhirnya, saya ingin memberi amaran kepada anda tentang kualiti penyesuai Wi-Fi USB dan bekalan kuasa Raspberry. "Wisel panas" yang disambungkan kadangkala boleh menyebabkan "pembekuan raspberi" disebabkan oleh masalah elektrik jangka pendek.
Sumber: www.habr.com