Raspberry Pi + CentOS = Wi-Fi Hotspot (ή δρομολογητής raspberry με κόκκινο καπέλο)

Υπάρχει τεράστιος όγκος πληροφοριών στο Διαδίκτυο σχετικά με τη δημιουργία σημείων πρόσβασης Wi-Fi με βάση έναν υπολογιστή μονής πλακέτας Raspberry. Κατά κανόνα, αυτό σημαίνει χρήση του λειτουργικού συστήματος Raspbian που είναι εγγενές στο Raspberry.

Όντας οπαδός των συστημάτων που βασίζονται σε RPM, δεν θα μπορούσα να περάσω από αυτό το μικρό θαύμα και να μην δοκιμάσω το αγαπημένο μου CentOS σε αυτό.

Το άρθρο παρέχει οδηγίες για την κατασκευή ενός δρομολογητή Wi-Fi 5 GHz/AC από ένα Raspberry Pi 3 Model B+ που βασίζεται στο λειτουργικό σύστημα CentOS. Θα υπάρχουν πολλά τυπικά αλλά ελάχιστα γνωστά κόλπα, και ως μπόνους - ένα σχέδιο για τη σύνδεση πρόσθετου εξοπλισμού Wi-Fi στο Raspberry, επιτρέποντάς του να λειτουργεί ταυτόχρονα σε διάφορες λειτουργίες (2,4+5 GHz).

Raspberry Pi + CentOS = Wi-Fi Hotspot (ή δρομολογητής raspberry με κόκκινο καπέλο)
(μίξη από ελεύθερα διαθέσιμες εικόνες)

Ας σημειώσουμε αμέσως ότι ορισμένες κοσμικές ταχύτητες δεν θα λειτουργήσουν. Πιέζω το πολύ 100 Mbps από το Raspberry μου στον αέρα και αυτό καλύπτει την ταχύτητα του παρόχου μου στο Διαδίκτυο. Γιατί χρειάζεσαι ένα τόσο υποτονικό AC, αν θεωρητικά μπορείς να πάρεις μισό gigabit ακόμα και στο N; Εάν έχετε κάνει αυτή την ερώτηση στον εαυτό σας, τότε πηγαίνετε στο κατάστημα για να αγοράσετε ένα πραγματικό ρούτερ με οκτώ εξωτερικές κεραίες.

0. Τι θα χρειαστείτε

  • Στην πραγματικότητα, το ίδιο το «προϊόν βατόμουρου» είναι διαμετρήματος: Pi 3 Model B+ (για την επίτευξη των πολυπόθητων ταχυτήτων και καναλιών 5 GHz).
  • Καλή microSD >= 4 GB;
  • Σταθμός εργασίας με Linux και πρόγραμμα ανάγνωσης/εγγραφής microSD.
  • Διαθεσιμότητα επαρκών δεξιοτήτων σε Linux, το άρθρο είναι για εκπαιδευμένο Geek.
  • Συνδεσιμότητα ενσύρματου δικτύου (eth0) μεταξύ Raspberry και Linux, εκτέλεση διακομιστή DHCP στο τοπικό δίκτυο και πρόσβαση στο Διαδίκτυο και από τις δύο συσκευές.

Ένα μικρό σχόλιο για το τελευταίο σημείο. "Ποιο ήρθε πρώτο, το αυγό ή..." πώς να φτιάξετε έναν δρομολογητή Wi-Fi χωρίς εξοπλισμό πρόσβασης στο Διαδίκτυο; Ας αφήσουμε αυτήν τη διασκεδαστική άσκηση εκτός του πεδίου εφαρμογής του άρθρου και απλώς ας υποθέσουμε ότι το Raspberry είναι συνδεδεμένο στο τοπικό δίκτυο μέσω καλωδίου και έχει πρόσβαση στο Διαδίκτυο. Σε αυτή την περίπτωση, δεν θα χρειαστούμε πρόσθετη τηλεόραση και χειριστή για να ρυθμίσουμε το "βατόμουρο".

1. Εγκαταστήστε το CentOS

Αρχική σελίδα του έργου

Τη στιγμή της σύνταξης αυτού του άρθρου, η εκτελούμενη έκδοση του CentOS στη συσκευή είναι 32-bit. Κάπου στο World Wide Web συνάντησα απόψεις ότι η απόδοση τέτοιων λειτουργικών συστημάτων σε αρχιτεκτονική ARM 64-bit μειώνεται έως και 20%. Θα αφήσω αυτή τη στιγμή χωρίς σχόλια.

Στο Linux, κατεβάστε την ελάχιστη εικόνα με τον πυρήνα "-RaspberryPI-"και γράψτε το σε microSD:

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

Πριν αρχίσουμε να χρησιμοποιούμε την εικόνα, θα αφαιρέσουμε το διαμέρισμα SWAP από αυτό, θα επεκτείνουμε τη ρίζα σε ολόκληρο τον διαθέσιμο τόμο και θα απαλλαγούμε από το SELinux. Ο αλγόριθμος είναι απλός: δημιουργήστε ένα αντίγραφο του root στο Linux, διαγράψτε όλα τα διαμερίσματα από τη microSD εκτός από το πρώτο (/boot), δημιουργήστε μια νέα ρίζα και επιστρέψτε το περιεχόμενό του από το αντίγραφο.

Παράδειγμα απαιτούμενων ενεργειών (σοβαρή έξοδος κονσόλας)

# 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

Αφού αποσυσκευάσετε τα περιεχόμενα του ριζικού διαμερίσματος, ήρθε η ώρα να κάνετε κάποιες αλλαγές σε αυτό.

Απενεργοποιήστε το SELinux in /mnt/etc/selinux/config:

SELINUX=disabled

Επεξεργασία /mnt/etc/fstab, αφήνοντας σε αυτό μόνο δύο καταχωρήσεις σχετικά με τις κατατμήσεις: boot (/boot, no change) και root (αλλάζουμε την τιμή UUID, την οποία μπορούμε να βρούμε μελετώντας την έξοδο της εντολής blkid στο Linux):

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

Τέλος, αλλάζουμε τις παραμέτρους εκκίνησης του πυρήνα: καθορίζουμε μια νέα θέση για το ριζικό διαμέρισμα, απενεργοποιούμε την έξοδο των πληροφοριών εντοπισμού σφαλμάτων και (προαιρετικά) απαγορεύουμε στον πυρήνα να εκχωρεί διευθύνσεις IPv6 στις διεπαφές δικτύου:

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

Εδώ είναι το περιεχόμενο /mnt/cmdline.txt στην ακόλουθη μορφή (μία γραμμή χωρίς παύλες):

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

Τέλος:

# cd
# umount /mnt
# sync

Αναδιατάσσουμε το microSD στο "raspberry", το εκκινούμε και αποκτούμε πρόσβαση δικτύου σε αυτό μέσω ssh (root/centos).

2. Ρύθμιση του CentOS

Οι τρεις πρώτες ακλόνητες κινήσεις: passwd, yum -y ενημέρωση, επανεκκίνηση.

Παρέχουμε διαχείριση δικτύου δικτυωμένα:

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

Δημιουργία αρχείου (μαζί με καταλόγους) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Επανεκκινούμε το "raspberry" και αποκτούμε ξανά πρόσβαση στο δίκτυο μέσω ssh (η διεύθυνση IP μπορεί να αλλάξει). Δώστε προσοχή στο τι χρησιμοποιείται / Etc / resolv.conf, που δημιουργήθηκε νωρίτερα από το Network Manager. Επομένως, σε περίπτωση προβλημάτων με την επίλυση, επεξεργαστείτε τα περιεχόμενά του. Χρήση λυμένο σύστημα εμείς δεν θα.

Αφαιρούμε τα "περιττά", επισκευάζουμε και επιταχύνουμε τη φόρτωση του λειτουργικού συστήματος:

# 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

Ποιος χρειάζεται cron και ποιος δεν χωνεύει το ενσωματωμένο χρονομετρητές συστήματος, μπορεί να διαπιστώσει τι λείπει. / var / log- και κοιτάξτε journalctl. Εάν χρειάζεστε ιστορικό καταγραφής (από προεπιλογή, οι πληροφορίες αποθηκεύονται μόνο από τη στιγμή που ξεκινά το σύστημα):

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

Απενεργοποιήστε τη χρήση του IPv6 από βασικές υπηρεσίες (εάν απαιτείται)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Η συνάφεια του χρόνου με το "βατόμουρο" είναι ένα σημαντικό πράγμα. Δεδομένου ότι εκτός του κουτιού δεν υπάρχει δυνατότητα υλικού για αποθήκευση της τρέχουσας κατάστασης του ρολογιού κατά την επανεκκίνηση, απαιτείται συγχρονισμός. Ένας πολύ καλός και γρήγορος δαίμονας για αυτό είναι chrony - έχει ήδη εγκατασταθεί και ξεκινά αυτόματα. Μπορείτε να αλλάξετε τους διακομιστές NTP στους πλησιέστερους.

/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

Για να ορίσουμε τη ζώνη ώρας που θα χρησιμοποιήσουμε τέχνασμα. Δεδομένου ότι στόχος μας είναι να δημιουργήσουμε έναν δρομολογητή Wi-Fi που θα λειτουργεί σε συχνότητες 5 GHz, θα προετοιμαστούμε για εκπλήξεις εκ των προτέρων ρυθμιστής:

# yum info crda
Περίληψη: Δαίμονας κανονιστικής συμμόρφωσης για ασύρματη δικτύωση 802.11

Αυτός ο κακός σχεδιασμός, που βασίζεται επίσης στη ζώνη ώρας, «απαγορεύει» τη χρήση (στη Ρωσία) συχνοτήτων 5 GHz και καναλιών με «υψηλούς» αριθμούς. Το κόλπο είναι να ορίσετε μια ζώνη ώρας χωρίς να χρησιμοποιήσετε τα ονόματα των ηπείρων/πόλεων, δηλαδή αντί για:

# timedatectl set-timezone Europe/Moscow

Πατάμε:

# timedatectl set-timezone Etc/GMT-3

Και οι τελευταίες πινελιές στο χτένισμα του συστήματος:

# 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

Όλα όσα ειπώθηκαν παραπάνω μπορούν να θεωρηθούν πλήρεις οδηγίες για την εγκατάσταση του CentOS "vanilla" στο Raspberry Pi. Θα πρέπει να καταλήξετε με έναν υπολογιστή που (επανα)εκκινεί σε λιγότερο από 10 δευτερόλεπτα, χρησιμοποιεί λιγότερα από 15 Megabyte RAM και 1.5 Gigabyte microSD (στην πραγματικότητα λιγότερο από 1 Gigabyte λόγω ελλιπούς /εκκίνησης, αλλά ας είμαστε ειλικρινείς).

Για να εγκαταστήσετε λογισμικό σημείου πρόσβασης Wi-Fi σε αυτό το σύστημα, θα χρειαστεί να επεκτείνετε ελαφρώς τις δυνατότητες της τυπικής διανομής CentOS. Πρώτα απ 'όλα, ας αναβαθμίσουμε το πρόγραμμα οδήγησης (υλικολογισμικό) του ενσωματωμένου προσαρμογέα Wi-Fi. Η αρχική σελίδα του έργου λέει:

Wi-Fi στο Raspberry 3B και 3B+

Τα αρχεία υλικολογισμικού Raspberry PI 3B/3B+ δεν επιτρέπεται να διανέμονται από το CentOS Project. Μπορείτε να χρησιμοποιήσετε τα παρακάτω άρθρα για να κατανοήσετε το πρόβλημα, να αποκτήσετε το υλικολογισμικό και να ρυθμίσετε το wifi.

Ό,τι απαγορεύεται για το έργο CentOS δεν απαγορεύεται για εμάς για προσωπική χρήση. Αντικαθιστούμε το υλικολογισμικό διανομής Wi-Fi στο CentOS με το αντίστοιχο από τους προγραμματιστές της Broadcom (αυτά τα ίδια μισητά δυαδικά blobs...). Αυτό, συγκεκριμένα, θα σας επιτρέψει να χρησιμοποιήσετε AC σε λειτουργία σημείου πρόσβασης.

Αναβάθμιση υλικολογισμικού Wi-FiΜάθετε το μοντέλο της συσκευής και την τρέχουσα έκδοση υλικολογισμικού:

# 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 

Βλέπουμε ότι η έκδοση υλικολογισμικού είναι 7.45.18 με ημερομηνία 01.03.2015/XNUMX/XNUMX και θυμηθείτε το ακόλουθο σύνολο αριθμών: 43455 (brcmfmac43455-sdio.bin).

Κατεβάστε την τρέχουσα εικόνα Raspbian. Οι τεμπέληδες μπορούν να γράψουν την εικόνα σε microSD και να πάρουν τα αρχεία με το υλικολογισμικό από εκεί. Ή μπορείτε να προσαρτήσετε το ριζικό διαμέρισμα της εικόνας στο Linux και να αντιγράψετε ό,τι χρειάζεστε από εκεί:

# 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

Τα αρχεία υλικολογισμικού του προσαρμογέα Wi-Fi που προκύπτουν πρέπει να αντιγραφούν και να αντικατασταθούν με το "raspberry" στον κατάλογο /usr/lib/firmware/brcm/

Κάνουμε επανεκκίνηση του μελλοντικού δρομολογητή και χαμογελάμε ικανοποιημένοι:

# 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 

Έκδοση: 7.45.154 με ημερομηνία 27.02.2018/XNUMX/XNUMX.

Και φυσικά η ΕΠΕΛ:

# 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. Διαμόρφωση δικτύου και μελλοντικές προκλήσεις

Όπως συμφωνήσαμε παραπάνω, το "raspberry" συνδέεται με "σύρμα" στο τοπικό δίκτυο. Ας υποθέσουμε ότι ο πάροχος παρέχει πρόσβαση στο Διαδίκτυο με τον ίδιο ακριβώς τρόπο: η διεύθυνση στο δημόσιο δίκτυο εκδίδεται δυναμικά από τον διακομιστή DHCP (ίσως με σύνδεση MAC). Σε αυτήν την περίπτωση, μετά την τελική ρύθμιση του βατόμουρου, πρέπει απλώς να "συνδέσετε" το καλώδιο του παρόχου σε αυτό και τελειώσατε. Εξουσιοδότηση με χρήση systemd-networkd - το θέμα ενός ξεχωριστού άρθρου και δεν συζητείται εδώ.

Η διεπαφή Wi-Fi του Raspberry είναι ένα τοπικό δίκτυο και ο ενσωματωμένος προσαρμογέας Ethernet (eth0) είναι εξωτερικός. Ας αριθμήσουμε το τοπικό δίκτυο στατικά, για παράδειγμα: 192.168.0.0/24. Διεύθυνση Raspberry: 192.168.0.1. Ένας διακομιστής DHCP θα λειτουργεί στο εξωτερικό δίκτυο (Διαδίκτυο).

Πρόβλημα συνέπειας ονομασίας и διάσημος προγραμματιστής από τη Γουατεμάλα - δύο προβλήματα που περιμένουν όποιον ρυθμίζει τις διεπαφές δικτύου και τις υπηρεσίες σε διανομές systemd.

Παράλληλο χάος (λυρική παρέκβαση)Το Lennart Pottering έχει συντάξει το δικό του πρόγραμμα systemd Πολύ καλά. Αυτό systemd εκκινεί άλλα προγράμματα τόσο γρήγορα που, χωρίς να προλάβουν να συνέλθουν από το σφύριγμα του διαιτητή, σκοντάφτουν και πέφτουν στην αρχή χωρίς καν να ξεκινήσουν την πορεία τους με εμπόδια.

Αλλά σοβαρά, ο επιθετικός παραλληλισμός των διεργασιών που εκτοξεύτηκαν κατά την έναρξη του systemd OS είναι ένα είδος «γέφυρας γαϊδάρου» για έμπειρους διαδοχικούς ειδικούς LSB. Ευτυχώς, το να βάλεις τάξη σε αυτό το «παράλληλο χάος» αποδεικνύεται απλό, αν και όχι πάντα προφανές.

Δημιουργούμε δύο διεπαφές εικονικής γέφυρας με σταθερά ονόματα: lan и ωχρός. Θα "συνδέσουμε" τον προσαρμογέα Wi-Fi στον πρώτο και τον eth0 "raspberry" στον δεύτερο.

/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=ναι εξαλείφει την ανάγκη υποδείξεων στον πυρήνα μέσω sysctl για να ενεργοποιηθεί η δρομολόγηση.
Διεύθυνση MACA= Ας αποσχολιάζουμε και ας αλλάξουμε αν χρειαστεί.

Πρώτα «συνδέουμε» το eth0. Θυμόμαστε το "πρόβλημα ομοιομορφίας" και χρησιμοποιούμε μόνο τη διεύθυνση MAC αυτής της διεπαφής, η οποία μπορεί να βρεθεί, για παράδειγμα, ως εξής:

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

Δημιουργούμε /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Διαγράφουμε το προηγούμενο αρχείο ρυθμίσεων eth0, κάνουμε επανεκκίνηση του Raspberry και αποκτάμε πρόσβαση δικτύου σε αυτό (η διεύθυνση IP πιθανότατα θα αλλάξει):

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

5.DNSMASQ

Για τη δημιουργία σημείων πρόσβασης Wi-Fi, τίποτα δεν ξεπερνάει ένα γλυκό ζευγάρι dnsmasq + hostapd δεν το έχω καταλάβει ακόμα. Κατά τη γνώμη μου.

Σε περίπτωση που κάποιος το ξεχάσει, τότε...hostapd - αυτό είναι το στοιχείο που ελέγχει τους προσαρμογείς Wi-Fi (ειδικά, θα φροντίσει να τους συνδέσει στο εικονικό lan "raspberries"), εξουσιοδοτεί και καταχωρεί ασύρματους πελάτες.

dnsmasq — διαμορφώνει τη στοίβα δικτύου των πελατών: εκδίδει διευθύνσεις IP, διακομιστές DNS, προεπιλεγμένη πύλη και παρόμοιες απολαύσεις.

Ας ξεκινήσουμε με το dnsmasq:

# yum install dnsmasq

Πρότυπο / 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

επεξεργαστείτε το σύμφωνα με τις προτιμήσεις σας.

μινιμαλιστική /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

Η «μαγεία» εδώ βρίσκεται στην παράμετρο δέσμευση-δυναμική, το οποίο λέει στον δαίμονα dnsmasq να περιμένει μέχρι να εμφανιστεί στο σύστημα διεπαφή=lan, και να μην λιποθυμήσει από μια κρίση περήφανης μοναξιάς μετά την έναρξη.

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

6. HOSTAPD

Και τέλος, οι μαγικές διαμορφώσεις hostapd. Δεν έχω καμία αμφιβολία ότι κάποιος διαβάζει αυτό το άρθρο αναζητώντας ακριβώς αυτές τις πολύτιμες γραμμές.

Πριν εγκαταστήσετε το hostapd, πρέπει να ξεπεράσετε το «πρόβλημα ομοιομορφίας». Ο ενσωματωμένος προσαρμογέας Wi-Fi wlan0 μπορεί εύκολα να αλλάξει το όνομά του σε wlan1 κατά τη σύνδεση πρόσθετου εξοπλισμού USB Wi-Fi. Επομένως, θα διορθώσουμε τα ονόματα διεπαφής με τον ακόλουθο τρόπο: θα βρούμε μοναδικά ονόματα για τους (ασύρματους) προσαρμογείς και θα τους συνδέσουμε σε διευθύνσεις MAC.

Για τον ενσωματωμένο προσαρμογέα Wi-Fi, ο οποίος εξακολουθεί να είναι wlan0:

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

Δημιουργούμε /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Τώρα θα είμαστε σίγουροι ότι wl0 - Αυτό είναι ενσωματωμένο Wi-Fi. Κάνουμε επανεκκίνηση του Raspberry για να βεβαιωθούμε για αυτό.

Εγκαθιστώ:

# yum install hostapd wireless-tools

Αρχείο διαμόρφωσης /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

Χωρίς να ξεχάσω ούτε στιγμή GKChP, αλλάξτε τις παραμέτρους που χρειαζόμαστε και ελέγξτε χειροκίνητα για λειτουργικότητα:

# hostapd /etc/hostapd/hostapd.conf

Το hostapd θα ξεκινήσει σε διαδραστική λειτουργία, μεταδίδοντας την κατάστασή του στην κονσόλα. Εάν δεν υπάρχουν σφάλματα, τότε οι πελάτες που υποστηρίζουν τη λειτουργία AC θα μπορούν να συνδεθούν στο σημείο πρόσβασης. Για να σταματήσετε το hostapd - Ctrl-C.

Το μόνο που μένει είναι να ενεργοποιήσετε το hostapd στην εκκίνηση του συστήματος. Εάν κάνετε το τυπικό πράγμα (systemctl ενεργοποιεί το hostapd), τότε μετά την επόμενη επανεκκίνηση, μπορείτε να πάρετε έναν δαίμονα "κυλάει στο αίμα" με τη διάγνωση "η διεπαφή wl0 δεν βρέθηκε". Ως αποτέλεσμα του "παράλληλου χάους", το hostapd ξεκίνησε πιο γρήγορα από ό,τι ο πυρήνας βρήκε τον ασύρματο προσαρμογέα.

Το Διαδίκτυο είναι γεμάτο λύσεις: από ένα αναγκαστικό χρονικό όριο πριν από την έναρξη του δαίμονα (αρκετά λεπτά), σε έναν άλλο δαίμονα που παρακολουθεί την εμφάνιση της διεπαφής και (επανα)ξεκινά το hostpad. Οι λύσεις είναι αρκετά εφαρμόσιμες, αλλά τρομερά άσχημες. Καλούμε τον μεγάλο για βοήθεια systemd με τους «στόχους» και τα «καθήκοντα» και τις «εξαρτήσεις» του.

Αντιγράψτε το αρχείο υπηρεσίας διανομής στο /etc/systemd/system/hostapd.service:

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

και μειώστε το περιεχόμενό του στην ακόλουθη μορφή:

[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

Η μαγεία του ενημερωμένου αρχείου υπηρεσίας βρίσκεται στη δυναμική σύνδεση του hostapd με τον νέο στόχο - τη διεπαφή wl0. Όταν εμφανίζεται η διεπαφή, ο δαίμονας ξεκινά, όταν εξαφανίζεται, σταματά. Και όλα αυτά είναι online - χωρίς επανεκκίνηση του συστήματος. Αυτή η τεχνική θα είναι ιδιαίτερα χρήσιμη όταν συνδέετε έναν προσαρμογέα USB Wi-Fi σε ένα Raspberry.

Τώρα μπορείς:

# systemctl enable hostapd
# reboot

7. IPTABLES

«Τι;;;» © Ναι, ναι! Κανένας systemd. Χωρίς νεοφανείς συνδυασμούς (στη μορφή firewall), που καταλήγουν να κάνουν το ίδιο πράγμα.

Ας χρησιμοποιήσουμε το παλιό καλό iptables, οι υπηρεσίες του οποίου, μετά την εκκίνηση, θα φορτώσουν κανόνες δικτύου στον πυρήνα και θα τερματιστούν αθόρυβα χωρίς να παραμείνουν κάτοικοι και χωρίς να καταναλωθούν πόροι. systemd έχει ένα κομψό IPMasquerade=, αλλά θα συνεχίσουμε να εμπιστευόμαστε τη μετάφραση διεύθυνσης (NAT) και το τείχος προστασίας στο iptables.

Εγκαθιστώ:

# yum install iptables-services
# systemctl enable iptables ip6tables

Προτιμώ να αποθηκεύω τη διαμόρφωση iptables ως σενάριο (παράδειγμα):

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

Εκτελούμε το παραπάνω σενάριο και χάνουμε τη δυνατότητα δημιουργίας νέων ενσύρματων συνδέσεων SSH με το Raspberry. Σωστά, έχουμε φτιάξει έναν δρομολογητή Wi-Fi, η πρόσβαση στον οποίο απαγορεύεται από προεπιλογή "μέσω Διαδικτύου" - τώρα μόνο "over the air". Συνδέουμε το καλώδιο Ethernet του παρόχου και ξεκινάμε το σερφάρισμα!

8. Μπόνους: +2,4 GHz

Όταν συναρμολόγησα τον πρώτο δρομολογητή Raspberry χρησιμοποιώντας το σχέδιο που περιγράφηκε παραπάνω, ανακάλυψα μια σειρά από gadget στο νοικοκυριό μου που, λόγω των περιορισμών σχεδιασμού του Wi-Fi, δεν μπορούσαν να δουν καθόλου το "βατόμουρο". Η επαναδιαμόρφωση του δρομολογητή ώστε να λειτουργεί σε 802.11b/g/n δεν ήταν αθλητική, καθώς η μέγιστη ταχύτητα "over the air" σε αυτή την περίπτωση δεν ξεπερνούσε τα 40 Mbit και ο αγαπημένος μου πάροχος Διαδικτύου μου προσφέρει 100 (μέσω καλωδίου).

Στην πραγματικότητα, μια λύση στο πρόβλημα έχει ήδη εφευρεθεί: μια δεύτερη διεπαφή Wi-Fi που λειτουργεί σε συχνότητα 2,4 GHz και ένα δεύτερο σημείο πρόσβασης. Σε ένα κοντινό πάγκο αγόρασα όχι την πρώτη, αλλά τη δεύτερη "σφυρίχτρα" USB Wi-Fi που συνάντησα. Ο πωλητής βασανίστηκε από ερωτήσεις σχετικά με το chipset, τη συμβατότητα με πυρήνες ARM Linux και τη δυνατότητα εργασίας σε λειτουργία AP (ήταν ο πρώτος που ξεκίνησε).

Διαμορφώνουμε το "σφύριγμα" κατ' αναλογία με τον ενσωματωμένο προσαρμογέα Wi-Fi.

Αρχικά, ας το μετονομάσουμε σε 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

Θα αναθέσουμε τη διαχείριση της νέας διεπαφής Wi-Fi σε έναν ξεχωριστό δαίμονα hostapd, ο οποίος θα ξεκινά και θα σταματά ανάλογα με την παρουσία ενός αυστηρά καθορισμένου «σφυρίγματος» στο σύστημα: wl1.

Αρχείο διαμόρφωσης /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]

Τα περιεχόμενα αυτού του αρχείου εξαρτώνται άμεσα από το μοντέλο του προσαρμογέα USB Wi-Fi, επομένως μια απλή αντιγραφή/επικόλληση μπορεί να αποτύχει.

Αντιγράψτε το αρχείο υπηρεσίας διανομής στο /etc/systemd/system/hostapd2.service:

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

και μειώστε το περιεχόμενό του στην ακόλουθη μορφή:

[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

Το μόνο που μένει είναι να ενεργοποιήσετε μια νέα παρουσία του hostapd:

# systemctl enable hostapd2

Αυτό είναι όλο! Τραβήξτε το «σφύριγμα» και το ίδιο το «βατόμουρο», κοιτάξτε τα ασύρματα δίκτυα γύρω σας.

Και τέλος, θέλω να σας προειδοποιήσω για την ποιότητα του προσαρμογέα USB Wi-Fi και την τροφοδοσία του Raspberry. Η συνδεδεμένη "καυτή σφυρίχτρα" μπορεί μερικές φορές να προκαλέσει "πάγωμα βατόμουρου" λόγω βραχυπρόθεσμων ηλεκτρικών προβλημάτων.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο