Raspberry Pi + CentOS = Wi-Fi Hotspot (atau penghala raspberi dengan topi merah)

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).

Raspberry Pi + CentOS = Wi-Fi Hotspot (atau penghala raspberi dengan topi merah)
(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

Laman utama projek

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 pemasa systemd, boleh menetapkan apa yang hilang. / var / log- dan lihat melalui jurnalctl. Jika anda memerlukan sejarah log (secara lalai, maklumat disimpan hanya dari saat sistem bermula):

# 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).

Muat turun imej Raspbian semasa. Orang yang malas boleh menulis imej ke microSD dan mengambil fail dengan perisian tegar dari sana. Atau anda boleh melekapkan partition akar imej dalam Linux dan menyalin apa yang anda perlukan 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

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).

Masalah Konsistensi Penamaan ΠΈ pengaturcara Guatemala yang terkenal - dua masalah yang menanti sesiapa yang mengkonfigurasi antara muka rangkaian dan perkhidmatan dalam pengedaran systemd.

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...hostapd - ini adalah perkara yang mengawal penyesuai Wi-Fi (khususnya, ia akan menguruskan untuk menyambungkannya ke maya lan "raspberi"), membenarkan dan mendaftarkan pelanggan wayarles.

dnsmasq β€” mengkonfigurasikan susunan rangkaian pelanggan: mengeluarkan alamat IP, pelayan DNS, gerbang lalai dan keseronokan yang serupa.

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 Jawatankuasa Kecemasan Negeri, tukar parameter yang kami perlukan dan semak kefungsian secara manual:

# 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

Tambah komen