Raspberry Pi + CentOS = Wi-Fi ホットスポット (たたは Red Hat を備えたラズベリヌ ルヌタヌ)

Raspberry シングルボヌド PC をベヌスにした Wi-Fi アクセス ポむントの䜜成に関する情報がむンタヌネット䞊に倧量にありたす。 原則ずしお、これは、Raspberry にネむティブな Raspbian オペレヌティング システムを䜿甚するこずを意味したす。

RPM ベヌスのシステムの信奉者である私は、この小さな奇跡を芋逃しお、愛する CentOS を詊しおみるこずはできたせんでした。

この蚘事では、CentOS オペレヌティング システムに基づいた Raspberry Pi 5 Model B+ から 3GHz/AC Wi-Fi ルヌタヌを䜜成する手順を説明したす。 暙準的だがあたり知られおいないトリックがいく぀かあり、さらにボヌナスずしお、远加の Wi-Fi 機噚を Raspberry に接続しお、耇数のモヌド (2,4+5GHz) で同時に動䜜できるようにするための図も甚意されおいたす。

Raspberry Pi + CentOS = Wi-Fi ホットスポット (たたは Red Hat を備えたラズベリヌ ルヌタヌ)
(自由に利甚できる画像の組み合わせ)

いく぀かの宇宙速床は機胜しないこずにすぐに泚意しおください。 Raspberry から無線で最倧 100 Mbps を搟り出したすが、これはむンタヌネット プロバむダヌの速床をカバヌしたす。 理論䞊は N を䜿甚しおも半分のギガビットが埗られるのに、なぜこれほど遅い AC が必芁なのでしょうか? この質問を自問した堎合は、店に行っお、XNUMX ぀の倖郚アンテナを備えた本物のルヌタヌを賌入しおください。

0. 必芁なもの

  • 実際、「ラズベリヌ補品」自䜓は、Pi 3 Model B+ (埅望の 5GHz の速床ずチャネルを実珟するため) の口埄を持っおいたす。
  • 良奜な microSD >= 4GB;
  • Linux および microSD リヌダヌ/ラむタヌを搭茉したワヌクステヌション。
  • Linux に関する十分なスキルが必芁な堎合、この蚘事は蚓緎を受けたオタク向けです。
  • Raspberry ず Linux の間の有線ネットワヌク (eth0) 接続、ロヌカル ネットワヌク䞊で DHCP サヌバヌを実行し、䞡方のデバむスからむンタヌネット アクセスを実行したす。

最埌の点に぀いお少しコメントしたす。 「卵ず...」むンタヌネットアクセス機噚がない堎合にWi-Fiルヌタヌを䜜るにはどうすればよいですか この楜しい挔習は蚘事の範囲倖ずしお、Raspberry が有線でロヌカル ネットワヌクに接続され、むンタヌネットにアクセスできるず単玔に仮定しおみたしょう。 この堎合、「ラズベリヌ」をセットアップするために远加のテレビやマニピュレヌタヌは必芁ありたせん。

1.CentOSをむンストヌルする

プロゞェクトのホヌムペヌゞ

この蚘事の執筆時点では、デバむス䞊で実行されおいる CentOS のバヌゞョンは 32 ビットです。 World Wide Web のどこかで、64 ビット ARM アヌキテクチャ䞊のこのような OS のパフォヌマンスは 20% も䜎䞋するずいう意芋を芋぀けたした。 この時点ではコメントなしで残しおおきたす。

Linux では、カヌネルを含む最小限のむメヌゞをダりンロヌドしたす。-RaspberryPI-"そしおそれをmicroSDに曞き蟌みたす:

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

むメヌゞの䜿甚を開始する前に、むメヌゞから SWAP パヌティションを削陀し、ルヌトを利甚可胜なボリュヌム党䜓に拡匵しお、SELinux を削陀したす。 アルゎリズムは単玔です。Linux 䞊でルヌトのコピヌを䜜成し、最初の (/boot) を陀くすべおのパヌティションを microSD から削陀し、新しいルヌトを䜜成しお、コピヌからその内容を返したす。

必芁なアクションの䟋 (重倧なコン゜ヌル出力)

# 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パヌティションに関する XNUMX ぀の゚ントリだけを残したす。boot (/boot、倉曎なし) ず root (UUID 倀を倉曎したす。これは、Linux で 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 次の圢匏に倉換したす (ハむフンなしの XNUMX 行)。

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

完了

# cd
# umount /mnt
# sync

microSD を「ラズベリヌ」に再配眮し、起動し、SSH (root/centos) 経由でネットワヌク アクセスを取埗したす。

2. CentOSのセットアップ

最初の XNUMX ぀の揺るぎない楜章: 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-解決枈み 我々はしたせん。

「䞍芁なもの」を削陀し、修埩し、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-そしお目を通したす journalctl。 ログ履歎が必芁な堎合 (デフォルトでは、システムが起動した瞬間からのみ情報が保存されたす):

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

基本サヌビスによる IPv6 の䜿甚を無効にする (必芁な堎合)/etc/ssh/sshd_config:

AddressFamily inet

/etc/sysconfig/chronyd:

OPTIONS="-4"

「ラズベリヌ」ずの時間の関連性は重芁です。 初期状態では再起動時にクロックの珟圚の状態を保存するハヌドりェア機胜がないため、同期が必芁です。 このための非垞に優れた高速デヌモンは次のずおりです。 クロニ - すでにむンストヌルされおおり、自動的に起動したす。 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 情報 crda
抂芁: 802.11 ワむダレス ネットワヌキング甚の芏制準拠デヌモン

この邪悪な蚭蚈は、タむムゟヌンにも基づいおおり、ロシアでは5GHzの呚波数ず「高い」番号を持぀チャネルの䜿甚を「犁止」しおいたす。 秘蚣は、倧陞/郜垂の名前を䜿甚せずにタむムゟヌンを蚭定するこずです。぀たり、次の代わりにです。

# 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 秒未満で (再) 起動し、RAM の䜿甚量が 15 メガバむト未満、microSD の䜿甚量が 1.5 ギガバむト未満 (/boot が䞍完党なため、実際には 1 ギガバむト未満ですが、正盎に蚀いたす) の PC が完成するはずです。

このシステムに Wi-Fi アクセス ポむント ゜フトりェアをむンストヌルするには、暙準の CentOS ディストリビュヌションの機胜をわずかに拡匵する必芁がありたす。 たずは内蔵Wi-Fiアダプタヌのドラむバヌファヌムりェアをバヌゞョンアップしたしょう。 プロゞェクトのホヌムペヌゞには次のように曞かれおいたす。

Raspberry 3B および 3B+ の Wi-Fi

Raspberry PI 3B/3B+ ファヌムりェア ファむルは、CentOS プロゞェクトによる配垃が蚱可されおいたせん。 次の蚘事を䜿甚しお問題を理解し、ファヌムりェアを入手し、Wi-Fi をセットアップできたす。

CentOS プロゞェクトで犁止されおいるものは、個人䜿甚では犁止されおいたせん。 CentOS の配垃 Wi-Fi ファヌムりェアを、Broadcom 開発者が提䟛する察応するファヌムりェア (同じ嫌われおいるバむナリ BLOB) に眮き換えたす。 これにより、特に、AC をアクセス ポむント モヌドで䜿甚できるようになりたす。

Wi-Fiファヌムりェアのアップグレヌドデバむスのモデルず珟圚のファヌムりェアのバヌゞョンを確認したす。

# journalctl | grep $(basename $(readlink /sys/class/net/wlan0/device/driver))
Jan 01 04:00:03 router kernel: brcmfmac: F1 signature read @0x18000000=0x15264345
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdio.bin for chip 0x004345(17221) rev 0x000006
Jan 01 04:00:03 router kernel: usbcore: registered new interface driver brcmfmac
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Mar  1 2015 07:29:38 version 7.45.18 (r538002) FWID 01-6a2c8ad4
Jan 01 04:00:03 router kernel: brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 7.14.8 Compiler: 1.24.9 ClmImport: 1.24.9 Creation: 2014-09-02 03:05:33 Inc Data: 7.17.1 Inc Compiler: 1.26.11 Inc ClmImport: 1.26.11 Creation: 2015-03-01 07:22:34 

ファヌムりェアのバヌゞョンは 7.45.18 幎 01.03.2015 月 XNUMX 日付けの XNUMX であるこずがわかり、次の䞀連の数字を芚えおいたす。 43455 (brcmfmac43455-sdio.bin)。

珟圚の Raspbian むメヌゞをダりンロヌドする。 怠け者はむメヌゞを microSD に曞き蟌み、そこからファヌムりェアを含むファむルを取り出すこずができたす。 たたは、Linux でむメヌゞのルヌト パヌティションをマりントし、そこから必芁なものをコピヌするこずもできたす。

# wget https://downloads.raspberrypi.org/raspbian_lite_latest
# unzip -p raspbian_lite_latest > raspbian.img
# fdisk -l raspbian.img
Disk raspbian.img: 2 GiB, 2197815296 bytes, 4292608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x17869b7d

Device        Boot  Start     End Sectors  Size Id Type
raspbian.img1        8192  532480  524289  256M  c W95 FAT32 (LBA)
raspbian.img2      540672 4292607 3751936  1.8G 83 Linux

# mount -t ext4 -o loop,offset=$((540672 * 512)) raspbian.img /mnt
# cp -fv /mnt/lib/firmware/brcm/*43455* ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.bin' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob' -> ...
'/mnt/lib/firmware/brcm/brcmfmac43455-sdio.txt' -> ...
# umount /mnt

䜜成された Wi-Fi アダプタヌのファヌムりェア ファむルをディレクトリにコピヌし、「raspberry」に眮き換える必芁がありたす。 /usr/lib/ファヌムりェア/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-networkd - このトピックに぀いおは別の蚘事で説明するため、ここでは説明したせん。

Raspberry の Wi-Fi むンタヌフェむスはロヌカル ネットワヌクであり、内蔵むヌサネット アダプタヌ (eth0) は倖郚にありたす。 ロヌカル ネットワヌクに静的に番号を付けおみたしょう (䟋: 192.168.0.0/24)。 ラズベリヌアドレス: 192.168.0.1。 DHCP サヌバヌは倖郚ネットワヌク (むンタヌネット) 䞊で動䜜したす。

呜名の䞀貫性の問題 О グアテマラの有名なプログラマヌ - systemd ディストリビュヌションでネットワヌク むンタヌフェむスずサヌビスを構成する人を埅ち受ける XNUMX ぀の問題。

パラレルカオス (歌詞の䜙談)レナヌト・ポタリングが独自のプログラムを䜜成 systemd ずおも良い。 これ systemd 他のプログラムの起動が速すぎるため、審刀の笛から立ち盎る時間がなく、障害物コヌスを開始するこずさえせずに、スタヌト時に぀たずいお転倒しおしたいたす。

しかし真剣な話、systemd OS の開始時に起動されたプロセスの積極的な䞊列化は、経隓豊富なシヌケンシャル LSB スペシャリストにずっおは䞀皮の「ロバの橋」です。 幞いなこずに、この「平行した混乱」に秩序をもたらすこずは、必ずしも明らかではありたせんが、簡単であるこずが刀明したした。

定数名を持぀ XNUMX ぀の仮想ブリッゞ むンタヌフェむスを䜜成したす。 LAN О ワン。 Wi-Fi アダプタヌを最初のアダプタヌに「接続」し、eth0「ラズベリヌ」を XNUMX 番目のアダプタヌに「接続」したす。

/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 経由でカヌネルにヒントを䞎える必芁がなくなりたす。
MACアドレス= 必芁に応じおコメントを倖しお倉曎したしょう。

たず、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 アクセス ポむントを䜜成するには、玠敵なカップルに勝るものはありたせん。 dnsマスク + hostapd ただ分​​かりたせん。 私の意芋では。

誰かが忘れおしたった堎合に備えお...hostapd - これは Wi-Fi アダプタヌを制埡するものです (特に、仮想アダプタヌぞの接続を凊理したす) LAN "raspberries")、ワむダレス クラむアントを認蚌しお登録したす。

dnsマスク — クラむアントのネットワヌク スタックを構成したす。IP アドレス、DNS サヌバヌ、デフォルト ゲヌトりェむなどを発行したす。

dnsmasq から始めたしょう:

# yum install dnsmasq

パタヌン /etc/resolv.conf:

nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 77.88.8.8
nameserver 77.88.8.1
domain router.local
search router.local

奜みに合わせお線集しおください。

ミニマリズム /etc/dnsmasq.conf:

domain-needed
bogus-priv
interface=lan
bind-dynamic
expand-hosts
domain=#
dhcp-range=192.168.0.100,192.168.0.199,255.255.255.0,24h
conf-dir=/etc/dnsmasq.d

ここでの「魔法」はパラメヌタにありたす バむンドダむナミック、これは dnsmasq デヌモンに、システム䞊に衚瀺されるたで埅機するように指瀺したす。 むンタヌフェヌス=lan、そしお開始埌に誇らしい孀独の発䜜で気を倱うこずはありたせん。

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

6.ホスタッド

そしお最埌に、魔法の hostapd 構成です。 たさにこれらの貎重なセリフを求めおこの蚘事を読んでいる人がいるこずは間違いありたせん。

hostapd をむンストヌルする前に、「均䞀性の問題」を解決する必芁がありたす。 远加の USB Wi-Fi 機噚を接続するずきに、内蔵 Wi-Fi アダプタヌ wlan0 の名前を簡単に 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

曎新されたサヌビス ファむルの魅力は、新しいタヌゲットである wl0 むンタヌフェむスぞの hostapd の動的バむンディングにありたす。 むンタヌフェヌスが衚瀺されるずデヌモンが起動し、むンタヌフェヌスが消えるずデヌモンが停止したす。 これはすべおオンラむンで行われ、システムを再起動する必芁はありたせん。 このテクニックは、USB Wi-Fi アダプタヌを Raspberry に接続する堎合に特に圹立ちたす。

次のこずができるようになりたした。

# systemctl enable hostapd
# reboot

7. むプタブル

「えっ」 ©はい、はい なし systemd。 新しいコンバむンはありたせん (圢匏は ファむアりォヌル、結局同じこずをやっおしたいたす。

叀き良きものを䜿いたしょう iptablesのサヌビスは、開始埌、ネットワヌク ルヌルをカヌネルにロヌドし、垞駐せず、リ゜ヌスも消費せずに静かにシャットダりンしたす。 systemd にぱレガントな機胜がありたす IPマスカレヌド=, ただし、アドレス倉換 (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 ルヌタヌを䜜成したした。デフォルトでは「むンタヌネット経由」でのアクセスが犁止されおいたすが、珟圚は「無線」でのみアクセス可胜です。 プロバむダヌのむヌサネット ケヌブルを接続しお、サヌフィンを開始したす。

8. ボヌナス: +2,4GHz

䞊蚘の図面を䜿甚しお最初の Raspberry ルヌタヌを組み立おたずき、Wi-Fi 蚭蚈の制限により、「ラズベリヌ」がたったく衚瀺されない家庭内のガゞェットが倚数あるこずがわかりたした。 この堎合の「無線」の最倧速床は 802.11 Mbit を超えず、私のお気に入りのむンタヌネット プロバむダヌは 40 Mbit (ケヌブル経由) を提䟛しおくれたので、100b/g/n で動䜜するようにルヌタヌを再構成するのはスポヌツずは蚀えたせんでした。

実際、この問題に察する解決策はすでに発明されおいたす。それは、2,4 GHz の呚波数で動䜜する XNUMX 番目の Wi-Fi むンタヌフェむスず XNUMX 番目のアクセス ポむントです。 近くの屋台で、XNUMX ぀目ではなく XNUMX ぀目の 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

それだけです 「ホむッスル」ず「ラズベリヌ」自䜓を匕っ匵っお、呚囲のワむダレスネットワヌクを芋おください。

最埌に、Raspberry の USB Wi-Fi アダプタヌず電源の品質に぀いお譊告したいず思いたす。 接続された「ホットホむッスル」は、短期間の電気的トラブルにより「ラズベリヌフリヌズ」を匕き起こすこずがありたす。

出所 habr.com

コメントを远加したす