Raspberry Pi + CentOS = Wi-Fi 熱點(或紅帽的樹莓路由器)

網路上有大量關於基於 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 熱點(或紅帽的樹莓路由器)
(免費提供的圖像的混合)

讓我們立即註意到,某些宇宙速度是行不通的。 我透過無線方式從 Raspberry 擠出最大 100 Mbps 的速度,這涵蓋了我的網路供應商的速度。 如果理論上即使在 N 上也能達到半千兆位,為什麼還需要這麼慢的 AC? 如果你問過自己這個問題,那就去商店買一個真正的有八根外接天線的路由器。

0. 你需要什麼

  • 事實上,「樹莓派產品」本身就是這樣的水準:Pi 3 Model B+(實現令人垂涎的 5GHz 速度和通道);
  • 良好的 microSD >= 4GB;
  • 配備 Linux 和 microSD 讀卡機/寫入器的工作站;
  • 具備足夠的 Linux 技能,本文適合經過訓練的 Geek;
  • Raspberry 和 Linux 之間的有線網路 (eth0) 連接,在本機網路上執行 DHCP 伺服器,並從兩個裝置存取網際網路。

對最後一點的一個小評論。 「先有雞蛋還是先有…」在沒有任何上網設備的情況下如何製作Wi-Fi路由器? 讓我們把這個有趣的練習放在本文的討論範圍之外,簡單地假設 Raspberry 透過電線連接到本地網路並可以存取網路。 在這種情況下,我們不需要額外的電視和操縱器來設定「樹莓派」。

1.安裝CentOS

專案首頁

在撰寫本文時,設備上運行的 CentOS 版本是 32 位元。 我在萬維網上的某個地方看到這樣的觀點:64 位元 ARM 架構上的此類作業系統的效能降低了 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 上製作根目錄的副本,刪除 microSD 中除第一個 (/boot) 之外的所有分割區,建立新的根目錄並從副本中傳回其內容。

所需操作的範例(嚴重控制台輸出)

# mount /dev/mmcblk0p3 /mnt
# cd /mnt
# tar cfz ~/pi.tgz . --no-selinux
# cd
# umount /mnt

# parted /dev/mmcblk0

(parted) unit s
(parted) print free
Model: SD SC16G (sd/mmc)
Disk /dev/mmcblk0: 31116288s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start     End        Size       Type     File system     Flags
        63s       2047s      1985s               Free Space
 1      2048s     1370111s   1368064s   primary  fat32           boot, lba
 2      1370112s  2369535s   999424s    primary  linux-swap(v1)
 3      2369536s  5298175s   2928640s   primary  ext4
        5298176s  31116287s  25818112s           Free Space

(parted) rm 3
(parted) rm 2

(parted) print free
Model: SD SC16G (sd/mmc)
Disk /dev/mmcblk0: 31116288s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start     End        Size       Type     File system  Flags
        63s       2047s      1985s               Free Space
 1      2048s     1370111s   1368064s   primary  fat32        boot, lba
        1370112s  31116287s  29746176s           Free Space

(parted) mkpart
Partition type?  primary/extended? primary
File system type?  [ext2]? ext4
Start? 1370112s
End? 31116287s

(parted) set
Partition number? 2
Flag to Invert? lba
New state?  on/[off]? off

(parted) print free
Model: SD SC16G (sd/mmc)
Disk /dev/mmcblk0: 31116288s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start     End        Size       Type     File system  Flags
        63s       2047s      1985s               Free Space
 1      2048s     1370111s   1368064s   primary  fat32        boot, lba
 2      1370112s  31116287s  29746176s  primary  ext4

(parted) quit

# mkfs.ext4 /dev/mmcblk0p2 
mke2fs 1.44.6 (5-Mar-2019)
/dev/mmcblk0p2 contains a swap file system labelled '_swap'
Proceed anyway? (y,N) y
Discarding device blocks: done                            
Creating filesystem with 3718272 4k blocks and 930240 inodes
Filesystem UUID: 6a1a0694-8196-4724-a58d-edde1f189b31
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done   

# mount /dev/mmcblk0p2 /mnt
# tar xfz ~/pi.tgz -C /mnt --no-selinux

解壓縮根分區的內容後,是時候對其進行一些更改了。

禁用 SELinux /mnt/etc/selinux/config:

SELINUX=disabled

編輯 /mnt/etc/fstab,只留下關於分割區的兩個條目: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 為以下形式(一行,無連字號):

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

表面處理:

# cd
# umount /mnt
# sync

我們將 microSD 重新排列到「raspberry」中,啟動它並透過 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

我們重新啟動「raspberry」並再次透過 ssh 對其進行網路存取(IP 位址可能會變更)。 注意使用的東西 / etc / resolv.conf中,由網路管理器先前建立。 因此,如果解決時出現問題,請編輯其內容。 使用 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 /日誌- 並查看 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 路由器,因此我們會提前做好準備,迎接驚喜 調節器:

# 百勝訊息 cda
摘要: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 上安裝「vanilla」CentOS 的完整說明。 您最終應該得到一台在 10 秒內(重新)啟動的 PC,使用少於 15 MB 的 RAM 和 1.5 GB 的 microSD(由於 /boot 不完整,實際上少於 1 GB,但說實話)。

若要在此系統上安裝 Wi-Fi 存取點軟體,您需要稍微擴充標準 CentOS 發行版的功能。 首先,我們來升級內建Wi-Fi適配器的驅動程式(韌體)。 專案主頁說:

Raspberry 3B 和 3B+ 上的 Wifi

CentOS 專案不允許分發 Raspberry PI 3B/3B+ 韌體檔案。 您可以使用以下文章來了解問題、取得韌體並設定 wifi。

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 日。

當然還有 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. 網路配置和麵臨的挑戰

正如我們上面同意的,“樹莓派”通過“線路”連接到本地網路。 我們假設提供者以完全相同的方式提供 Internet 存取權:公共網路上的位址由 DHCP 伺服器動態發布(可能帶有 MAC 綁定)。 在這種情況下,在對樹莓派進行最終設定後,您只需將提供者的電纜「插入」即可。 授權使用 系統網絡化 - 該主題是另一篇文章的主題,此處不進行討論。

Raspberry 的 Wi-Fi 介面是本機網絡,內建乙太網路適配器 (eth0) 是外部網路。 讓我們對本地網路進行靜態編號,例如:192.168.0.0/24。 樹莓派地址:192.168.0.1。 DHCP 伺服器將在外部網路(互聯網)上運作。

命名一致性問題 и 危地馬拉著名程式設計師 - 任何在 systemd 發行版中配置網路介面和服務的人都會遇到兩個麻煩。

平行混沌(抒情題外話)Lennart Pottering 編寫了自己的程式 systemd 非常好。 這 systemd 啟動其他項目的速度如此之快,以至於他們沒有時間從裁判的哨聲中恢復過來,甚至在開始障礙賽之前就絆倒了。

但說實話,對於經驗豐富的順序 LSB 專家來說,systemd 作業系統啟動時啟動的進程的積極並行化是一種「驢橋」。 幸運的是,為這種「並行混亂」帶來秩序其實很簡單,儘管並不總是那麼明顯。

我們建立兩個具有常數名稱的虛擬橋接器介面: 局域網 и 蒼白。 我們將 Wi-Fi 轉接器「連接」到第一個轉接器,將 eth0「raspberry」「連接」到第二個轉接器。

/etc/systemd/network/lan.netdev:

[NetDev]
Name=lan
Kind=bridge

/etc/systemd/network/lan.network:

[Match]
Name=lan

[Network]
Address=192.168.0.1/24
IPForward=yes

/etc/systemd/network/wan.netdev:

[NetDev]
Name=wan
Kind=bridge
#MACAddress=xx:xx:xx:xx:xx:xx

/etc/systemd/network/wan.network:

[Match]
Name=wan

[Network]
DHCP=ipv4
IPForward=yes

IP轉送=是 無需透過 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 接入點,沒有什麼比一對甜蜜的情侶更好的了 域名 + hostapd 還沒弄清楚。 在我看來。

萬一有人忘記了,那麼…hostapd - 這是控制 Wi-Fi 適配器的東西(特別是,它將負責將它們連接到虛擬 局域網 「覆盆子」),授權並註冊無線用戶端。

域名 — 設定客戶端的網路堆疊:發布 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. 主機PD

最後是神奇的 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

一刻也不忘 國家緊急委員會,更改我們需要的參數並手動檢查功能:

# 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.IP表

“世界衛生大會???” © 是的,是的! 沒有任何 systemd。 沒有新奇的聯合收割機(形式為 firewalld),最終會做同樣的事情。

讓我們使用舊的 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

當我使用上述圖紙組裝第一台樹莓派路由器時,我發現家裡的許多小工具由於 Wi-Fi 設計的限制,根本看不到「樹莓派」。 重新配置路由器使其在802.11b/g/n 下工作是不公平的,因為在這種情況下「無線」的最大速度不超過40 Mbit,而我最喜歡的網路供應商為我提供了100 Mbit (透過電纜)。

事實上,這個問題的解決方案已經被發明:第二個 Wi-Fi 介面以 2,4 GHz 頻率運行,以及第二個存取點。 在附近的一個攤位上,我買的不是第一個,而是第二個我遇到的 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 轉接器和電源供應器的品質。 連接的“熱哨子”有時會因短期電氣故障而導致“覆盆子凍結”。

來源: www.habr.com

添加評論