Raspberry Pi + CentOS = نقطة اتصال Wi-Fi (أو جهاز توجيه التوت بقبعة حمراء)

يوجد قدر كبير من المعلومات على الإنترنت حول إنشاء نقاط وصول إلى Wi-Fi استنادًا إلى جهاز كمبيوتر Raspberry ذو لوحة واحدة. كقاعدة عامة، هذا يعني استخدام نظام التشغيل Raspbian الأصلي لنظام Raspberry.

نظرًا لكوني ملتزمًا بالأنظمة المستندة إلى RPM، لم أتمكن من المرور بهذه المعجزة الصغيرة وعدم تجربة نظام CentOS المفضل لدي.

توفر المقالة إرشادات لإنشاء جهاز توجيه Wi-Fi بسرعة 5 جيجاهرتز/تيار متردد من Raspberry Pi 3 Model B+ استنادًا إلى نظام التشغيل CentOS. سيكون هناك العديد من الحيل القياسية ولكن غير المعروفة، وكمكافأة - رسم لتوصيل أجهزة Wi-Fi إضافية بجهاز Raspberry، مما يسمح له بالعمل في عدة أوضاع في وقت واحد (2,4+5 جيجا هرتز).

Raspberry Pi + CentOS = نقطة اتصال Wi-Fi (أو جهاز توجيه التوت بقبعة حمراء)
(مزيج من الصور المتاحة بحرية)

دعونا نلاحظ على الفور أن بعض السرعات الكونية لن تعمل. أقوم بالضغط بحد أقصى 100 ميجابت في الثانية من جهاز Raspberry الخاص بي عبر الهواء، وهذا يغطي سرعة مزود خدمة الإنترنت الخاص بي. لماذا تحتاج إلى مثل هذا التيار المتردد البطيء إذا كان من الناحية النظرية يمكنك الحصول على نصف جيجابت حتى على N؟ إذا سألت نفسك هذا السؤال، فاذهب إلى المتجر لشراء جهاز توجيه حقيقي مزود بثمانية هوائيات خارجية.

0. ما سوف تحتاجه

  • في الواقع، "منتج التوت" نفسه من العيار: Pi 3 Model B+ (لتحقيق السرعات والقنوات المرغوبة البالغة 5 جيجا هرتز)؛
  • بطاقة microSD جيدة >= 4 جيجابايت؛
  • محطة عمل مع قارئ/كاتب Linux وmicroSD؛
  • توفر المهارات الكافية في نظام Linux، المقال مخصص للمهوسين المدربين؛
  • اتصال الشبكة السلكية (eth0) بين Raspberry وLinux، وتشغيل خادم DHCP على الشبكة المحلية والوصول إلى الإنترنت من كلا الجهازين.

تعليق صغير على النقطة الأخيرة. "أيهما جاء أولاً، البيضة أم..." كيف تصنع جهاز توجيه Wi-Fi في حالة عدم وجود أي معدات للوصول إلى الإنترنت؟ دعنا نترك هذا التمرين الترفيهي خارج نطاق المقالة ونفترض ببساطة أن جهاز Raspberry متصل بالشبكة المحلية عن طريق الأسلاك ولديه إمكانية الوصول إلى الإنترنت. في هذه الحالة، لن نحتاج إلى تلفزيون إضافي ومناور لإعداد "التوت".

1. قم بتثبيت CentOS

الصفحة الرئيسية للمشروع

في وقت كتابة هذا المقال، كان إصدار CentOS قيد التشغيل على الجهاز هو 32 بت. في مكان ما على شبكة الإنترنت العالمية، صادفت آراء مفادها أن أداء أنظمة التشغيل هذه على بنية ARM 64 بت قد انخفض بنسبة تصل إلى 20%. سأترك هذه اللحظة دون تعليق.

في نظام التشغيل Linux، قم بتنزيل الصورة المصغرة باستخدام النواة "-فطيرة التوت-"واكتبه على microSD:

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

قبل البدء في استخدام الصورة، سنقوم بإزالة قسم SWAP منها، وتوسيع الجذر إلى الحجم المتاح بالكامل والتخلص من SELinux. الخوارزمية بسيطة: قم بعمل نسخة من الجذر على 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 في /mnt/etc/selinux/config:

SELINUX=disabled

التحرير /mnt/etc/fstab، مع ترك إدخالين فقط حول الأقسام: التمهيد (/التمهيد، بدون تغييرات) والجذر (نقوم بتغيير قيمة UUID، والتي يمكن اكتشافها من خلال دراسة مخرجات الأمر blkid على Linux):

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

أخيرًا، نقوم بتغيير معلمات تمهيد kernel: نحدد موقعًا جديدًا للقسم الجذر، ونعطل إخراج معلومات تصحيح الأخطاء و(اختياريًا) نمنع النواة من تعيين عناوين 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 في "التوت"، وتشغيلها والحصول على إمكانية الوصول إلى الشبكة عبر ssh (الجذر/centos).

2. إعداد CentOS

الحركات الثلاث الأولى التي لا تتزعزع: باسود, yum -y التحديث, إعادة تشغيل.

نحن نتخلى عن إدارة الشبكة com.networkd:

# 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

نقوم بإعادة تشغيل "التوت" ونتمكن مرة أخرى من الوصول إلى الشبكة عبر ssh (قد يتغير عنوان IP). انتبه إلى ما يتم استخدامه / الخ / resolv.conf، تم إنشاؤه مسبقًا بواسطة مدير الشبكة. لذلك، في حالة وجود مشاكل في الحل، قم بتحرير محتوياته. يستخدم حل النظام لن نفعل.

نقوم بإزالة العناصر "غير الضرورية" وإصلاح وتسريع تحميل نظام التشغيل:

# 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

من يحتاج كرون ومن لا يهضم المدمج فيه توقيت النظام، يمكن تحديد ما هو مفقود. / فار / السجل- وانظر من خلال journalctl. إذا كنت بحاجة إلى سجل السجل (افتراضيًا، يتم تخزين المعلومات فقط من لحظة بدء تشغيل النظام):

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

تعطيل استخدام IPv6 بواسطة الخدمات الأساسية (إذا لزم الأمر)/ الخ / سه / 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 جيجا هرتز، فسوف نستعد للمفاجآت مقدمًا منظم:

# معلومات يم crda
ملخص: برنامج الامتثال التنظيمي للشبكات اللاسلكية 802.11

وهذا التصميم الشرير، الذي يعتمد أيضًا على المنطقة الزمنية، "يحظر" استخدام (في روسيا) ترددات 5 جيجا هرتز والقنوات ذات الأرقام "العالية". الحيلة هي تعيين منطقة زمنية دون استخدام أسماء القارات/المدن، أي بدلاً من:

# 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

كل ما قيل أعلاه يمكن اعتباره تعليمات كاملة لتثبيت "Vanilla" CentOS على Raspberry Pi. يجب أن ينتهي بك الأمر مع جهاز كمبيوتر (يعيد) التشغيل في أقل من 10 ثوانٍ، ويستخدم أقل من 15 ميجابايت من ذاكرة الوصول العشوائي و1.5 جيجابايت من بطاقة microSD (في الواقع أقل من 1 جيجابايت بسبب عدم اكتمال/التمهيد، ولكن لنكن صادقين).

لتثبيت برنامج نقطة وصول Wi-Fi على هذا النظام، ستحتاج إلى توسيع إمكانيات توزيع CentOS القياسي قليلاً. أولاً، لنقم بترقية برنامج التشغيل (البرنامج الثابت) لمحول Wi-Fi المدمج. تقول الصفحة الرئيسية للمشروع:

واي فاي على Raspberry 3B و3B+

لا يُسمح بتوزيع ملفات البرامج الثابتة Raspberry PI 3B/3B+ بواسطة مشروع CentOS. يمكنك استخدام المقالات التالية لفهم المشكلة والحصول على البرامج الثابتة وإعداد شبكة wifi.

ما هو محظور على مشروع CentOS ليس محظورا علينا للاستخدام الشخصي. نحن نستبدل البرامج الثابتة للتوزيع Wi-Fi في CentOS بالبرنامج المقابل من مطوري Broadcom (نفس النقط الثنائية المكروهة...). سيسمح لك هذا، على وجه الخصوص، باستخدام التيار المتردد في وضع نقطة الوصول.

ترقية البرامج الثابتة لشبكة 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/البرامج الثابتة/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. تكوين الشبكة والتحديات المقبلة

كما اتفقنا أعلاه، يتم توصيل "التوت" عن طريق "السلك" بالشبكة المحلية. لنفترض أن الموفر يوفر الوصول إلى الإنترنت بنفس الطريقة تمامًا: يتم إصدار العنوان الموجود على الشبكة العامة ديناميكيًا بواسطة خادم DHCP (ربما مع ربط MAC). في هذه الحالة، بعد الإعداد النهائي للتوت، تحتاج فقط إلى "توصيل" كابل الموفر به، وبذلك تكون قد انتهيت. إذن باستخدام systemd- شبكة د - موضوع مقال منفصل ولم تتم مناقشته هنا.

واجهة (واجهات) Wi-Fi الخاصة بـ Raspberry عبارة عن شبكة محلية، ومحول Ethernet المدمج (eth0) خارجي. لنقوم بترقيم الشبكة المحلية بشكل ثابت، على سبيل المثال: 192.168.0.0/24. عنوان التوت: 192.168.0.1. سيعمل خادم DHCP على الشبكة الخارجية (الإنترنت).

مشكلة تناسق الأسماء и مبرمج غواتيمالي مشهور - مشكلتان تنتظران أي شخص يقوم بتكوين واجهات وخدمات الشبكة في توزيعات systemd.

الفوضى الموازية (الاستطراد الغنائي)قامت Lennart Pottering بتجميع برنامجها الخاص سيستم دي جيد جدًا. هذا سيستم دي يطلق برامج أخرى بسرعة كبيرة لدرجة أنهم، دون أن يكون لديهم الوقت للتعافي من صافرة الحكم، يتعثرون ويسقطون في البداية دون أن يبدأوا مسار العوائق.

ولكن على محمل الجد، فإن الموازاة العدوانية للعمليات التي تم إطلاقها في بداية نظام التشغيل systemd هي نوع من "جسر الحمير" لمتخصصي LSB المتسلسلين ذوي الخبرة. ولحسن الحظ، فقد تبين أن إعادة النظام إلى هذه "الفوضى الموازية" أمر بسيط، وإن لم يكن واضحا دائما.

نقوم بإنشاء واجهتين جسر افتراضيتين بأسماء ثابتة: الشبكة المحلية и سقيم. سنقوم "بربط" محول (محولات) 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 لتمكين التوجيه.
MACAddress= دعنا نزيل التعليق ونغير إذا لزم الأمر.

أولاً نقوم "بربط" 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، لا شيء يتفوق على اثنين منها دنسماسك + hostapd لم أحسب ذلك بعد. في رأيي.

وإذا نسي أحد ..hostapd - هذا هو الشيء الذي يتحكم في محولات Wi-Fi (على وجه الخصوص، سيهتم بتوصيلها بالشبكة الافتراضية الشبكة المحلية "raspberry")، يقوم بتفويض وتسجيل العملاء اللاسلكيين.

دنسماسك - تكوين مجموعة عملاء الشبكة: إصدار عناوين IP وخوادم DNS والبوابة الافتراضية والمسرات المماثلة.

لنبدأ مع dnsmasq:

# yum install dnsmasq

نمط / الخ / 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

"السحر" هنا يكمن في المعلمة bind-dynamic، والذي يخبر البرنامج الخفي dnsmasq بالانتظار حتى يظهر على النظام Interface=lanولا يغمى عليه من نوبة الشعور بالوحدة الفخورة بعد البداية.

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

6. هوستابد

وأخيرا، تكوينات 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

دون أن ننسى لحظة واحدة لجنة الطوارئ الولائية، قم بتغيير المعلمات التي نحتاجها والتحقق يدويًا من الوظائف:

# hostapd /etc/hostapd/hostapd.conf

سيبدأ hostapd في الوضع التفاعلي، ويبث حالته إلى وحدة التحكم. إذا لم تكن هناك أخطاء، فسيتمكن العملاء الذين يدعمون وضع التيار المتردد من الاتصال بنقطة الوصول. لإيقاف hostapd - Ctrl-C.

كل ما تبقى هو تمكين hostapd عند بدء تشغيل النظام. إذا قمت بالشيء القياسي (systemctl تمكين hostapd)، فبعد إعادة التشغيل التالية، يمكنك الحصول على شيطان "يتدحرج في الدم" مع التشخيص "لم يتم العثور على واجهة wl0". نتيجة "للفوضى الموازية"، بدأ تشغيل Hostapd بشكل أسرع من العثور على النواة للمحول اللاسلكي.

الإنترنت مليء بالحلول: بدءًا من المهلة القسرية قبل بدء تشغيل البرنامج الخفي (عدة دقائق)، إلى برنامج خفي آخر يراقب مظهر الواجهة و(يعيد) تشغيل لوحة المضيف. الحلول قابلة للتطبيق تماما، ولكنها قبيحة للغاية. نحن ندعو العظيم للمساعدة سيستم دي بـ "أهدافها" و"مهامها" و"تبعياتها".

انسخ ملف خدمة التوزيع إلى /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. عندما تظهر الواجهة، يبدأ البرنامج الخفي، وعندما يختفي، يتوقف. وكل هذا عبر الإنترنت - دون إعادة تشغيل النظام. ستكون هذه التقنية مفيدة بشكل خاص عند توصيل محول USB Wi-Fi بجهاز Raspberry.

الآن انت تستطيع:

# systemctl enable hostapd
# reboot

7. إيبتابل

"ستاا؟؟؟" © نعم نعم! لا أحد سيستم دي. لا توجد مجموعات جديدة (في النموذج firewalld)، والتي في نهاية المطاف تفعل الشيء نفسه.

دعونا نستخدم القديم الجيد يبتابليس، والتي ستقوم خدماتها، بعد البدء، بتحميل قواعد الشبكة إلى النواة وإيقاف تشغيلها بهدوء دون البقاء ساكنة ودون استهلاك الموارد. يحتوي 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، والوصول إليه "عبر الإنترنت" محظور افتراضيا - الآن فقط "عبر الأثير". نقوم بتوصيل كابل Ethernet الخاص بالمزود ونبدأ في التصفح!

8. المكافأة: +2,4 جيجا هرتز

عندما قمت بتجميع أول جهاز توجيه Raspberry باستخدام الرسم الموضح أعلاه، اكتشفت عددًا من الأدوات الذكية في منزلي والتي، بسبب قيود تصميم Wi-Fi الخاصة بها، لم تتمكن من رؤية "التوت" على الإطلاق. كانت إعادة تكوين جهاز التوجيه للعمل في 802.11b/g/n أمرًا غير رياضي، نظرًا لأن السرعة القصوى "عبر الأثير" في هذه الحالة لم تتجاوز 40 ميجابت، ومزود الإنترنت المفضل لدي يقدم لي 100 ميجابت (عبر الكابل).

في الواقع، تم بالفعل اختراع حل للمشكلة: واجهة Wi-Fi ثانية تعمل بتردد 2,4 جيجا هرتز، ونقطة وصول ثانية. في كشك قريب، لم أشتري الأول، لكن "صافرة" USB Wi-Fi الثانية التي صادفتها. لقد تعذب البائع بسبب الأسئلة حول مجموعة الشرائح والتوافق مع نواة 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

إضافة تعليق