如何设置 Alpine 作为无线路由器
![]() 请随时帮助我们清理它。 |
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 相关
Pi 特有
Pi Wifi 中继器
WiFi 网桥
Alpine 安装
Pi 上的经典 Sys 安装
不相关,但有趣
软件包列表
将这些放在 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