PVE (基于Debian 11) WiFi 折腾
deb 离线安装 WiFi 所需软件
wpasupplicant:WiFi认证工具
iw:据说可以取代iwconfig
wireless-tools :包含iwconfig等命令
net-tools:包含ifconfig等命令
安装方法略过, 记得每个 deb 都有一到两个依赖就行, 先安装依赖.
WPA、WPA2
以前的WiFi加密是不安全的WEP,被WPA、WPA2取代,维基百科:
有线等效加密(英语:Wired Equivalent Privacy,缩写:WEP),又称无线加密协议(英语:Wireless Encryption Protocol,缩写:WEP),是个保护无线网络信息安全的体制,于1997年,由IEEE802.11制定与发布。
因为无线网络是用无线电把消息传播出去,它特别容易被窃听。WEP的设计是要提供和传统有线的局域网相当的机密性,而依此命名的。不过密码分析学家已经找出有线等效加密几个弱点,因此在2003年被Wi-Fi Protected Access (WPA)取代,随着2004年发布完整IEEE 802.11i标准,其中所制定的WPA2淘汰了WEP-40与WEP-104。
最初WEP仅适用于802.11a与802.11b,而其后的第一代WPA适用于802.11g。但随着部分厂商升级自家802.11b产品的固件,亦能采用WPA加密。
所以你看到直接在命令行中提供WiFi SSID和密码就可以连接WiFi的都是过时的教程了,必须要使用到wpa_supplicant:
wpa_supplicant -B -D wext -i wlp15s0 -c /etc/wpa_supplicant.conf
继续之前,建议先参考文档:
https://linuxcommando.blogspot.com/2013/10/how-to-connect-to-wpawpa2-wifi-network.html
https://juejin.cn/post/7115643955915522078
网络接口问题
这是安装完成后默认的网络配置:
cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface wlp15s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.123/24
gateway 192.168.0.1
bridge-ports wlp15s0
bridge-stp off
bridge-fd 0
iface enp8s0 inet manual
这个桥接网络明显是不能使用的,而且会有网段冲突之类的问题,先ifdown掉它,把WiFi连接上再说。
这是可以正常访问网络的网络:
# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 208 bytes 19288 (18.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 208 bytes 19288 (18.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp15s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.108 netmask 255.255.255.0 broadcast 192.168.0.255
ether e4:02:9b:53:4c:7e txqueuelen 1000 (Ethernet)
RX packets 7893 bytes 10110738 (9.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5008 bytes 532397 (519.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这是可以正常访问网络的路由:
# ip route show
default via 192.168.0.1 dev wlp15s0
192.168.0.0/24 dev wlp15s0 proto kernel scope link src 192.168.0.108
如何使用 Linux 命令行连接到 WPA/WPA2 WiFi 网络
这一步我们就要先把网络打通,参考文章是:https://linuxcommando.blogspot.com/2013/10/how-to-connect-to-wpawpa2-wifi-network.html
- 首先找到 WiFi 物理网卡名称,常见的有 wlan0,但是我这个叫 wlp15s0。
# iw dev
phy#0
Interface wlp15s0
ifindex 3
wdev 0x1
addr e4:02:9b:53:4c:7e
- 检查无线设备是否已启动
# ip link show wlp15s0
3: wlp15s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether e4:02:9b:53:4c:7e brd ff:ff:ff:ff:ff:ff
我这里因为已经成功了,所以是UP,应该是DOWN的。可以尝试启动:
# ip link set wlp15s0 up
不过我第一次执行该命令的时候并没有成功,但不影响,继续
- 检查 WiFi 连接状态
# iw wlp15s0 link
Not connected.
- 扫描以找出检测到的 WiFi 网络
两种扫描方式:
# iw wlp15s0 scan | grep SSID
# iwlist wlp15s0 scan | grep ESSID
- 连接到 WPA/WPA2 WiFi 网络
# wpa_passphrase {SSID} >> /etc/wpa_supplicant.conf
这里没有任何提示,直接输入 WiFi 密码后回车即可,有回显
然后我们得到一个 WiFi 配置文件:
# cat /etc/wpa_supplicant.conf
# reading passphrase from stdin
network={
ssid="xxx_5G"
#psk="88888888"
psk=a2684d5a639d3c1bc301e40a0d23046b73144094a77876d2d7192739ec0db550
}
开始尝试连接 WiFi :
# wpa_supplicant -B -D wext -i wlp15s0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
-B表示在后台 运行wpa_supplicant 。
-D指定无线驱动程序。 wext是通用驱动程序。(如果您使用英特尔 wifi:将 wext 替换为 nl80211。wpa_supplicant -h
可以查看驱动列表)
-c指定配置文件的路径。
使用iw命令验证您确实已连接到 SSID:
# iw wlp15s0 link
Connected to b0:df:c1:87:8e:15 (on wlp15s0)
SSID: xxx_5G
freq: 5765
RX: 17166166 bytes (14387 packets)
TX: 2820770 bytes (9875 packets)
signal: -58 dBm
rx bitrate: 292.5 MBit/s VHT-MCS 7 80MHz VHT-NSS 1
tx bitrate: 433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1
bss flags: short-slot-time
dtim period: 1
beacon int: 100
- 通过DHCP获取IP地址
# dhclient wlp15s0
# ip addr show wlp15s0
3: wlp15s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether e4:02:9b:53:4c:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.0.108/24 brd 192.168.0.255 scope global dynamic wlp15s0
valid_lft 77969sec preferred_lft 77969sec
- 添加默认路由规则
最后的配置步骤是确保您拥有正确的路由规则。
$ ip route show
192.168.1.0/24 dev wlp15s0 proto kernel scope link src 192.168.1.113
上面的路由表只包含 1 条规则,它将所有发往本地子网 (192.168.1.x) 的流量重定向到wlan0接口。您可能想要添加一个默认路由规则以通过wlan0传递所有其他流量。
$ sudo ip route add default via 192.168.0.1 dev wlp15s0
$ ip route show
default via 192.168.0.1 dev wlp15s0
192.168.0.0/24 dev wlp15s0 proto kernel scope link src 192.168.0.108
持久化配置
有人回复:
非常感谢!我的 Linux Mint Debian Edition 笔记本电脑现在已连接 Wi-Fi。很棒的文章!
我只需要将步骤 7 中的路由命令更改为:
sudo route add default gw <gateway> <interface>
此外,路由和 wpa_supplicant 命令不是持久的。对于永久更改,我们必须将它们添加到 /etc/network/interfaces(对于 Debian)的 Wi-Fi 接口部分。我的结果是这样的:
auto <interface>
iface <interface> inet dhcp
wireless-essid <essid>
pre-up wpa_supplicant -B -D wext -i <interface> -c /etc/wpa_supplicant.conf
post-up route add default gw <网关> <接口>
post-down killall -q wpa_supplicant
我们再看:https://www.linuxbabe.com/command-line/ubuntu-server-16-04-wifi-wpa-supplicant
- 修改服务配置
# cat /lib/systemd/system/wpa_supplicant.service
[Unit]
Description=WPA supplicant
Before=network.target
After=dbus.service
Wants=network.target
IgnoreOnIsolate=true
[Service]
Type=dbus
BusName=fi.w1.wpa_supplicant1
#ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp15s0
Restart=always
[Install]
WantedBy=multi-user.target
#Alias=dbus-fi.w1.wpa_supplicant1.service
- 创建dhclient服务
创建文件:
# vi /etc/systemd/system/dhclient.service
[Unit]
Description= DHCP Client
Before=network.target
[Service]
Type=forking
ExecStart=/sbin/dhclient wlp15s0 -v
ExecStop=/sbin/dhclient wlp15s0 -r
Restart=always
[Install]
WantedBy=multi-user.target
应用:
systemctl enable dhclient.service
- 配置静态IP
追加配置文件:
# vi /etc/dhcp/dhclient.conf
interface "wlp15s0" {
send dhcp-requested-address 192.168.0.123;
}
不建议这样配置。
确保您的 Ubuntu 系统具有静态 IP 地址的更好方法可能是登录路由器的管理界面并为您的无线网卡的 MAC 地址分配一个静态 IP,如果您的路由器支持此功能。
我们可以查看-v输出:
# systemctl status dhclient.service
● dhclient.service - DHCP Client
Loaded: loaded (/etc/systemd/system/dhclient.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-05-01 02:24:30 CST; 10min ago
Process: 801 ExecStart=/sbin/dhclient wlp15s0 -v (code=exited, status=0/SUCCESS)
Main PID: 818 (dhclient)
Tasks: 4 (limit: 9351)
Memory: 6.2M
CPU: 26ms
CGroup: /system.slice/dhclient.service
└─818 /sbin/dhclient wlp15s0 -v
May 01 02:24:30 pve dhclient[818]: DHCPDISCOVER on wlp15s0 to 255.255.255.255 port 67 interval 16
May 01 02:24:30 pve dhclient[818]: DHCPOFFER of 192.168.0.108 from 192.168.0.1
May 01 02:24:30 pve dhclient[818]: DHCPOFFER of 192.168.0.108 from 192.168.0.1
May 01 02:24:30 pve dhclient[818]: DHCPREQUEST for 192.168.0.108 on wlp15s0 to 255.255.255.255 port 67
May 01 02:24:30 pve dhclient[818]: DHCPREQUEST for 192.168.0.108 on wlp15s0 to 255.255.255.255 port 67
May 01 02:24:30 pve dhclient[818]: DHCPACK of 192.168.0.108 from 192.168.0.1
May 01 02:24:30 pve dhclient[818]: DHCPACK of 192.168.0.108 from 192.168.0.1
May 01 02:24:30 pve dhclient[818]: bound to 192.168.0.108 -- renewal in 34589 seconds.
May 01 02:24:30 pve dhclient[818]: bound to 192.168.0.108 -- renewal in 34589 seconds.
May 01 02:24:30 pve systemd[1]: Started DHCP Client.
apt update
PVE默认安装企业版,我们需要修改为非订阅版本:
# vi /etc/apt/sources.list.d/pve-enterprise.list
#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
文档
https://pve-doc-cn.readthedocs.io/zh_CN/latest/chapter_system_administration/netconfig.html
https://juejin.cn/post/7115643955915522078
https://linuxcommando.blogspot.com/2013/10/how-to-connect-to-wpawpa2-wifi-network.html
https://www.linuxbabe.com/command-line/ubuntu-server-16-04-wifi-wpa-supplicant