结合DNSmasq+iptables使用AirPort Express实现无线访问因特网

AirPort Express通常在小型办公室或家庭网络中使用,只需要简单将 AirPort Express 连接到能够动态分配IP地址的局域网络,通过DHCP分配访问Internet的IP地址(类似 iptables配置因特网共享连接(ICS) )就可以让AirPort Express通过无线扩展,允许连接AirPort Express的无线客户端访问Internet。

问题来了,我们是不是必须要买一个宽带路由器才能使用AirPort Express呢?

显然不是,只需要有一个DHCP( DNSmasq )提供对应的网络配置就可以

../../_images/airpod_express_dnsmasq.png

上图中,在 HPE ProLiant DL360 Gen9服务器 服务器上部署 私有云架构 ,物理主机 zcloud 运行了 私有云DNS服务(dnsmasq)和共享因特网(ICS) ,最初只是作为私有网络的DNS解析。不过 DNSmasq 可以同时提供 DHCP 和 TFTP 服务,特别适合局域网无盘工作站部署。这里的架构,就是采用 DNSmasq 的DHCP服务来提供IP配置:

DHCP配置

私有云DNS服务(dnsmasq)和共享因特网(ICS) 配置的DNS基础上,添加DHCP配置来完成进一步的 部署DNSmasq :

dnsmasq添加DHCP配置
# 本地默认域名
local=/staging.huatai.me/
# 转发上游域名解析服务器,请求DNS解析
server=8.8.8.8
# 监听DNS请求的网卡接口(br0上使用了IP Alias,但是ifconfig只看到一个br0,所以这里配置一个接口)
interface=br0,eno4
# 监听DNS请求的IP地址(注意eno4接口是DHCP动态获取IP,所以使用上面的interface配置)
listen-address=192.168.6.200,192.168.7.200,192.168.8.200,127.0.0.1
# 扩展主机域名,也就是请求 zcloud 默认扩展成 zcloud.staging.huatai.me
expand-hosts
# 服务器提供解析的域名,可以为多个网段提供不同的域名解析
domain=staging.huatai.me,192.168.6.0/24
domain=edge.cloud-atlas.io,192.168.7.0/24
domain=staging.cloud-atlas.io,192.168.8.0/24
# DNS解析缓存
cache-size=1000
# DHCP
dhcp-range=192.168.6.21,192.168.6.50,255.255.255.0,12h
dhcp-option=option:router,192.168.6.200
dhcp-option=option:dns-server,192.168.6.200
dhcp-authoritative

共享Internet连接

完成上述DHCP的IP配置之后,所有连接到AirPod Express的无线客户端都会将 HPE ProLiant DL360 Gen9服务器 服务器上的网络接口IP 192.168.6.200 作为默认网关,则该服务器需要提供 iptables配置因特网共享连接(ICS) 以允许无线客户端:

共享Internet连接
# squid transparent proxy
sudo iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to 192.168.6.200:3128
sudo iptables -t nat -A PREROUTING -i br0:1 -p tcp --dport 80 -j DNAT --to 192.168.6.200:3128
sudo iptables -t nat -A PREROUTING -i eno4 -p tcp --dport 80 -j REDIRECT --to-port 3128

# masquerade 192.168.6.0/24 & 192.168.7.0/24
sudo iptables -A FORWARD -o eno4 -i br0 -s 192.168.6.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -o eno4 -i br0:1 -s 192.168.7.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eno4 -j MASQUERADE
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"