Linux开启wifi和热点双用
有些情况下我们需要将连接并认证过的wifi共享出来,这样就无需多个认证达到多人使用了
手动配置
无线网卡是否支持AP模式
无线设备必须兼容 nl80211
标准 ,并且支持 AP (Access Point)
工作模式。可通过 iw list
命令查看无线网卡设备信息, 输出信息到Supported interface modes
段落中要有 AP
模式:
iw list
输出中包含* AP
代表支持AP模式,可开启热点
<!--more-->
Wiphy phy1
...
Supported interface modes:
...
* AP
...
valid interface combinations:
* #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1,
total <= 2048, #channels <= 1, STA/AP BI must match
...
注意:#channels <=1
代表开启的热点必须所连wifi用同一信道
创建热点接口
查看无线网卡设备接口
ip a
wlan0: ...
link/ether ...
inet ...
...
创建虚拟接口
sudo iw dev wlan0 interface add wifi_ap type managed addr 12:34:56:78:ab:cd
# 或
sudo iw phy phy0 interface add wifi_ap type managed addr 12:34:56:78:ab:cd
如需删除接口使用命令sudo iw dev wifi_ap del
即可删除
可使用macchanger
给虚拟接口生成一个随机Mac地址
sudo macchanger -r wifi_ap
如需恢复Mac地址使用命令macchanger -p wifi_ap
配置热点
安装hostapd
sudo pacman -S hostapd
配置hostapd
sudo vim /etc/hostapd/hostapd.conf
# 添加
# 热点名
ssid=test_wifi_ap
# 配置密码
wpa_passphrase=password
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
# 修改
# 接口
interface=wifi_ap
# 信道(保持与wifi一样)
channel=1
# 其它使用默认,也可自行根据注释说明修改
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/run/hostapd
ctrl_interface_group=0
hw_mode=g
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=-1
fragm_threshold=-1
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
网络设置
可使用网桥或NAT两种模式,网桥模式还得单独取得认证才能上网,而NAT模式则是认证后再将网络转发分享出来
NAT设置
启动包转发
检查包转发配置情况
sudo sysctl -a |grep forward
信息为用于控制每个默认值,每个接口的转发的选项,以及每个接口的IPv4 / IPv6的单独选项
启用临时包转发
sudo sysctl net.ipv4.ip_forward=1
要想选择性地为某一个具体的网卡提供包转发,使用sysctl net.ipv4.conf.interface_name.forwarding=1
来代替
永久开启需编辑/etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
启用NAT
使用iptables
配置规则来启用NAT
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wifi_ap -o wlan0 -j ACCEPT
# 保存规则
sudo iptables-save > /etc/iptables/iptables.rules
或 使用nftables
启用NAT
sudo nft add table ip nat
sudo nft add chain ip nat prerouting { type nat hook prerouting priority 0 \; }
sudo nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
# 永久保存
sudo nft list ruleset > /etc/nftables.conf
配置DHCP
配置DHCP自动分配IP,可通过使用dhcpd
或dnsmasq
来启用DHCP服务
DHCP服务器必须允许UDP端口67
的传入连接。对于DNS请求,还必须允许到UDP / TCP
端口53
的传入连接。
iptables -I INPUT -p udp --dport 67 -i net0 -j ACCEPT
iptables -I INPUT -p udp --dport 53 -s 192.168.123.0/24 -j ACCEPT
iptables -I INPUT -p tcp --dport 53 -s 192.168.123.0/24 -j ACCEPT
# 保存规则
sudo iptables-save > /etc/iptables/iptables.rules
使用dhcpd
配置
给接口添加静态IP
sudo ip addr add 10.0.0.254/24 dev wifi_ap
配置hdcpd
服务
需要安装dhcpd
包
# 原有的 dhcpd.conf 中包含多个未被注释的示例,所以先将其备份再新建一个
sudo mv /etc/dhcpd.conf /etc/dhcpd.conf.backup
sudo vim /etc/dhcpd.conf
# 添加配置内容
option domain-name-servers 114.114.114.114,8.8.8.8;
option subnet-mask 255.255.255.0;
option routers 10.0.0.254;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.0 10.0.0.0;
}
# 配置MAC地址绑定固定IP
option domain-name-servers 114.114.114.114,8.8.8.8;
option subnet-mask 255.255.255.0;
option routers 10.0.0.254;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.0 10.0.0.0;
host macbookpro{
hardware ethernet 11:22:33:aa:bb:cc;
fixed-address 10.0.0.10;
}
}
启动DHCP服务
# 启用IPv4 DHCP
sudo systemctl start dhcpd4
# 启动IPv6 DHCP
sudo systemctl start dhcpd6
开启热点
启动hostapd
即可
sudo systemctl start hostapd
使用脚本
安装
详解参考create_ap
仓库
ArchLinux
系可直接用pacman
安装
sudo pacman -S create_ap
使用
添加虚拟网络接口并设置地址
sudo iw dev wlan0 interface add wifi_ap type managed addr 12:34:56:78:ab:cd
配置热点
sudo create_ap -c 11 wifi_ap\ eth0 SSID passwowd
参考:
Linux连接wifi同时开启热点
Software access point
Linux 设置 wifi 共享(wifi 到 wifi)