Raspberry Pi + CentOS = Wi-Fi Hotspot (эсвэл улаан малгайтай бөөрөлзгөнө чиглүүлэгч)

Raspberry нэг самбарт компьютер дээр суурилсан Wi-Fi хандалтын цэгийг бий болгох талаар интернетэд асар их мэдээлэл байдаг. Дүрмээр бол энэ нь Raspberry-ийн төрөлх Raspbian үйлдлийн системийг ашиглах гэсэн үг юм.

RPM-д суурилсан системийг дагаж мөрддөг би энэ бяцхан гайхамшгийг даван туулж, хайртай CentOS-ээ туршиж үзээгүй.

Уг нийтлэлд CentOS үйлдлийн систем дээр суурилсан Raspberry Pi 5 Model B+-аас 3GHz/AC Wi-Fi чиглүүлэгч хийх зааврыг өгсөн болно. Хэд хэдэн стандарт боловч төдийлөн мэдэгддэггүй заль мэх байх бөгөөд урамшуулал болгон Raspberry-д нэмэлт Wi-Fi төхөөрөмжийг холбох зураг гарч, хэд хэдэн горимд (2,4+5GHz) нэгэн зэрэг ажиллах боломжтой болно.

Raspberry Pi + CentOS = Wi-Fi Hotspot (эсвэл улаан малгайтай бөөрөлзгөнө чиглүүлэгч)
(чөлөөт боломжтой зургуудын холимог)

Сансар огторгуйн зарим хурд ажиллахгүй гэдгийг нэн даруй тэмдэглэе. Би Raspberry-г агаараар хамгийн ихдээ 100 Mbps шахаж авдаг бөгөөд энэ нь миний интернет үйлчилгээ үзүүлэгчийн хурдыг хамардаг. Хэрэв онолын хувьд та N дээр ч хагас гигабит авах боломжтой бол танд яагаад ийм удаан АС хэрэгтэй байна вэ? Хэрэв та өөрөөсөө энэ асуултыг асуусан бол найман гадаад антентай жинхэнэ чиглүүлэгч худалдаж авахын тулд дэлгүүрт очоорой.

0. Танд хэрэгтэй зүйл

  • Үнэн хэрэгтээ "бөөрөлзгөнө бүтээгдэхүүн" нь өөрөө калибрын шинж чанартай байдаг: Pi 3 Model B+ (хүссэн 5GHz хурд болон сувгуудад хүрэхийн тулд);
  • Сайн microSD>= 4GB;
  • Linux болон microSD уншигч/ бичигчтэй ажлын станц;
  • Линукс дээр хангалттай ур чадвар байгаа эсэх, нийтлэл нь бэлтгэгдсэн Geek-д зориулагдсан болно;
  • Raspberry болон Linux-ийн хооронд утастай сүлжээ (eth0) холболт, дотоод сүлжээнд DHCP сервер ажиллуулж, хоёр төхөөрөмжөөс интернетэд холбогдох боломжтой.

Сүүлийн цэгийн талаархи жижиг тайлбар. "Өндөг эсвэл ..." аль нь түрүүлж ирсэн бэ? Интернетэд нэвтрэх төхөөрөмж байхгүй үед Wi-Fi чиглүүлэгчийг хэрхэн яаж хийх вэ? Энэхүү зугаа цэнгэлийн дасгалыг нийтлэлийн хамрах хүрээнээс гадуур орхиж, Raspberry нь дотоод сүлжээнд утсаар холбогдож, интернетэд холбогдох боломжтой гэж үзье. Энэ тохиолдолд "бөөрөлзгөнө" суулгахын тулд бидэнд нэмэлт телевизор, манипулятор хэрэггүй болно.

1. CentOS суулгана уу

Төслийн нүүр хуудас

Энэ нийтлэлийг бичиж байх үед төхөөрөмж дээрх CentOS-ийн ажиллаж байгаа хувилбар нь 32 бит юм. World Wide Web-ийн хаа нэгтээ би 64 битийн ARM архитектур дээрх ийм үйлдлийн системүүдийн гүйцэтгэл 20% хүртэл буурсан гэсэн санааг олж мэдсэн. Би энэ мөчийг ямар ч тайлбаргүйгээр орхих болно.

Линукс дээр цөмтэй хамгийн бага зургийг татаж аваарай "-RaspberryPI-"болон үүнийг microSD руу бичнэ үү:

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

Зургийг ашиглаж эхлэхээсээ өмнө бид түүнээс SWAP хуваалтыг устгаж, root-г бүхэл бүтэн эзлэхүүн болгон өргөжүүлж, SELinux-аас салах болно. Алгоритм нь энгийн: Линукс дээр root-ийн хуулбарыг хийж, эхний (/boot)-аас бусад бүх хуваалтыг microSD-ээс устгаж, шинэ root үүсгээд, хуулбараас агуулгыг нь буцаана.

Шаардлагатай үйлдлүүдийн жишээ (консолын гаралт)

# 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, үүнд хуваалтуудын талаар зөвхөн хоёр оруулга үлдээсэн: ачаалах (/ ачаалах, өөрчлөлт байхгүй) ба 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, өмнө нь Сүлжээний менежер үүсгэсэн. Тиймээс, шийдвэрлэхэд асуудал гарсан тохиолдолд түүний агуулгыг засварлана уу. Ашиглах системээр шийдэгдсэн бид тэгэхгүй.

Бид "шаардлагагүй" зүйлийг арилгаж, 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

Хэнд хэрэгтэй cron мөн хэн нь баригдсан шингээдэггүй системийн таймер, юу дутагдаж байгааг тогтоож чадна. / var / log- мөн сайтар ажигла jurnalctl. Хэрэв танд бүртгэлийн түүх хэрэгтэй бол (анхдагчаар мэдээлэл нь зөвхөн систем ажиллаж эхэлснээс хойш хадгалагдана):

# 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

Цагийн бүсийг тохируулахын тулд бид ашиглах болно заль мэх. Бидний зорилго бол 5GHz давтамж дээр ажилладаг Wi-Fi чиглүүлэгчийг бий болгох явдал тул бид гэнэтийн бэлэг барихад урьдчилан бэлдэх болно. зохицуулагч:

# 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 нэмэлтүүд

Дээр дурдсан бүх зүйлийг Raspberry Pi дээр "ванил" CentOS суулгах бүрэн заавар гэж үзэж болно. Та 10 секундээс бага хугацаанд (дахин) ачаалдаг, 15 мегабайтаас бага RAM, 1.5 гигабайт microSD ашигладаг компьютертэй болох ёстой (үнэндээ 1 Гигабайтаас бага, бүрэн бус ачааллаас болж, гэхдээ үнэнийг хэлье).

Энэ системд Wi-Fi хандалтын цэгийн програм хангамжийг суулгахын тулд та стандарт CentOS түгээлтийн боломжуудыг бага зэрэг өргөжүүлэх хэрэгтэй болно. Юуны өмнө, суурилуулсан Wi-Fi адаптерийн драйверийг (програм хангамж) шинэчилье. Төслийн нүүр хуудсанд:

Raspberry 3B ба 3B+ дээрх Wifi

Raspberry PI 3B/3B+ програмын файлуудыг CentOS Төсөл тараахыг зөвшөөрдөггүй. Асуудлыг ойлгохын тулд та дараах нийтлэлүүдийг ашиглаж, програм хангамжийг авч, wifi-г тохируулах боломжтой.

CentOS төсөлд хориглосон зүйл нь бидний хувьд хувийн хэрэгцээнд зориулагдаагүй болно. Бид CentOS дахь Wi-Fi түгээлтийн программыг 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 адаптерийн програм хангамжийн файлуудыг хуулж, "бөөрөлзгөнө" гэж хавтас руу солих шаардлагатай. /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.

Мөн мэдээж 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-networkd - тусдаа өгүүллийн сэдэв бөгөөд энд яригдаагүй болно.

Raspberry-ийн Wi-Fi интерфейс(үүд) нь дотоод сүлжээ бөгөөд суурилуулсан Ethernet адаптер (eth0) нь гадаад юм. Дотоод сүлжээг статик байдлаар дугаарлаж үзье, жишээлбэл: 192.168.0.0/24. Raspberry хаяг: 192.168.0.1. DHCP сервер нь гадаад сүлжээнд (Интернет) ажиллах болно.

Нэрийн тууштай байдлын асуудал и Гватемалийн алдартай программист - системийн түгээлтийн сүлжээний интерфэйс болон үйлчилгээг тохируулдаг хэн бүхнийг хүлээж буй хоёр асуудал.

Зэрэгцээ эмх замбараагүй байдал (уянгын хазайлт)Ленарт Поттеринг өөрийн гэсэн хөтөлбөрийг эмхэтгэсэн системд Маш сайн. Энэ системд бусад хөтөлбөрүүдийг маш хурдан эхлүүлдэг тул тэд шүүгчийн шүглийн цохилтоос сэргэж амжаагүй, саад тотгорыг эхлүүлэхгүйгээр гараанд бүдэрч унадаг.

Гэхдээ нухацтай хэлэхэд системийн үйлдлийн системийн эхэн үед эхлүүлсэн процессуудыг түрэмгий зэрэгцүүлэх нь LSB-ийн туршлагатай дараалсан мэргэжилтнүүдийн хувьд "илжигний гүүр" юм. Аз болоход, энэ "зэрэгцээ эмх замбараагүй байдал" -ыг эмх цэгцтэй болгох нь үргэлж тодорхой байдаггүй ч энгийн зүйл болж хувирдаг.

Бид тогтмол нэртэй хоёр виртуал гүүрний интерфейс үүсгэдэг: лан и wan. Бид Wi-Fi адаптер(ууд)-ыг эхнийх, 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

Энд байгаа "ид шид" нь параметрт оршдог холбох-динамик, энэ нь dnsmasq демоныг систем дээр гарч ирэх хүртэл хүлээхийг хэлдэг интерфэйс=лан, мөн гарааны дараа бардам ганцаардлаас болж ухаан алддаггүй.

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

6. HOSTAPD

Эцэст нь hostapd-ийн ид шидийн тохиргоо. Хэн нэгэн энэ өгүүллийг яг эдгээр нандин мөрүүдийг хайж байгаа гэдэгт би эргэлзэхгүй байна.

Hostapd-г суулгахын өмнө та "нэгдмэл байдлын асуудал" -ыг даван туулах хэрэгтэй. Суурилуулсан Wi-Fi адаптер wlan0 нь нэмэлт USB Wi-Fi төхөөрөмжийг холбох үед нэрээ wlan1 болгон хялбархан өөрчлөх боломжтой. Тиймээс бид интерфэйсийн нэрийг дараах байдлаар засах болно: бид (утасгүй) адаптеруудын өвөрмөц нэрийг гаргаж, тэдгээрийг MAC хаягуудтай холбох болно.

Wlan0 хэвээр байгаа суурилуулсан Wi-Fi адаптерийн хувьд:

# 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 нь интерактив горимд ажиллаж, төлөвөө консол руу дамжуулах болно. Хэрэв алдаа байхгүй бол AC горимыг дэмждэг үйлчлүүлэгчид хандалтын цэгт холбогдох боломжтой болно. 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 адаптерийг бөөрөлзгөнөтэй холбоход ялангуяа ашигтай байх болно.

Одоо та:

# systemctl enable hostapd
# reboot

7. IPTABLES

"Юу???" © Тийм ээ, тийм! Байхгүй системд. Шинээр үйлдвэрлэсэн комбайн байхгүй (хэлбэрээр firewalld), эцэст нь ижил зүйлийг хийдэг.

Хуучин сайныг нь ашиглая 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

Бид дээрх скриптийг ажиллуулж, Raspberry-тэй шинэ утастай SSH холболт үүсгэх чадвараа алддаг. Энэ нь зөв, бид Wi-Fi чиглүүлэгчийг хийсэн бөгөөд үүнд "Интернэтээр" нэвтрэхийг анхдагчаар хориглодог - одоо зөвхөн "агаараар". Бид үйлчилгээ үзүүлэгчийн Ethernet кабелийг холбож, аялж эхэлнэ!

8. Бонус: +2,4GHz

Би дээр дурдсан зургийн дагуу анхны Raspberry чиглүүлэгчийг угсрахдаа Wi-Fi дизайны хязгаарлалтын улмаас "бөөрөлзгөнө"-г огт харж чадахгүй байсан хэд хэдэн хэрэгслийг гэрт нь олж мэдсэн. Чиглүүлэгчийг 802.11b/g/n дээр ажиллахаар дахин тохируулах нь зохисгүй байсан, учир нь энэ тохиолдолд "агаарт" хамгийн дээд хурд нь 40 Мбит-ээс хэтрэхгүй байсан бөгөөд миний дуртай интернет үйлчилгээ үзүүлэгч надад 100 (кабелиар) санал болгодог.

Үнэн хэрэгтээ асуудлын шийдлийг аль хэдийн зохион бүтээсэн: 2,4 GHz давтамжтай ажилладаг хоёр дахь Wi-Fi интерфейс, хоёр дахь хандалтын цэг. Ойролцоох лангуунаас би эхнийх нь биш, харин хоёр дахь 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

сэтгэгдэл нэмэх