Ubuntu-20.04 新建 AP 热点并分享
hostapd 是一个在 Linux 系统上运行的用户空间守护进程,用于将网络接口(如无线网卡)配置为 无线接入点(AP)。它支持多种无线标准,包括 IEEE 802.11a/b/g/n/ac,并且能够管理 Wi-Fi 网络的安全性、加密、身份验证等。
hostapd 的功能:
创建无线接入点:
hostapd允许你通过配置文件定义无线网络的参数,例如 SSID(服务集标识符)、信道、加密方式等,从而将无线网卡转换为无线接入点。无线网络安全: 支持多种加密协议(如 WPA/WPA2-PSK、WPA3)和身份验证机制(如 RADIUS、802.1X),提供强大的无线网络安全保障。
管理无线设备:
hostapd能够实时管理无线设备的连接、认证、身份验证等。例如,能够控制客户端的连接、断开、重新认证等。支持多种认证方式: 支持多种无线认证协议,包括:
WPA2-PSK(基于密码的认证方式)
WPA2-EAP(基于 RADIUS 的企业级认证)
WPA3(更加安全的认证协议)
还可以与 RADIUS 服务器配合使用,进行集中式认证和授权。
支持频谱控制和信号强度调节: 可以配置无线网络的信道、频段、信号强度等,帮助避免干扰并提高网络的稳定性。
性能优化: 支持高效的 802.11n/ac 数据传输和性能调优选项,如调整无线频段、信道带宽等。
客户端控制: 提供有关连接的客户端信息,并能够在某些情况下进行访问控制,如限制连接数量或封禁特定设备的 MAC 地址。
hostapd 配置文件
hostapd 的配置文件通常位于 /etc/hostapd/hostapd.conf,其中包含了定义无线接入点的所有参数。以下是一个常见的 hostapd.conf 配置文件示例:
conf复制编辑# 配置无线接口
interface=wlp2s0
driver=nl80211 # 使用 nl80211 驱动程序(大多数现代 Linux 系统)
ssid=Ubuntu-20.04-WiFi # SSID 是你的无线网络名称
channel=6 # 无线信道
hw_mode=g # 工作模式:g表示2.4GHz 802.11g
auth_algs=1 # 认证算法,1 表示仅使用 WPA
wpa=3 # WPA2 加密
wpa_passphrase=Tian18332825309. # WPA2 密码
wpa_key_mgmt=WPA-PSK # WPA-PSK 密钥管理模式
rsn_pairwise=CCMP # 加密算法:CCMP 是 AES 加密算法常用参数解释:
interface:指定无线网络接口,如wlp2s0。driver:指定使用的无线驱动程序,通常为nl80211,这是现代 Linux 系统的默认驱动。ssid:设置无线网络的 SSID(名称),即设备扫描时显示的名称。channel:设置无线信道(1-13 范围内的信道)。根据地域法规,不同的信道可用性有所不同。hw_mode:设置工作模式,如g(2.4GHz 802.11g)、a(5GHz 802.11a)等。auth_algs:指定认证算法,1表示 WPA、WPA2 认证,3表示 WPA、WPA2 和 802.1X 认证。wpa:设置 WPA 加密版本,2代表 WPA2。wpa_passphrase:设置无线网络的密码。wpa_key_mgmt:指定 WPA 密钥管理协议,WPA-PSK是最常用的个人密码密钥管理协议。rsn_pairwise:设置加密算法,CCMP是 AES 加密算法,适用于 WPA2。
一、网络基本信息设置
首先我的网络信息如下:
确保使用 networkd 来管理的网络服务,而不是 Network-Manager
root@big-server:~# cat /etc/netplan/01-network-manager-all.yaml
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
addresses:
- 192.168.1.12/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 223.5.5.5
- 8.8.8.8
enp6s0:
dhcp4: false
addresses:
- 10.0.0.1/16
wlp2s0:
dhcp4: false
addresses:
- 192.168.10.1/24在此为大家介绍一下,enp3s0 也就是属于 WAN 口,属于出网网口,其余的是 LAN 口,输入内网网口,那么客户端再连接到本机之后如何上网呢,就是通过如下的 iptables 规则实现的。
1. 配置 iptables 规则
root@big-server:~# cat route-iptables.sh
#!/bin/bash
# /data/firewall-set.sh
# 根据你的WAN网卡名称对应修改!!!
WAN_NAME='enp3s0'
# IPv4设置
iptables -t nat -N mt_rtr_4_n_rtr
iptables -t nat -A POSTROUTING -j mt_rtr_4_n_rtr
iptables -t nat -A mt_rtr_4_n_rtr -o ${WAN_NAME} -j MASQUERADE # 添加路由到作为WAN的网卡的自动源地址转换规则
# 添加IPv4转发优化规则
iptables -t mangle -N mt_rtr_4_m_rtr
iptables -t mangle -A FORWARD -j mt_rtr_4_m_rtr
iptables -t mangle -A mt_rtr_4_m_rtr -o ${WAN_NAME} -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # 针对PPPoE链接的优化
iptables -t mangle -A mt_rtr_4_m_rtr -m state --state RELATED,ESTABLISHED -j ACCEPT # 允许已建立连接的数据包直接通过
iptables -t mangle -A mt_rtr_4_m_rtr -m conntrack --ctstate INVALID -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -i br_lan -o ${WAN_NAME} -j ACCEPT
# IPv6 NAT设置,与IPv4基本一致
ip6tables -t nat -N mt_rtr_6_n_rtr
ip6tables -t nat -A POSTROUTING -j mt_rtr_6_n_rtr
ip6tables -t nat -A mt_rtr_6_n_rtr -o ${WAN_NAME} -j MASQUERADE # 添加路由到作为WAN的网卡的自动源地址转换规则
# 添加IPv6转发优化规则
ip6tables -t mangle -N mt_rtr_6_m_rtr
ip6tables -t mangle -A FORWARD -j mt_rtr_6_m_rtr
ip6tables -t mangle -A mt_rtr_6_m_rtr -o ${WAN_NAME} -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
ip6tables -t mangle -A mt_rtr_6_m_rtr -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -t mangle -A mt_rtr_6_m_rtr -m conntrack --ctstate INVALID -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -i br_lan -o ${WAN_NAME} -j ACCEPT2. 配置内核转发
root@big-server:~# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.route_localnet=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1lsmod 查看有没有加载此模块, nf_conntrack 用于跟踪 iptables 规则
root@big-server:~# vim /etc/modules-load.d/custom-modules.conf
# Located in /etc/modules-load.d/custom-modules.conf
nf_conntrack3. 应用规则
root@big-server:~# bash route-iptables.sh使用 iptables-persistent 进行持久化配置: apt -y install iptables-persistent root 身份运行脚本, 然后执行 netfilter-persistent save
二、安装配置 hostapd 服务
1. 安装
root@big-server:~# apt-get update
root@big-server:~# apt-get install hostapd dnsmasq 2. 准备配置文件
root@big-server:~# vim /etc/hostapd/hostapd.conf
interface=wlp2s0
driver=nl80211
ssid=Ubuntu-20.04-WiFi
channel=6
auth_algs=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=Tian18332825309.
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP确保 /etc/default/hostapd 文件中正确指定了配置文件路径
root@big-server:~# vim /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"3. 检查网卡是否支持 AP
root@big-server:~# iw list | grep -A 2 "Supported interface modes"
Supported interface modes:
* managed
* AP4. 启动 hostapd:
可以通过以下命令启动 hostapd 服务:
root@big-server:~# systemctl start hostapd如果希望 hostapd 在系统启动时自动启动,可以启用该服务:
root@big-server:~# systemctl enable hostapd5. 查看 hostapd 服务状态:
root@big-server:~# systemctl status hostapd
● hostapd.service - Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2025-02-27 22:27:22 CST; 28min ago
Main PID: 888 (hostapd)
Tasks: 1 (limit: 9219)
Memory: 1.9M
CGroup: /system.slice/hostapd.service
└─888 /usr/sbin/hostapd -B -P /run/hostapd.pid -B /etc/hostapd/hostapd.conf
2月 27 22:39:43 big-server hostapd[888]: wlp2s0: STA 42:de:64:a8:df:7d IEEE 802.11: authenticated
2月 27 22:39:43 big-server hostapd[888]: wlp2s0: STA 42:de:64:a8:df:7d IEEE 802.11: associated (aid 1)
2月 27 22:39:43 big-server hostapd[888]: wlp2s0: STA 42:de:64:a8:df:7d RADIUS: starting accounting session 62AD224C1AD7BBA1
2月 27 22:39:43 big-server hostapd[888]: wlp2s0: STA 42:de:64:a8:df:7d WPA: pairwise key handshake completed (RSN)
2月 27 22:40:10 big-server hostapd[888]: wlp2s0: STA 46:43:e5:00:d8:56 IEEE 802.11: authenticated
2月 27 22:40:10 big-server hostapd[888]: wlp2s0: STA 46:43:e5:00:d8:56 IEEE 802.11: associated (aid 2)
2月 27 22:40:10 big-server hostapd[888]: wlp2s0: STA 46:43:e5:00:d8:56 RADIUS: starting accounting session 060FF170B718B516
2月 27 22:40:10 big-server hostapd[888]: wlp2s0: STA 46:43:e5:00:d8:56 WPA: pairwise key handshake completed (RSN)
2月 27 22:47:21 big-server hostapd[888]: wlp2s0: STA 46:43:e5:00:d8:56 WPA: group key handshake completed (RSN)
2月 27 22:47:23 big-server hostapd[888]: wlp2s0: STA 42:de:64:a8:df:7d WPA: group key handshake completed (RSN)6. 解决报错
如果出现报错:Failed to start hostapd.service: Unit hostapd.service is masked
root@big-server:~# systemctl unmask hostapd
root@big-server:~# systemctl enable hostapd
root@big-server:~# systemctl restart hostapd三、安装 DHCP 服务
1. 安装
root@big-server:~# apt update
root@big-server:~# apt install isc-dhcp-server2. 准备配置文件
root@big-server:~# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
root@big-server:~# vim /etc/dhcp/dhcpd.conf
# 全局配置
option domain-name "example.com"; # 设置域名
option domain-name-servers 223.5.5.5, 8.8.4.4; # 设置 DNS 服务器(可以使用 Google 的公共 DNS)
default-lease-time 600; # 默认租期(秒)
max-lease-time 7200; # 最大租期(秒)
authoritative; # 声明 DHCP 服务器是权威的
# 定义子网
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200; # 可分配的 IP 地址范围
option routers 192.168.10.1; # 网关地址,就是无线网卡地址
option broadcast-address 192.168.1.255; # 广播地址
option subnet-mask 255.255.255.0; # 子网掩码
}3. 启动服务
root@big-server:~# systemctl enable isc-dhcp-server --now
root@big-server:~# systemctl status isc-dhcp-server
● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2025-02-27 22:39:44 CST; 15min ago
Docs: man:dhcpd(8)
Main PID: 46014 (dhcpd)
Tasks: 4 (limit: 9219)
Memory: 6.1M
CGroup: /system.slice/isc-dhcp-server.service
└─46014 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf wlp2s0
2月 27 22:40:13 big-server dhcpd[46014]: DHCPOFFER on 192.168.10.101 to 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:40:14 big-server dhcpd[46014]: DHCPREQUEST for 192.168.10.101 (192.168.10.1) from 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:40:14 big-server dhcpd[46014]: DHCPACK on 192.168.10.101 to 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:40:14 big-server dhcpd[46014]: reuse_lease: lease age 0 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.10.101
2月 27 22:40:14 big-server dhcpd[46014]: DHCPREQUEST for 192.168.10.101 (192.168.10.1) from 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:40:14 big-server dhcpd[46014]: DHCPACK on 192.168.10.101 to 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:45:00 big-server dhcpd[46014]: DHCPREQUEST for 192.168.10.101 from 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:45:00 big-server dhcpd[46014]: DHCPACK on 192.168.10.101 to 46:43:e5:00:d8:56 (iPhone) via wlp2s0
2月 27 22:45:21 big-server dhcpd[46014]: DHCPREQUEST for 192.168.10.100 from 42:de:64:a8:df:7d (iPhone) via wlp2s0
2月 27 22:45:21 big-server dhcpd[46014]: DHCPACK on 192.168.10.100 to 42:de:64:a8:df:7d (iPhone) via wlp2s0