当前位置: 首页 > news >正文

Ubuntu STA+AP 开机自启完整方案

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 服务

  1. 备份默认配置:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
  1. 新建 /etc/dnsmasq.conf
interface=wlp3s0_ap
bind-interfaces
dhcp-range=192.168.50.10,192.168.50.100,12h
  1. 修改 dnsmasq systemd 依赖:
sudo systemctl edit dnsmasq

输入:

[Unit]
After=hostapd-ap.service
Requires=hostapd-ap.service[Service]
ExecStartPre=/bin/sleep 3

保存退出。

  1. 启用并重载:
sudo systemctl daemon-reload
sudo systemctl enable dnsmasq

5. 设置 NAT 转发

  1. 启用 IP 转发:
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  1. 配置 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
  1. 保存规则:
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. 开机启动顺序

  1. unblock-wifi.service → 解锁 WLAN

  2. wlan-ap.service → 创建虚拟接口 + 分配静态 IP

  3. hostapd-ap.service → 启动 AP

  4. dnsmasq.service → DHCP

  5. NAT 转发 → 设备可上网

  6. STA 自动连 Wi-Fi


http://www.hskmm.com/?act=detail&tid=19752

相关文章:

  • PDE和CFD的区别?
  • Gitee:中国开发者生态的基石与数字化转型的加速器
  • 20号胶
  • MQTT协议
  • 完整教程:带你了解STM32:TIM定时器(第四部分)
  • 邮件怎么发送超大附件的实用解决方案
  • 告别无效对话:五个让AI输出质量提升10倍的提示词框架
  • 题解:CF2006E Iriss Full Binary Tree
  • CMakeLists.txt用法参考
  • 分布式ID生成算法——雪花算法的实现 - 浪矢
  • 5. Prompt 提示词 - Rainbow
  • 国产文件传输软件有哪些?今日份精选与实用推荐
  • 内外网文件摆渡系统:科研院所数据安全传输的关键支撑
  • 硬盘突然坏掉,我花了半个月才把数据救回来…(附数据恢复工具)
  • MCU的闪存(FLASH)按机制结构划分区域
  • T2
  • 题解:CF1930I Counting Is Fun
  • AI百炼大模型接入钉钉,实现在群中免@交互式新闻推送
  • K8S-Service 学习
  • docker常用命令
  • 纸浆2511
  • electron38-admin桌面端后台|Electron38+Vue3+ElementPlus管理系统
  • 长江中游干流河道崩岸特征与机理研究综述
  • 基于 Python Keras 建立 猫狗图像的精准分类
  • 《ESP32-S3使用指南—IDF版 V1.6》第四十章 图片显示实验
  • 调度算法II
  • 鸿蒙应用开发从入门到实战(十六):线性布局案例
  • SQL注入流程
  • 完整的GLFW应用程序示例
  • 物理笔记