捡了一个S912盒子,想要作为一个无线网关,用作智能家居的网关。有线网口接路由器,通过无线网卡发射WiFi等待其他物联网设备连接。其实说白了就是无线路由器。

前期准备

首先我们改一下systemd-resolved,解除53端口占用。

1
2
3
echo "DNS=114.114.114.114">>/etc/systemd/resolved.conf
echo "DNSStubListener=no">>/etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved

然后要解除NetworkManager对wlan0的占用,先nmcli -s记下wlan0的mac地址,比如ff:ff:ff:ff:ff:ff,编辑/etc/NetworkManager/NetworkManager.conf,改一下下面的字段,把你的wlan0划为unmanageable-devices

1
2
[keyfile]
unmanaged-devices=mac:ff:ff:ff:ff:ff:ff

最后重启NetworkManager生效

1
sudo service NetworkManager restart

配置WiFi

然后我们安装hostapd、dnsmasq

1
sudo apt-get install hostapd dnsmasq -y

hostapd负责发射WiFi,先编辑他的配置文件/etc/default/hostapd,去掉下面这行注释并修改

1
DAEMON_CONF="/etc/hostapd/hostapd.conf"

再编辑他的配置文件/etc/hostapd/hostapd.conf,我把我的配置粘贴一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
interface=wlan0
driver=nl80211
ssid=Armbian
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=1234567890
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

最后启动hostapd

1
sudo systemctl start hostapd.service && sudo systemctl enable hostapd.service

打开你的手机搜索WiFi试试,能不能搜到WiFi。搜到就行了,连不上的,因为接下来才开始配置dhcp和dns呢。

配置DHCP和DNS

首先固定wlan0的IP地址,编辑/etc/network/interfaces

1
2
3
4
auto wlan0
iface wlan0 inet static
address 192.168.99.1
netmask 255.255.255.0

Dnsmasq是集DHCP和DNS服务器于一体的程序,我们编辑它的配置文件/etc/dnsmasq.conf
我把我的/etc/dnsmasq.conf配置粘贴上,每个项字段在dnsmasq.conf里面都有解释,我就不做解释了。

1
2
3
4
interface=wlan0
dhcp-range=192.168.99.2,192.168.99.254,255.255.255.0,12h
no-hosts
addn-hosts=/etc/hosts.dnsmasq

我把我的/etc/hosts.dnsmasq配置粘贴上,其实就一行

1
192.168.99.1 armbian.lan

最后我们启动dnsmasq

1
sudo systemctl start dnsmasq.service && sudo systemctl enable dnsmasq.service

打开你的手机连接WiFi试试,这回可以连上,但是不能连接互联网,因为eth0和wlan0之间没有配置网络转发。

配置iptables

首先我们要允许内核进行网络转发,在/etc/sysctl.conf中注意修改以下内容

1
net.ipv4.ip_forward = 1

然后让内核参数即时生效

1
sysctl -p

配置路由表,开启转发

1
2
3
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

如果一切正常现在应该可以通过WiFi热点连接互联网了,但是iptables配置是重启不会保存的,我们需要先保存iptables

1
iptables-save > /etc/iptables.rules

然后每次ifup时恢复,编辑/etc/network/interfaces,在wlan0那一段添加up iptables-restore < /etc/iptables.rules,下面贴上我完整的/etc/network/interfaces

1
2
3
4
5
6
7
8
9
10
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet static
address 192.168.99.1
netmask 255.255.255.0
up iptables-restore < /etc/iptables.rules

到此结束~