Raspberry Pi + CentOS = Wi-Fi Hotspot (یا روتر رزبری با کلاه قرمزی)

اطلاعات زیادی در اینترنت در مورد ایجاد نقاط دسترسی Wi-Fi بر اساس رایانه شخصی تک بردی Raspberry وجود دارد. به عنوان یک قاعده، این به معنای استفاده از سیستم عامل Raspbian بومی Raspberry است.

من که از سیستم‌های مبتنی بر RPM پیروی می‌کنم، نمی‌توانم از کنار این معجزه کوچک بگذرم و CentOS محبوبم را روی آن امتحان نکنم.

در این مقاله دستورالعمل هایی برای ساخت روتر وای فای 5 گیگاهرتز/AC از Raspberry Pi 3 Model B+ بر اساس سیستم عامل CentOS ارائه شده است. چندین ترفند استاندارد اما کمتر شناخته شده وجود خواهد داشت و به عنوان یک امتیاز - نقاشی برای اتصال تجهیزات Wi-Fi اضافی به Raspberry که به آن امکان می دهد همزمان در چندین حالت (2,4 + 5 گیگاهرتز) کار کند.

Raspberry Pi + CentOS = Wi-Fi Hotspot (یا روتر رزبری با کلاه قرمزی)
(ترکیبی از تصاویر رایگان در دسترس)

بیایید فوراً توجه کنیم که برخی از سرعت های کیهانی کار نمی کنند. من حداکثر 100 مگابیت بر ثانیه از Raspberry خود را از طریق هوا فشار می دهم و این سرعت ارائه دهنده اینترنت من را پوشش می دهد. چرا به چنین AC تنبل نیاز دارید، اگر در تئوری حتی در N می توانید نیم گیگابیت دریافت کنید؟ اگر این سوال را از خود پرسیده اید، برای خرید یک روتر واقعی با هشت آنتن خارجی به فروشگاه بروید.

0. آنچه شما نیاز دارید

  • در واقع، "محصول تمشک" خود دارای کالیبر است: Pi 3 Model B+ (برای دستیابی به سرعت ها و کانال های مورد علاقه 5 گیگاهرتز).
  • میکرو اس دی خوب >= 4 گیگابایت؛
  • ایستگاه کاری با لینوکس و خواننده/نویسنده microSD.
  • در دسترس بودن مهارت های کافی در لینوکس، مقاله برای یک گیک آموزش دیده است.
  • اتصال شبکه سیمی (eth0) بین Raspberry و Linux، اجرای سرور DHCP در شبکه محلی و دسترسی به اینترنت از هر دو دستگاه.

یک نظر کوچک در مورد آخرین نکته. چگونه یک روتر Wi-Fi در غیاب تجهیزات دسترسی به اینترنت بسازیم: "کدام اول آمد، تخم مرغ یا ..."؟ بیایید این تمرین سرگرم کننده را خارج از محدوده مقاله رها کنیم و به سادگی فرض کنیم که Raspberry از طریق سیم به شبکه محلی متصل است و به اینترنت دسترسی دارد. در این مورد، برای تنظیم "تمشک" به تلویزیون اضافی و دستکاری کننده نیاز نخواهیم داشت.

1. CentOS را نصب کنید

صفحه اصلی پروژه

در زمان نگارش این مقاله، نسخه در حال اجرا CentOS بر روی دستگاه 32 بیتی است. در جایی در وب جهانی با نظراتی برخورد کردم که عملکرد چنین سیستم عامل هایی در معماری 64 بیتی ARM تا 20٪ کاهش می یابد. این لحظه را بدون نظر می گذارم.

در لینوکس، مینیمال تصویر را با هسته دانلود کنید-RaspberryPI-و آن را روی microSD بنویسید:

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

قبل از شروع به استفاده از تصویر، پارتیشن SWAP را از آن حذف می کنیم، ریشه را به کل حجم موجود گسترش می دهیم و از شر SELinux خلاص می شویم. الگوریتم ساده است: یک کپی از root در لینوکس ایجاد کنید، همه پارتیشن ها را از 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، بدون تغییر) و root (مقدار UUID را تغییر می دهیم که با مطالعه خروجی دستور blkid در لینوکس می توان متوجه شد):

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 را مجدداً به "رزبری" مرتب می کنیم، آن را راه اندازی می کنیم و از طریق 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

ما "رزبری" را مجددا راه اندازی می کنیم و دوباره از طریق ssh به شبکه دسترسی پیدا می کنیم (آدرس IP ممکن است تغییر کند). به آنچه استفاده می شود توجه کنید /etc/resolv.conf، قبلا توسط Network Manager ایجاد شده است. بنابراین، در صورت بروز مشکل در حل، محتوای آن را ویرایش کنید. استفاده کنید systemd حل شده ما نخواهیم.

ما "غیر ضروری" را حذف می کنیم، بارگیری سیستم عامل را تعمیر و سرعت می بخشیم:

# 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- و نگاه کن ژورنالکتل. اگر به سابقه گزارش نیاز دارید (به طور پیش فرض، اطلاعات فقط از لحظه شروع سیستم ذخیره می شود):

# 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"

ارتباط زمان با "تمشک" یک چیز مهم است. از آنجایی که در خارج از جعبه هیچ توانایی سخت افزاری برای ذخیره وضعیت فعلی ساعت پس از راه اندازی مجدد وجود ندارد، همگام سازی مورد نیاز است. یک دیمون بسیار خوب و سریع برای این کار است کرون - قبلا نصب شده است و به طور خودکار شروع می شود. می توانید سرورهای 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 گیگاهرتز کار می کند، از قبل برای شگفتی ها آماده خواهیم شد. تنظیم کننده:

# yum info 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

همه آنچه در بالا گفته شد را می توان دستورالعمل های کامل برای نصب CentOS "vanilla" در Raspberry Pi در نظر گرفت. در نهایت باید رایانه‌ای داشته باشید که در کمتر از 10 ثانیه (دوباره) بوت می‌شود، کمتر از 15 مگابایت رم و 1.5 گیگابایت microSD استفاده می‌کند (در واقع کمتر از 1 گیگابایت به دلیل / بوت ناقص است، اما بگذارید صادق باشیم).

برای نصب نرم افزار نقطه دسترسی Wi-Fi بر روی این سیستم، باید کمی قابلیت های توزیع استاندارد CentOS را گسترش دهید. اول از همه، اجازه دهید درایور (سیستم‌افزار) آداپتور Wi-Fi داخلی را ارتقا دهیم. صفحه اصلی پروژه می گوید:

Wifi در Raspberry 3B و 3B+

فایل‌های میان‌افزار Raspberry PI 3B/3B+ اجازه توزیع توسط پروژه CentOS را ندارند. می‌توانید از مقاله‌های زیر برای درک موضوع، دریافت سفت‌افزار و راه‌اندازی وای‌فای استفاده کنید.

آنچه برای پروژه CentOS ممنوع است برای استفاده شخصی برای ما ممنوع نیست. ما سفت‌افزار وای‌فای توزیعی در CentOS را با فریم‌افزار مربوطه از توسعه‌دهندگان Broadcom جایگزین می‌کنیم (همان حباب‌های باینری منفور...). این به ویژه به شما امکان می دهد از 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 بنویسند و فایل ها را با سیستم عامل از آنجا ببرند. یا می توانید پارتیشن اصلی تصویر را در لینوکس نصب کنید و آنچه را که نیاز دارید از آنجا کپی کنید:

# 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 به‌دست‌آمده باید کپی شوند و با «رزبری» در فهرست جایگزین شوند. /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.

و البته 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. پیکربندی شبکه و چالش های پیش رو

همانطور که در بالا توافق کردیم، "رزبری" با "سیم" به شبکه محلی متصل می شود. بیایید فرض کنیم که ارائه دهنده دسترسی به اینترنت را دقیقاً به همان روش فراهم می کند: آدرس در شبکه عمومی به صورت پویا توسط سرور DHCP (شاید با اتصال MAC) صادر می شود. در این مورد، پس از راه اندازی نهایی رزبری، فقط باید کابل ارائه دهنده را به آن وصل کنید و کارتان تمام است. مجوز با استفاده از systemd-networked - موضوع یک مقاله جداگانه است و در اینجا بحث نشده است.

رابط(های) وای فای Raspberry یک شبکه محلی است و آداپتور داخلی اترنت (eth0) خارجی است. بیایید شبکه محلی را به صورت ایستا شماره گذاری کنیم، به عنوان مثال: 192.168.0.0/24. آدرس تمشک: 192.168.0.1. یک سرور DHCP روی شبکه خارجی (اینترنت) کار خواهد کرد.

مشکل سازگاری نامگذاری и برنامه نویس معروف گواتمالایی - دو مشکلی که در انتظار هر کسی است که رابط‌ها و سرویس‌های شبکه را در توزیع‌های systemd پیکربندی می‌کند.

هرج و مرج موازی (انحراف غزلی)Lennart Pottering برنامه خود را گردآوری کرده است systemd خیلی خوب. این systemd برنامه های دیگر را به قدری سریع اجرا می کند که در حالی که فرصتی برای بهبودی پس از ضربه سوت داور ندارند، بدون اینکه حتی مسیر مانع خود را شروع کنند، در همان ابتدا زمین می خورند و می افتند.

اما به طور جدی، موازی سازی تهاجمی فرآیندهای راه اندازی شده در شروع سیستم عامل سیستم، نوعی "پل الاغ" برای متخصصان باتجربه LSB متوالی است. خوشبختانه، نظم دادن به این "آشوب موازی" ساده است، اگرچه همیشه آشکار نیست.

ما دو رابط پل مجازی با نام های ثابت ایجاد می کنیم: شبکه и رنگ پریده. ما آداپتور(های) وای فای را به اولی و eth0 "رزبری" را به دومی "وصل می کنیم".

/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 را کنترل می کند (به ویژه، اتصال آنها به مجازی را انجام می دهد شبکه "رزبری")، مشتریان بی سیم را مجاز و ثبت می کند.

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

"جادو" در اینجا در پارامتر نهفته است bind-dynamic، که به دیمون dnsmasq می گوید صبر کند تا در سیستم ظاهر شود رابط = شبکهو بعد از شروع از احساس تنهایی غرور آفرین غش نکند.

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

6. HOSTAPD

و در نهایت، تنظیمات hostapd جادویی. من شک ندارم که کسی این مقاله را در جستجوی دقیق این خطوط ارزشمند می خواند.

قبل از نصب hostapd، باید بر "مشکل یکنواختی" غلبه کنید. آداپتور Wi-Fi داخلی wlan0 می تواند به راحتی نام خود را در هنگام اتصال تجهیزات اضافی USB Wi-Fi به wlan1 تغییر دهد. بنابراین، ما نام‌های رابط را به روش زیر اصلاح می‌کنیم: نام‌های منحصربه‌فردی برای آداپتورهای (بی‌سیم) ایجاد می‌کنیم و آنها را به آدرس‌های 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 سریعتر از آن چیزی که هسته آداپتور بی سیم را پیدا کرد، راه اندازی شد.

اینترنت مملو از راه‌حل‌ها است: از مهلت زمانی اجباری قبل از شروع دیمون (چند دقیقه)، تا دیمون دیگری که ظاهر رابط را نظارت می‌کند و هاست پد را (دوباره) راه‌اندازی می‌کند. راه حل ها کاملاً قابل اجرا هستند، اما به طرز وحشتناکی زشت هستند. ما از بزرگ برای کمک می خواهیم 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 نهفته است. هنگامی که رابط ظاهر می شود، دیمون شروع به کار می کند، زمانی که ناپدید می شود، متوقف می شود. و این همه آنلاین است - بدون راه اندازی مجدد سیستم. این تکنیک به ویژه هنگام اتصال آداپتور USB Wi-Fi به Raspberry مفید خواهد بود.

حالا می توانید:

# systemctl enable hostapd
# reboot

7. IPTABLES

"چی؟؟؟" © بله، بله! هیچ یک systemd. بدون ترکیبات جدید (به شکل فایروال) که در نهایت همین کار را انجام می دهند.

بیایید از قدیمی خوب استفاده کنیم از 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 ساخته ایم که دسترسی به آن "از طریق اینترنت" به طور پیش فرض ممنوع است - اکنون فقط "از طریق هوا". ما کابل اترنت ارائه دهنده را وصل می کنیم و شروع به گشت و گذار می کنیم!

8. پاداش: +2,4 گیگاهرتز

هنگامی که من اولین روتر Raspberry را با استفاده از نقاشی شرح داده شده در بالا مونتاژ کردم، تعدادی ابزار را در خانواده خود کشف کردم که به دلیل محدودیت های طراحی Wi-Fi آنها، به هیچ وجه نمی توانستند "رزبری" را ببینند. پیکربندی مجدد روتر برای کار در 802.11b/g/n غیر ورزشی بود، زیرا حداکثر سرعت "در هوا" در این مورد از 40 مگابیت تجاوز نمی کند و ارائه دهنده اینترنت مورد علاقه من 100 (از طریق کابل) را به من پیشنهاد می دهد.

در واقع، یک راه حل برای این مشکل قبلا اختراع شده است: یک رابط Wi-Fi دوم که با فرکانس 2,4 گیگاهرتز کار می کند، و یک نقطه دسترسی دوم. در غرفه ای در همان نزدیکی، نه اولین، بلکه دومین "سوت" USB Wi-Fi را خریدم. فروشنده با سؤالاتی در مورد چیپست، سازگاری با هسته های لینوکس ARM و امکان کار در حالت 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 و منبع تغذیه رزبری به شما هشدار بدهم. "سوت داغ" متصل گاهی اوقات می تواند به دلیل مشکلات کوتاه مدت الکتریکی باعث "یخ زدگی تمشک" شود.

منبع: www.habr.com

اضافه کردن نظر