Ubuntu STA+AP 开机自启完整方案
1. rfkill 自动解锁 WLAN
文件:/etc/systemd/system/unblock-wifi.service
[Unit]
Description=Unblock WiFi
Before=wlan-ap.service[Service]
Type=oneshot
ExecStart=/usr/sbin/rfkill unblock all
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl enable unblock-wifi.service
2. 创建虚拟 AP 接口
文件:/etc/systemd/system/wlan-ap.service
[Unit]
Description=Create virtual AP interface
After=unblock-wifi.service
Requires=unblock-wifi.service[Service]
Type=oneshot
# 创建虚拟接口
ExecStart=/sbin/iw dev wlp3s0 interface add wlp3s0_ap type __ap
# 给接口分配静态 IP
ExecStartPost=/sbin/ip addr add 192.168.50.1/24 dev wlp3s0_ap
ExecStartPost=/sbin/ip link set dev wlp3s0_ap up
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl enable wlan-ap.service
3. hostapd AP 服务
文件:/etc/systemd/system/hostapd-ap.service
[Unit]
Description=Start hostapd for AP
After=wlan-ap.service
Requires=wlan-ap.service[Service]
ExecStartPre=/bin/sleep 3
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf
Restart=always[Install]
WantedBy=multi-user.target
hostapd 配置 /etc/hostapd/hostapd.conf
interface=wlp3s0_ap
driver=nl80211
ssid=MyHotspot
hw_mode=g
channel=6
wmm_enabled=1
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
4. dnsmasq DHCP 服务
- 备份默认配置:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
- 新建
/etc/dnsmasq.conf
:
interface=wlp3s0_ap
bind-interfaces
dhcp-range=192.168.50.10,192.168.50.100,12h
- 修改 dnsmasq systemd 依赖:
sudo systemctl edit dnsmasq
输入:
[Unit]
After=hostapd-ap.service
Requires=hostapd-ap.service[Service]
ExecStartPre=/bin/sleep 3
保存退出。
- 启用并重载:
sudo systemctl daemon-reload
sudo systemctl enable dnsmasq
5. 设置 NAT 转发
- 启用 IP 转发:
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
- 配置 iptables:
sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
sudo iptables -A FORWARD -i wlp3s0_ap -o wlp3s0 -j ACCEPT
sudo iptables -A FORWARD -i wlp3s0 -o wlp3s0_ap -m state --state RELATED,ESTABLISHED -j ACCEPT
- 保存规则:
sudo apt install iptables-persistent
sudo netfilter-persistent save
6. STA 自动连接 Wi-Fi
nmcli dev wifi connect "YourWiFiSSID" password "YourWiFiPassword" ifname wlp3s0
nmcli connection modify "YourWiFiSSID" connection.autoconnect yes
7. NetworkManager 忽略虚拟 AP 接口
编辑 /etc/NetworkManager/NetworkManager.conf
:
[keyfile]
unmanaged-devices=interface-name:wlp3s0_ap
重启 NetworkManager:
sudo systemctl restart NetworkManager
8. 开机启动顺序
-
unblock-wifi.service
→ 解锁 WLAN -
wlan-ap.service
→ 创建虚拟接口 + 分配静态 IP -
hostapd-ap.service
→ 启动 AP -
dnsmasq.service
→ DHCP -
NAT 转发 → 设备可上网
-
STA 自动连 Wi-Fi