hostapd
sudo systemctl unmask hostapd
配置 hostapd (/etc/hostapd/hostapd.conf)
macaddr_acl=0 # 可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器;
# accept_mac_file:指定允许MAC列表文件所在;
# deny_mac_file:指定禁止MAC列表文件所在;
auth_algs=1 # 采用 OSA 认证算法
ignore_broadcast_ssid=0
wpa=3 # 指定 WPA 类型
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
#wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
wpa_passphrase=ap_password # 连接 ap 的密码
driver=nl80211 # 设定无线驱动
interface=wlan0 # 接入点设备名称
hw_mode=g # 指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g
channel=9 # 指定无线频道
ssid=ap_name # 连接 ap 的名字
注意:此处可能会报错
Could not set interface wlan0 flags (UP): Operation not possible due to RF-kill
wlan0: Could not connect to kernel driver
Failed to set beacon parameters
wlan0: Could not connect to kernel driver
解决方法是执行下面的命令
rfkill unblock wifi
killall wpa_supplicant
使用 iptables 设置转发
iptables -t nat -I POSTROUTING -o usb0 -j MASQUERADE
iptables -A FORWARD -s 10.42.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.42.0.0/24 -j ACCEPT
iptables -t filter -A INPUT -p udp -m udp -j ACCEPT
sudo iptables -t nat --line-numbers -L -n
其中第一条表示将通过本机的转发数据包从eth0(外网)这个网卡发出去,另外两条表示只转发192.168.1.0/24这个网段过来的数据包,这个网段正好是wlan0其它设备连上本机以后分配的网段。
打开 内核的 ip 转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
或
vim /etc/sysctl.conf
#添加或修改这样一段:
net.ipv4.conf.default.rp_filter = 1
#然后执行命令
sysctl -p