结合DNSmasq+iptables使用AirPort Express实现无线访问因特网¶
AirPort Express通常在小型办公室或家庭网络中使用,只需要简单将 AirPort Express 连接到能够动态分配IP地址的局域网络,通过DHCP分配访问Internet的IP地址(类似 iptables配置因特网共享连接(ICS) )就可以让AirPort Express通过无线扩展,允许连接AirPort Express的无线客户端访问Internet。
问题来了,我们是不是必须要买一个宽带路由器才能使用AirPort Express呢?
显然不是,只需要有一个DHCP( DNSmasq )提供对应的网络配置就可以
上图中,在 HPE ProLiant DL360 Gen9服务器 服务器上部署 私有云架构 ,物理主机 zcloud
运行了 私有云DNS服务(dnsmasq)和共享因特网(ICS) ,最初只是作为私有网络的DNS解析。不过 DNSmasq 可以同时提供 DHCP 和 TFTP 服务,特别适合局域网无盘工作站部署。这里的架构,就是采用 DNSmasq 的DHCP服务来提供IP配置:
DHCP配置¶
在 私有云DNS服务(dnsmasq)和共享因特网(ICS) 配置的DNS基础上,添加DHCP配置来完成进一步的 部署DNSmasq :
# 本地默认域名
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) 以允许无线客户端:
# 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"