如何设置 Alpine 作为无线路由器

来自 Alpine Linux
此材料需要维基语法或样式改进...

请随时帮助我们清理它。

Pi Zero W 无线路由器

本页描述了如何构建一个带有两个有线以太网端口的无线接入点,用于构建家庭路由器,该路由器通过一个有线端口连接到互联网,并通过第二个有线端口和板载 WiFi 连接到内部 LAN。

目的是提供这个

                                    |<-->eth1 <-->| 
Internet <--> eth0 <-->FireWall<-->br0           Internal<--> ssh,bind,dhcp, with ssh reverse ssh connections.
                                    |<-->wlan0<-->|

概述

我通常运行 Debian,当被 Red Hot Irons, Red Hat 强制时也运行。这是我第一次涉足 Alpine。到目前为止,我对它印象深刻。我镜像了 3.12 armhf 仓库,以便在我需要时拥有本地文件。友情提示,它包含 13 GB 的 apk 文件。
Alpine 的一个 *非常* 好的功能是 apk,yum/apt 的替代品

  • 它简单明了。
  • 相同的工具提供 *仓库* 级别的依赖关系报告!
  • 安装没有仓库签名的单个软件包(我从来没有正确获得签名,但我可以安装)。

准备

  • 获取一个 microSD 卡(或 HDD),您可以从中擦除数据。我们假设它是 /dev/sdc。
  • 创建一个 256M FAT16 分区 (sudo mkfs.vfat -n ALPBOOT /dev/sdc1)
  • 设备的其余部分可以是 ext2 (HDD 上为 ext3/4) (sudo mke2fs -m1 -L alext3 /dev/sdc2)。
  • 解压 alpine-rpi-3.12.3-armhf.tar.gz 并将所有文件复制到 fat16 分区,该分区可以大到 2G。
  • 确保您已将下面软件包列表中的所有软件包安装在 SD 卡上。这将为您节省大量时间。
  • 将此添加到 FAT16 分区根目录的 usercfg.txt 中
 enable_uart=1
 gpu_mem=16
 dtparam=audio=off
  • 这是 cmdline.txt 的内容
 modules=loop,squashfs,sd-mod,usb-storage console=tty1 console=ttyAMA0,115200

首次启动

  • 将 SD 卡插入 pi zero
  • 连接串口
  • 运行 minicom,参数设置为 115200,n,8,1,无流量控制。
  • 为 Pi 上电。

复制 Root

  • mkdir /stage
  • mount /dev/sda2 /stage
  • for d in $(ls -1 /|grep -v 'media\|stage\|dev\|proc\|sys'); do cp -a /$d /stage; done
  • 模块循环挂载到 /.modloop,lib/modules 符号链接到它,所以
  • rm /stage/lib/modules
  • cp -a /.modloop /stage/lib/modules
  • 修复 cmdline.txt
 mount -o remount,rw /media/mmcblk0p1
 echo 'root=/dev/mmcblk0p2' >> /media/mmcblk0p1/cmdline.txt
  • 重启

安装

  • 验证您现在正在从 ext2 文件系统运行,您已将 rootfs 复制到该文件系统。
  • 安装 openssh, openssh-server, openssh-client, openssh-server-common,
  • 安装 dnsmasq, ethtool, hostapd*, busybox extras, iptables*, iw,net-tools, tree, wireless-tools.
  • 编辑此处提供的所有配置。
ssh 配置

允许的用户不是普通名称,因为我希望名称有点混淆。但这真的没关系,因为这是一个密钥驱动的设置
AddressFamily inet
ListenAddress 0.0.0.0
HostKey /etc/ssh/ssh_host_rsa_key
LogLevel INFO
LoginGraceTime 30
PermitRootLogin no
StrictModes yes
AllowUsers Som123X Extern4524User
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/authorized_keys
HostbasedAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding no


dnsmasq.conf

/etc/dnsmasq.conf
这有两个子网。一个用于普通 dhcp,另一个用于伪静态 - 由 MAC 提供的 dhcp。这里有一个例子。

interface=br0
except-interface=eth0
dhcp-range=subnet0,192.168.0.10,192.168.0.100,255.255.255.0,24h
dhcp-range=subnet1,192.168.0.4,192.168.0.6,255.255.255.0,24h
bind-interfaces
#log-queries
#log-dhcp
dhcp-host=70:85:66:c4:48:55,192.168.0.4,nas
/etc/hosts

dnsmasq 从 hosts 文件提供 DNS 答案。真棒。

127.0.0.1	localhost localhost.localdomain
::1		localhost localhost.localdomain
192.168.0.3     wireless
192.168.0.4     nas
192.168.0.5     mpd
hostapd.conf

/etc/hostapd/hostapd.conf

interface=wlan0
bridge=br0
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ssid=Whatever
wpa_passphrase=YouMakeItUp
interfaces

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
        hostname ANYNAME
        hwaddress ether FE:ED:BE:EF:33:DD

iface eth1 inet manual
iface wlan0 inet manual

auto br0
iface br0 inet static
        pre-up ifconfig eth1 up
        bridge-ports eth1 wlan0
        bridge-stp off
        address 192.168.0.3
        broadcaset 192.168.1.255
        netmask 255.255.255.0
宽松的 iptables

不要将此连接到互联网!没有保护措施。
这是我在替换 iptables 中的 stopopen
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD ACCEPT
iptables -F FORWARD
iptables -F -t nat
iptables -F

参考

apk 注释

  • 创建、索引和检查 apk 文件列表的依赖关系:apk index -o APKINDEX.unsigned.tar.gz *.apk
  • 安装软件包:apk add iw OR apk add /path/to/iw-5.4-r0.apk
  • 删除软件包:apk del iw
  • 仓库列表位于:/etc/apk/repositories
 * Local URL: /media/mmcblk0p1/apks
 * Remote URL: http://dl-cdn.alpinelinux.org/alpine/v3.12/main

FAT16/32 限制
udhcpc
ez-ipupdate
动态 DNS
Alpine Linux 网桥
连接到无线 AP
dnsmasq 监听限制
禁用 IPV6
dnsmasq 文档
HostApd 文档
[rsync://rsync.alpinelinux.org/alpine Alpine 仓库]
设置静态 DNS 名称
反向 SSH 隧道

Pi 相关

NanoPi NEO 构建脚本

Pi 特有

Pi Wifi 中继器
WiFi 网桥
Alpine 安装
Pi 上的经典 Sys 安装

不相关,但有趣

AP 和管理模式
AP 和 MQTT

软件包列表

将这些放在 256M Fat 分区上的 apks/armhf 目录中

iptables-1.8.4-r2.apk openssh-8.3_p1-r1.apk iptables-openrc-1.8.4-r2.apk openssh-client-8.3_p1-r1.apk abuild-3.6.0-r1.apk iw-5.4-r0.apk openssh-keygen-8.3_p1-r1.apk alpine-base-3.12.3-r0.apk kbd-bkeymaps-2.2.0-r2.apk openssh-server-8.3_p1-r1.apk alpine-baselayout-3.2.0-r7.apk libacl-2.2.53-r0.apk openssh-server-common-8.3_p1-r1.apk alpine-conf-3.9.0-r1.apk libattr-2.4.48-r0.apk openssh-sftp-server-8.3_p1-r1.apk alpine-keys-2.2-r0.apk libblkid-2.35.2-r0.apk openssl-1.1.1i-r0.apk alpine-mirrors-3.5.10-r0.apk libc-utils-0.7.2-r3.apk patch-2.7.6-r6.apk apk-tools-2.10.5-r1.apk libcap-2.27-r0.apk pcsc-lite-libs-1.8.26-r0.apk attr-2.4.48-r0.apk libcom_err-1.45.6-r0.apk pkgconf-1.7.2-r0.apk bash-5.0.17-r0.apk libcrypto1.1-1.1.1i-r0.apk ppp-atm-2.4.8-r2.apk bash-completion-2.10-r0.apk libcurl-7.69.1-r3.apk ppp-chat-2.4.8-r2.apk bonding-2.6-r4.apk libedit-20191231.3.1-r0.apk ppp-daemon-2.4.8-r2.apk bridge-1.5-r4.apk libev-4.33-r0.apk ppp-l2tp-2.4.8-r2.apk bridge-utils-1.6-r0.apk libgcc-9.3.0-r2.apk ppp-minconn-2.4.8-r2.apk busybox-1.31.1-r19.apk libmnl-1.0.4-r0.apk ppp-passprompt-2.4.8-r2.apk busybox-extras-1.31.1-r19.apk libnftnl-1.1.6-r0.apk ppp-passwordfd-2.4.8-r2.apk busybox-initscripts-3.2-r2.apk libnftnl-libs-1.1.6-r0.apk ppp-pppoe-2.4.8-r2.apk busybox-suid-1.31.1-r19.apk libnl3-3.5.0-r0.apk ppp-radius-2.4.8-r2.apk c-ares-1.16.1-r0.apk libpcap-1.9.1-r2.apk ppp-winbind-2.4.8-r2.apk ca-certificates-20191127-r4.apk libssl1.1-1.1.1i-r0.apk readline-8.0.4-r0.apk ca-certificates-bundle-20191127-r4.apk libstdc++-9.3.0-r2.apk scanelf-1.2.6-r0.apk chrony-3.5.1-r0.apk libtls-standalone-2.9.1-r1.apk signature.tar.gz chrony-openrc-3.5.1-r0.apk libusb-1.0.23-r0.apk ssl_client-1.31.1-r19.apk curl-7.69.1-r3.apk libuuid-2.35.2-r0.apk tar-1.32-r1.apk dbus-libs-1.12.18-r0.apk lzip-1.21-r0.apk tcpdump-4.9.3-r2.apk dnsmasq-2.81-r0.apk mii-tool-1.60_git20140218-r2.apk tree-1.8.0-r0.apk e2fsprogs-1.45.6-r0.apk musl-1.1.24-r10.apk tzdata-2020c-r1.apk e2fsprogs-libs-1.45.6-r0.apk musl-utils-1.1.24-r10.apk usb-modeswitch-2.6.0-r1.apk ethtool-5.6-r0.apk ncurses-libs-6.2_p20200523-r0.apk vlan-2.2-r0.apk ez-ipupdate-3.0.10-r9.apk ncurses-terminfo-base-6.2_p20200523-r0.apk wireless-tools-30_pre9-r1.apk fakeroot-1.24-r0.apk net-tools-1.60_git20140218-r2.apk wpa_supplicant-2.9-r5.apk haveged-1.9.8-r1.apk network-extras-1.2-r0.apk wpa_supplicant-openrc-2.9-r5.apk haveged-openrc-1.9.8-r1.apk nghttp2-1.41.0-r0.apk zlib-1.2.11-r3.apk hostapd-2.9-r2.apk nghttp2-libs-1.41.0-r0.apk hostapd-openrc-2.9-r2.apk openrc-0.42.1-r11.apk