#Archlinux network configuration [Linux wireless drivers]: https://wireless.wiki.kernel.org/en/users/drivers "Existing Linux wireless drivers" [Linux Wi-Fi Device IDs]: https://wikidevi.com/wiki/List_of_Wi-Fi_Device_IDs_in_Linux "List of Wi-Fi Device IDs in linux" [net-tools--iproute2]: http://data.linuxtoy.cn/image/Linux-Nettools-vs-Iproute2.png "net-tools--iproute2" # net-tools vs iproute2 ifconfig是net-tools中被废弃使用的一个命令, 已经没有维护了。 iproute2里面提供了许多增强功能的命令,ip命令即是其中一个。 ![net-tools vs iproute2][net-tools--iproute2] # usage of ip command SYNOPSIS ip [OPTIONS] OBJECT {COMMAND | help} OBJECT := {link | address | addrlabel | route | rule | neigh | ntable | tunnel | ...} 当你不知道某个OBJECT的用法,可以输入help命令, 例如查看link的帮助信息: `ip link help` ## ip addr *设置IP地址* `ip addr add 192.168.1.193/24 dev wlp5s0` 注意: ip地址有一个后缀,比如/24, 表示子网掩码,24代表有24位为1, 所以/24表示子网掩码为255.255.255.0 这个后缀最大为/32. 这种用法用于 "无类域间路由选择(CIDR)" 用来显示所用的子网掩码 *查看地址* `ip addr show wlp5s0` ``` $ ip addr show wlp5s0 3: wlp5s0: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether b8:ee:65:27:fe:2f brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global wlp5s0 valid_lft forever preferred_lft forever inet 192.168.1.193/24 scope global secondary wlp5s0 valid_lft forever preferred_lft forever inet6 fe80::baee:65ff:fe27:fe2f/64 scope link valid_lft forever preferred_lft forever ``` *删除IP地址* `ip addr del 192.168.1.193/24 dev wlp5s0` ## ip link *显示不同网络接口的统计数据* `ip -s link` *显示指定网络接口的统计数据* `ip -s link ls wlp5s0` *显示指定网络接口的统计数据, 显示更详细的数据* `ip -s -s link ls wlp5s0` *激活/停止特定的接口* ip set link wlp5s0 up ip set link wlp5s0 down # Wireless network configuration ## wireless device driver 首先需要确保无线网卡驱动已安装,并且工作正常。 启动的的时候,udev会识别硬件,并加载相应的驱动。 有些芯片需要额外的firmware, 默认安装的linux-firmware提供了很多固件。 检查设备状态: `lspci -k` 或者 `lspci -v` 检查设备驱动是否已经加载 例如: ``` 05:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8723BE PCIe Wireless Network Adapter Subsystem: Lenovo Device b728 Kernel driver in use: rtl8723be Kernel modules: rtl8723be ``` 通过`ip link` 查看设备, 无线设备通常是wlp5s0这样的名称。 启用设备: `ip link set <设备名> up` 如果设备加载正常,接口正常启用,则说明不需要安装额外的firmware. 如果显示错误信息: "SIOCSIFFLAGS: No such file or directory", 那说明缺失firmware 查看已加载的firmware的kernel message信息 ``` $ dmesg | grep firmware [ 11.644190] Using firmware rtlwifi/rtl8723befw.bin ``` install driver/firmware: ![Linux支持的无线网卡驱动][Linux wireless drivers] ![Linux Wi-Fi设备ID列表][Linux Wi-Fi Device IDs] RTL Wi-Fi的git地址: `https://github.com/lwfinger/rtlwifi_new.git` ## manage the wireless connections | 管理方法 | 接口激活 | 无线连接管理 | IP地址分配 | | --- | --- | --- | --- | | 手动设置 (无加密,或者WEP加密) | ip | iw | ip/dhcpd/dhclient/networkd | | 手动设置 (WAP/WAP2 PSK加密) | ip | iw + wpa_supplicant | ip/dhcpd/dhclient | | 自动管理 | | netctl, Wicd, NetworkManger等 | | Just like other network interfaces, the wireless ones are controlled with ip from the `iproute2` package 管理无线网络连接还需要安装一些软件包: iw 只支持nl80211(netlink)标准, 不支持老的WEXT(Wireless EXTentions)标准, 如果iw没有显示网卡,可能是这个原因 wireless_tools 已经过时,但是依然广泛使用。 WEXT设备使用此工具 wpa_supplicant 提供WPA/WPA2加密支持,同时支持nl80211和WEXT *interface activation* 在使用iw或者wireless_tools之前,有些网卡需要激活内核接口 `$ ip link set wlp5s0 up` 验证接口是否已经打开: ``` $ ip link show wlp5s0 3: wlp5s0: mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff ``` `` UP表示接口已经打开 ### iw usage iw只能连接开放网络或者WEP网络. 示例中的wireless device interface是wlp5s0 your_essid 是要连接的热点ssid *获取接口名* ``` $ iw dev phy#0 Interface wlp5s0 ifindex 3 wdev 0x1 addr 12:34:56:78:9a:bc type managed channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz ``` | iw command | Description | |--------------------------------------------------|---------------------------------| | iw dev wlp5s0 link | 获取连接状态 | | iw dev wlp5s0 scan | 扫描可用热点 | | iw dev wlp5s0 set type ibss | 设置操作模式为ad-hoc | | iw dev wlp5s0 connect your_essid | 连接到开放网络 | | iw dev wlp5s0 connect your_essid 2432 | 连接到开放网络的指定通道 | | iw dev wlp5s0 set power_save on | 启用省电模式 | *连接到WEP加密的网络* WEP的密码长度是固定的, key的格式如下: ``` [d:]index:data 'd:' means default (transmit) key 'index:' is a single digit (0-3) 'data' must be 5 or 13 ascii chars or 10 or 26 hex digits for example: d:2:6162636465 is the same as d:2:abcde ``` *查看连接状态* ``` $ iw dev wlp5s0 link Connected to 7c:7d:3d:73:e6:03 (on wlp5s0) SSID: MyESSID freq: 2437 RX: 1256767 bytes (11788 packets) TX: 4568 bytes (47 packets) signal: -8 dBm tx bitrate: 7.2 MBit/s MCS 0 short GI bss flags: short-preamble short-slot-time dtim period: 2 beacon int: 100 ``` *获取统计数据* ``` $ iw dev wlp5s0 station dump Station 12:34:56:78:9a:bc (on wlp5s0) inactive time: 7813 ms rx bytes: 1456449 rx packets: 13661 tx bytes: 4568 tx packets: 47 tx retries: 0 tx failed: 0 signal: -10 dBm signal avg: -11 dBm tx bitrate: 7.2 MBit/s MCS 0 short GI rx bitrate: 1.0 MBit/s authorized: yes authenticated: yes preamble: long WMM/WME: yes MFP: no TDLS peer: no ``` ### NetworkManager 提供了两个工具: nmcli 命令行工具 nmtui 基于curses的ui | description | command | | -- | -- | | 查看所有网络设备及其状态 | `nmcli device` | | 显示附近的wifi | `nmcli device wifi list` | | 连接wifi | `nmcli device wifi connect SSID password PASSWORD` | | 使用网卡wlp5s0连接wifi | `nmcli device wifi connect SSID password PASSWORD ifname wlp5s0` | | 连接到隐藏的wifi | `nmcli device wifi connect SSID password PASSWORD hidden yes` | | 断开一个网卡上的连接 | `nmcli device disconnect eth0` | | 连接一个网卡上的连接 | `nmcli device connect eth0` | | 查看所有连接过的网络的UUID | `nmcli connection` | | 重新连接一个被标记为已断开的网卡 | `nmcli connection up uuid UUID` | | 关闭wifi | `nmcli radio wifi off` | 显示网络连接托盘: `nm-applet`