Raspberry Pi + CentOS = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ đỏ)

Có rất nhiều thông tin trên Internet về việc tạo điểm truy cập Wi-Fi dựa trên PC bo mạch đơn Raspberry. Theo quy định, điều này có nghĩa là sử dụng hệ điều hành Raspbian có nguồn gốc từ Raspberry.

Là một tín đồ của các hệ thống dựa trên RPM, tôi không thể bỏ qua điều kỳ diệu nhỏ bé này mà không dùng thử CentOS yêu quý của mình trên nó.

Bài viết cung cấp hướng dẫn tạo bộ định tuyến Wi-Fi 5GHz/AC từ Raspberry Pi 3 Model B+ dựa trên hệ điều hành CentOS. Sẽ có một số thủ thuật tiêu chuẩn nhưng ít được biết đến và như một phần thưởng - bản vẽ kết nối thiết bị Wi-Fi bổ sung với Raspberry, cho phép nó hoạt động đồng thời ở một số chế độ (2,4 + 5GHz).

Raspberry Pi + CentOS = Điểm truy cập Wi-Fi (hoặc bộ định tuyến mâm xôi có mũ đỏ)
(kết hợp các hình ảnh có sẵn miễn phí)

Chúng ta hãy lưu ý ngay rằng một số vận tốc vũ trụ sẽ không đúng. Tôi tăng tối đa 100 Mbps từ Raspberry của mình qua mạng và điều này bao gồm tốc độ của nhà cung cấp dịch vụ Internet của tôi. Tại sao bạn cần một AC chậm chạp như vậy, nếu trên lý thuyết bạn có thể nhận được nửa gigabit ngay cả trên N? Nếu bạn đã tự hỏi mình câu hỏi này, thì hãy đến cửa hàng để mua một bộ định tuyến thực sự có tám ăng-ten bên ngoài.

0. Những gì bạn sẽ cần

  • Trên thực tế, bản thân “sản phẩm mâm xôi” đã có tầm cỡ: Pi 3 Model B+ (để đạt được tốc độ và kênh 5GHz đáng mơ ước);
  • MicroSD tốt >= 4GB;
  • Máy trạm có đầu đọc/ghi Linux và microSD;
  • Có đủ kỹ năng về Linux, bài viết này dành cho những người đam mê đã được đào tạo;
  • Kết nối mạng có dây (eth0) giữa Raspberry và Linux, chạy máy chủ DHCP trên mạng cục bộ và truy cập Internet từ cả hai thiết bị.

Một nhận xét nhỏ về điểm cuối cùng. “Cái nào có trước, quả trứng hay…” làm thế nào để tạo bộ định tuyến Wi-Fi khi không có bất kỳ thiết bị truy cập Internet nào? Hãy để bài tập giải trí này nằm ngoài phạm vi của bài viết và chỉ giả sử rằng Raspberry được kết nối với mạng cục bộ bằng dây và có quyền truy cập Internet. Trong trường hợp này, chúng ta sẽ không cần thêm TV và máy thao tác để thiết lập “quả mâm xôi”.

1. Cài đặt CentOS

Trang chủ dự án

Tại thời điểm viết bài này, phiên bản CentOS đang chạy trên thiết bị là 32-bit. Ở đâu đó trên World Wide Web, tôi thấy có ý kiến ​​​​cho rằng hiệu suất của các hệ điều hành như vậy trên kiến ​​​​trúc ARM 64-bit bị giảm tới 20%. Tôi sẽ để lại khoảnh khắc này mà không bình luận.

Trên Linux, tải xuống image tối thiểu bằng kernel "-RaspberryPI-"và ghi nó vào thẻ nhớ microSD:

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

Trước khi bắt đầu sử dụng hình ảnh, chúng tôi sẽ xóa phân vùng SWAP khỏi nó, mở rộng thư mục gốc lên toàn bộ ổ đĩa có sẵn và loại bỏ SELinux. Thuật toán rất đơn giản: tạo một bản sao của root trên Linux, xóa tất cả các phân vùng khỏi thẻ nhớ microSD ngoại trừ (/boot) đầu tiên, tạo một root mới và trả lại nội dung của nó từ bản sao.

Ví dụ về các hành động bắt buộc (đầu ra bảng điều khiển nghiêm trọng)

# 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

Sau khi giải nén nội dung của phân vùng gốc, đã đến lúc thực hiện một số thay đổi đối với nó.

Vô hiệu hóa SELinux trong /mnt/etc/selinux/config:

SELINUX=disabled

Chỉnh sửa /mnt/etc/fstab, chỉ để lại trong đó hai mục về các phân vùng: boot (/boot, không thay đổi) và root (chúng tôi thay đổi giá trị UUID, có thể tìm ra giá trị này bằng cách nghiên cứu đầu ra của lệnh blkid trên Linux):

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

Cuối cùng, chúng tôi thay đổi các tham số khởi động kernel: chúng tôi chỉ định một vị trí mới cho phân vùng gốc, vô hiệu hóa đầu ra của thông tin gỡ lỗi và (tùy chọn) cấm kernel gán địa chỉ IPv6 trên giao diện mạng:

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

Đây là nội dung /mnt/cmdline.txt sang dạng sau (một dòng không có dấu gạch nối):

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

Xong:

# cd
# umount /mnt
# sync

Chúng tôi sắp xếp lại thẻ nhớ microSD vào “quả mâm xôi”, khởi chạy nó và truy cập mạng vào nó thông qua ssh (root/centos).

2. Thiết lập CentOS

Ba chuyển động không lay chuyển đầu tiên: passwd, yum -y cập nhật, khởi động lại.

Chúng tôi cung cấp quản lý mạng mạng:

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

Tạo một tập tin (cùng với các thư mục) /etc/systemd/network/eth0.network:

[Match]
Name=eth0

[Network]
DHCP=ipv4

Chúng tôi khởi động lại quả mâm xôi và một lần nữa nhận được quyền truy cập mạng vào nó thông qua ssh (địa chỉ IP có thể thay đổi). Hãy chú ý đến những gì được sử dụng / Etc / resolv.conf, được tạo trước đó bởi Trình quản lý mạng. Do đó, trong trường hợp có vấn đề với giải pháp, hãy chỉnh sửa nội dung của nó. Sử dụng systemd-giải quyết chúng tôi sẽ không.

Chúng tôi loại bỏ những thứ “không cần thiết”, sửa chữa và tăng tốc độ tải hệ điều hành:

# 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

Ai cần cron và ai không tiêu hóa được tích hợp sẵn bộ đếm thời gian systemd, có thể thiết lập những gì còn thiếu. / var / log- và nhìn qua Journalctl. Nếu bạn cần lịch sử nhật ký (theo mặc định, thông tin chỉ được lưu trữ từ thời điểm hệ thống khởi động):

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

Vô hiệu hóa việc sử dụng IPv6 của các dịch vụ cơ bản (nếu cần)/ etc / ssh / sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

Sự liên quan của thời gian trên quả mâm xôi là một điều quan trọng. Vì không có khả năng phần cứng để lưu trạng thái hiện tại của đồng hồ khi khởi động lại nên cần phải đồng bộ hóa. Một daemon rất tốt và nhanh chóng cho việc này là niên đại - đã được cài đặt và bắt đầu tự động. Bạn có thể thay đổi máy chủ NTP thành máy chủ gần nhất.

/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

Để đặt múi giờ chúng ta sẽ sử dụng bí quyết, Thuật, mẹo. Vì mục tiêu của chúng tôi là tạo ra bộ định tuyến Wi-Fi hoạt động ở tần số 5GHz nên chúng tôi sẽ chuẩn bị trước cho những điều bất ngờ người quản lý:

# thông tin tuyệt vời crda
Tóm tắt: Trình nền tuân thủ quy định cho mạng không dây 802.11

Thiết kế xấu xa này, cũng dựa trên múi giờ, “cấm” việc sử dụng (ở Nga) tần số 5GHz và các kênh có số “cao”. Bí quyết là đặt múi giờ mà không sử dụng tên của các lục địa/thành phố, nghĩa là thay vì:

# timedatectl set-timezone Europe/Moscow

Chúng tôi nhấn:

# timedatectl set-timezone Etc/GMT-3

Và những điểm cuối cùng về kiểu tóc của hệ thống:

# 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. Tiện ích bổ sung CentOS

Mọi thứ đã nói ở trên có thể được coi là hướng dẫn đầy đủ để cài đặt CentOS “vanilla” trên Raspberry Pi. Bạn sẽ có một chiếc PC khởi động lại trong vòng chưa đầy 10 giây, sử dụng ít hơn 15 Megabyte RAM và 1.5 Gigabyte thẻ nhớ microSD (thực tế là ít hơn 1 Gigabyte do /khởi động không hoàn chỉnh, nhưng hãy thành thật mà nói).

Để cài đặt phần mềm điểm truy cập Wi-Fi trên hệ thống này, bạn sẽ cần mở rộng một chút khả năng của bản phân phối CentOS tiêu chuẩn. Trước hết, hãy nâng cấp trình điều khiển (chương trình cơ sở) của bộ điều hợp Wi-Fi tích hợp. Trang chủ dự án cho biết:

Wifi trên Raspberry 3B và 3B+

Dự án CentOS không cho phép phân phối các tệp chương trình cơ sở Raspberry PI 3B/3B+. Bạn có thể sử dụng các bài viết sau để hiểu vấn đề, lấy firmware và thiết lập wifi.

Những gì bị cấm đối với dự án CentOS thì không bị cấm đối với chúng tôi đối với mục đích sử dụng cá nhân. Chúng tôi thay thế chương trình cơ sở Wi-Fi phân phối trong CentOS bằng chương trình cơ sở tương ứng từ các nhà phát triển Broadcom (những đốm màu nhị phân đáng ghét tương tự...). Đặc biệt, điều này sẽ cho phép bạn sử dụng AC ở chế độ điểm truy cập.

Nâng cấp chương trình cơ sở Wi-FiTìm hiểu model thiết bị và phiên bản firmware hiện tại:

# 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 

Chúng tôi thấy rằng phiên bản phần sụn là 7.45.18 ngày 01.03.2015/XNUMX/XNUMX và ghi nhớ bộ số sau: 43455 (brcmfmac43455-sdio.bin).

Tải xuống hình ảnh Raspbian hiện tại. Những người lười biếng có thể ghi hình ảnh vào thẻ nhớ microSD và lấy các tập tin có phần sụn từ đó. Hoặc bạn có thể gắn phân vùng gốc của hình ảnh vào Linux và sao chép những gì bạn cần từ đó:

# 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

Các tệp chương trình cơ sở của bộ điều hợp Wi-Fi thu được phải được sao chép và thay thế bằng “mâm xôi” vào thư mục /usr/lib/firmware/brcm/

Chúng tôi khởi động lại bộ định tuyến trong tương lai và mỉm cười hài lòng:

# 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 

Phiên bản: 7.45.154 ngày 27.02.2018/XNUMX/XNUMX.

Và tất nhiên là 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. Cấu hình mạng và những thách thức phía trước

Như chúng ta đã đồng ý ở trên, quả mâm xôi được kết nối bằng dây với mạng cục bộ. Giả sử rằng nhà cung cấp cung cấp quyền truy cập Internet theo cách giống hệt nhau: địa chỉ trên mạng công cộng được máy chủ DHCP cấp động (có thể có liên kết MAC). Trong trường hợp này, sau khi thiết lập Raspberry lần cuối, bạn chỉ cần “cắm” cáp của nhà cung cấp vào đó là xong. Ủy quyền sử dụng systemd-mạngd - chủ đề của một bài viết riêng và không được thảo luận ở đây.

(Các) giao diện Wi-Fi của Raspberry là mạng cục bộ và bộ điều hợp Ethernet tích hợp (eth0) ở bên ngoài. Hãy đánh số mạng cục bộ một cách tĩnh, ví dụ: 192.168.0.0/24. Địa chỉ mâm xôi: 192.168.0.1. Một máy chủ DHCP sẽ hoạt động trên mạng bên ngoài (Internet).

Vấn đề nhất quán đặt tên и lập trình viên nổi tiếng người Guatemala - hai rắc rối đang chờ đợi bất kỳ ai định cấu hình giao diện và dịch vụ mạng trong bản phân phối systemd.

Hỗn loạn song song (lạc đề trữ tình)Lennart Pottering đã biên soạn chương trình riêng của mình systemd Rất tốt. Cái này systemd khởi động các chương trình khác nhanh đến mức họ không kịp hồi phục sau tiếng còi của trọng tài, vấp ngã ngay từ đầu khi chưa bắt đầu vượt chướng ngại vật.

Nhưng nghiêm túc mà nói, việc song song hóa mạnh mẽ các quy trình đã khởi chạy khi khởi động hệ điều hành systemd là một loại “cầu lừa” dành cho các chuyên gia LSB tuần tự dày dạn kinh nghiệm. May mắn thay, việc lập lại trật tự cho “sự hỗn loạn song song” này hóa ra lại đơn giản, mặc dù không phải lúc nào cũng rõ ràng.

Chúng tôi tạo hai giao diện cầu ảo với tên không đổi: lan и wan. Chúng tôi sẽ “kết nối” (các) bộ điều hợp Wi-Fi với bộ điều hợp đầu tiên và “mâm xôi” eth0 với bộ điều hợp thứ hai.

/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 = có loại bỏ nhu cầu gợi ý kernel thông qua sysctl để kích hoạt định tuyến.
Địa chỉ MAC= Hãy bỏ ghi chú và thay đổi nếu cần thiết.

Đầu tiên chúng ta “kết nối” eth0. Chúng tôi nhớ “vấn đề về tính đồng nhất” và chỉ sử dụng địa chỉ MAC của giao diện này, ví dụ như có thể tìm ra địa chỉ này như thế này:

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

Chúng tôi tạo ra /etc/systemd/network/eth.network:

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

[Network]
Bridge=wan

Chúng tôi xóa tệp cấu hình trước đó eth0, khởi động lại Raspberry và nhận quyền truy cập mạng vào nó (địa chỉ IP rất có thể sẽ thay đổi):

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

5.DNSMASQ

Để tạo điểm truy cập Wi-Fi, không gì có thể vượt qua được một vài dnsmasq + hostapd vẫn chưa tìm ra nó. Theo tôi.

Trong trường hợp có ai quên thì...hostapd - đây là thứ điều khiển các bộ điều hợp Wi-Fi (cụ thể là nó sẽ đảm nhiệm việc kết nối chúng với mạng ảo lan "mâm xôi"), ủy quyền và đăng ký các máy khách không dây.

dnsmasq — định cấu hình ngăn xếp mạng của máy khách: cấp địa chỉ IP, máy chủ DNS, cổng mặc định và các tính năng tương tự.

Hãy bắt đầu với dnsmasq:

# yum install dnsmasq

Mẫu / 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

chỉnh sửa nó theo ý thích của bạn.

tối giản /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

Sự “ma thuật” ở đây nằm ở thông số liên kết động, thông báo cho daemon dnsmasq đợi cho đến khi nó xuất hiện trên hệ thống giao diện=lan, và không ngất xỉu vì nỗi cô đơn kiêu hãnh sau khi bắt đầu.

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

6. HOSTAPD

Và cuối cùng là cấu hình máy chủ ma thuật. Tôi tin chắc rằng có ai đó đang đọc bài viết này để tìm kiếm chính xác những dòng quý giá này.

Trước khi cài đặt Hostapd, bạn cần khắc phục “vấn đề về tính đồng nhất”. Bộ điều hợp Wi-Fi tích hợp wlan0 có thể dễ dàng đổi tên thành wlan1 khi kết nối thêm thiết bị USB Wi-Fi. Do đó, chúng tôi sẽ sửa tên giao diện theo cách sau: chúng tôi sẽ đưa ra tên duy nhất cho bộ điều hợp (không dây) và liên kết chúng với địa chỉ MAC.

Đối với bộ điều hợp Wi-Fi tích hợp vẫn là wlan0:

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

Chúng tôi tạo ra /etc/systemd/network/wl0.link:

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

[Link]
Name=wl0

Bây giờ chúng ta sẽ chắc chắn rằng Wl0 - Đây là Wi-Fi tích hợp. Chúng tôi khởi động lại Raspberry để đảm bảo điều này.

Cài đặt:

# yum install hostapd wireless-tools

Tập tin cấu hình /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

Không quên một giây phút nào GKChP, thay đổi các tham số chúng tôi cần và kiểm tra chức năng theo cách thủ công:

# hostapd /etc/hostapd/hostapd.conf

Hostapd sẽ bắt đầu ở chế độ tương tác, truyền trạng thái của nó tới bảng điều khiển. Nếu không có lỗi thì máy khách hỗ trợ chế độ AC đã có thể kết nối với điểm truy cập. Để dừng Hostapd - Ctrl-C.

Tất cả những gì còn lại là kích hoạt Hostapd khi khởi động hệ thống. Nếu bạn làm điều tiêu chuẩn (systemctl kích hoạt Hostapd), thì sau lần khởi động lại tiếp theo, bạn có thể nhận được một con quỷ “đầy máu” với chẩn đoán “không tìm thấy giao diện wl0". Do “sự hỗn loạn song song”, máy chủ khởi động nhanh hơn so với hạt nhân tìm thấy bộ điều hợp không dây.

Internet có đầy đủ các biện pháp khắc phục: từ thời gian chờ bắt buộc trước khi khởi động daemon (vài phút), đến một daemon khác giám sát sự xuất hiện của giao diện và (khởi động lại) bảng chủ. Các giải pháp khá khả thi, nhưng cực kỳ xấu xí. Chúng tôi kêu gọi sự giúp đỡ tuyệt vời systemd với “mục tiêu” và “nhiệm vụ” và “sự phụ thuộc” của nó.

Sao chép tệp dịch vụ phân phối vào /etc/systemd/system/hostapd.service:

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

và giảm nội dung của nó về dạng sau:

[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

Điều kỳ diệu của tệp dịch vụ được cập nhật nằm ở khả năng liên kết động của Hostapd với mục tiêu mới - giao diện wl0. Khi giao diện xuất hiện, daemon sẽ khởi động; khi nó biến mất, nó sẽ dừng lại. Và tất cả đều trực tuyến - không cần khởi động lại hệ thống. Kỹ thuật này sẽ đặc biệt hữu ích khi kết nối bộ chuyển đổi USB Wi-Fi với Raspberry.

Bây giờ bạn có thể:

# systemctl enable hostapd
# reboot

7. BẢNG IP

"Gì???" © Vâng, vâng! Không có systemd. Không có sự kết hợp mới nào (ở dạng tường lửa), cuối cùng cũng làm điều tương tự.

Hãy sử dụng cái cũ tốt iptables, các dịch vụ của họ, sau khi khởi động, sẽ tải các quy tắc mạng vào kernel và lặng lẽ tắt mà không còn tồn tại và không tiêu tốn tài nguyên. systemd có một vẻ ngoài thanh lịch IPMasquerade=, nhưng chúng tôi vẫn sẽ giao phó việc dịch địa chỉ (NAT) và tường lửa cho iptables.

Cài đặt:

# yum install iptables-services
# systemctl enable iptables ip6tables

Tôi thích lưu trữ cấu hình iptables dưới dạng tập lệnh (ví dụ):

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

Chúng tôi thực thi tập lệnh trên và mất khả năng thiết lập kết nối SSH có dây mới với Raspberry. Đúng vậy, chúng tôi đã tạo một bộ định tuyến Wi-Fi, theo mặc định, việc truy cập vào bộ định tuyến “qua Internet” bị cấm - giờ đây chỉ “qua mạng”. Chúng tôi kết nối cáp Ethernet của nhà cung cấp và bắt đầu lướt web!

8. Tiền thưởng: +2,4 GHz

Khi tôi lắp ráp bộ định tuyến Raspberry đầu tiên bằng bản vẽ được mô tả ở trên, tôi phát hiện ra một số thiết bị trong gia đình mình do hạn chế về thiết kế Wi-Fi nên không thể nhìn thấy “quả mâm xôi”. Việc định cấu hình lại bộ định tuyến để hoạt động ở 802.11b/g/n là điều không cần thiết, vì tốc độ tối đa “qua mạng” trong trường hợp này không vượt quá 40 Mbit và nhà cung cấp Internet yêu thích của tôi cung cấp cho tôi 100 (qua cáp).

Trên thực tế, một giải pháp cho vấn đề này đã được phát minh: giao diện Wi-Fi thứ hai hoạt động ở tần số 2,4 GHz và điểm truy cập thứ hai. Tại một quầy hàng gần đó, tôi không mua chiếc đầu tiên mà là chiếc “còi” USB Wi-Fi thứ hai mà tôi bắt gặp. Người bán bị dày vò bởi những câu hỏi về chipset, khả năng tương thích với nhân ARM Linux và khả năng hoạt động ở chế độ AP (anh ấy là người đầu tiên bắt đầu).

Chúng tôi định cấu hình “còi” bằng cách tương tự với bộ điều hợp Wi-Fi tích hợp.

Đầu tiên, hãy đổi tên nó thành 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

Chúng tôi sẽ giao quyền quản lý giao diện Wi-Fi mới cho một daemon hostingapd riêng biệt, daemon này sẽ bắt đầu và dừng tùy thuộc vào sự hiện diện của một “tiếng còi” được xác định nghiêm ngặt trong hệ thống: wl1.

Tập tin cấu hình /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]

Nội dung của tệp này phụ thuộc trực tiếp vào kiểu bộ điều hợp Wi-Fi USB, do đó, việc sao chép/dán tầm thường có thể khiến bạn thất bại.

Sao chép tệp dịch vụ phân phối vào /etc/systemd/system/hostapd2.service:

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

và giảm nội dung của nó về dạng sau:

[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

Tất cả những gì còn lại là kích hoạt một phiên bản mới của Hostapd:

# systemctl enable hostapd2

Đó là tất cả! Kéo “còi” và “quả mâm xôi”, nhìn vào mạng không dây xung quanh bạn.

Và cuối cùng, tôi muốn cảnh báo bạn về chất lượng của bộ chuyển đổi USB Wi-Fi và nguồn điện của Raspberry. “Còi nóng” được kết nối đôi khi có thể gây ra hiện tượng “mâm xôi đóng băng” do sự cố điện trong thời gian ngắn.

Nguồn: www.habr.com

Thêm một lời nhận xét