WiFi z příkazového řádku GNU/Linux

WiFi z prikazoveho radku GNU/LinuxO tom, jak nastavit WiFi rozhraní v distribucích GNU/Linux, lze nalézt velké množství zdrojů. V poslední době se setkáváme zejména s přístupem, kdy je automaticky operačním systémem příslušné rozhraní nalezeno, připojeno do systému a využíváno. Můžeme se však dostat do situace, kdy nám z nějakého důvodu tento, systémem řízený, proces nevyhovuje.
Moderní distribuční linuxová jádra obsahují podporu pro velké množství bezdrátových čipových sad, proto je malá pravděpodobnost, že naše zařízení nebude možné v systému provozovat.

Použité příkazy jsou dostupné v softwarových balíčcích iw, wireless_tools, případně je balíček upřesněn. V systému by neměl být aktivní nástroj Network Manager nebo jemu podobné, které přebírají kontrolu nad síťovými zdroji a znemožňují ruční nastavení.

Fyzické zařízení

V zásadě se můžeme setkat se dvěma typy připojení WiFi zařízení k našemu systému. Tím prvním je přímé připojení na PCI/PCIe sběrnici, druhým připojení přes USB. Při nastavení a práci s WiFi nás typ připojení pravděpodobně zajímat nebude, ale pokud nás tato informace zajímá, můžeme se jednoduchým způsobem podívat.
WiFi zařízení připojené na PCIe:

[root@linux ~]# lspci –v
…
0c:00.0 Network controller: Intel Corporation Ultimate N WiFi Link 5300
        Subsystem: Intel Corporation Device 1121
        Flags: bus master, fast devsel, latency 0, IRQ 28
        Memory at efdfe000 (64-bit, non-prefetchable) [size=8K]
        Capabilities: [c8] Power Management version 3
        Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Capabilities: [e0] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 00-21-6a-fa-ff-ca-4f-42
        Kernel driver in use: iwlwifi
        Kernel modules: iwlwifi

WiFi zařízení připojené přes USB:

[root@linux ~]# lsusb –v
Bus 001 Device 004: ID 145a:5374 Ralink Technology, Corp. RT5572 Wireless Adapter
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x148f Ralink Technology, Corp.
  idProduct          0x5572 RT5572 Wireless Adapter
  bcdDevice            1.01
  iManufacturer           1 Ralink
  iProduct                2 802.11 n WLAN
  iSerial                 3 1.0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           53
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              450mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           5
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              5 1.0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  bNumConfigurations      1
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)

Důležitější informace nám podá příkaz iw list, který vypíše seznam připojených fyzických WiFi zařízení s jejich vlastnostmi:

[root@linux ~]# iw list
Wiphy phy0
        max # scan SSIDs: 4
        max scan IEs length: 2257 bytes
        max # sched scan SSIDs: 0
        max # match sets: 0
        Retry short limit: 7
        Retry long limit: 4
        Coverage class: 0 (up to 0m)
        Device supports RSN-IBSS.
        Supported Ciphers:
                * WEP40 (00-0f-ac:1)
                * WEP104 (00-0f-ac:5)
                * TKIP (00-0f-ac:2)
                * CCMP (00-0f-ac:4)
                * 00-0f-ac:10
                * GCMP (00-0f-ac:8)
                * 00-0f-ac:9
        Available Antennas: TX 0 RX 0
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
        Band 1:
                Capabilities: 0x2f2
                        HT20/HT40
                        Static SM Power Save
                        RX Greenfield
                        RX HT20 SGI
                        RX HT40 SGI
                        TX STBC
                        RX STBC 2-streams
                        Max AMSDU length: 3839 bytes
                        No DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 2 usec (0x04)
                HT RX MCS rate indexes supported: 0-15, 32
                TX unequal modulation not supported
                HT TX Max spatial streams: 2
                HT TX MCS rate indexes supported may differ
                Bitrates (non-HT):
                        * 1.0 Mbps
                        * 2.0 Mbps (short preamble supported)
                        * 5.5 Mbps (short preamble supported)
                        * 11.0 Mbps (short preamble supported)
                        * 6.0 Mbps
                        * 9.0 Mbps
                        * 12.0 Mbps
                        * 18.0 Mbps
                        * 24.0 Mbps
                        * 36.0 Mbps
                        * 48.0 Mbps
                        * 54.0 Mbps
                Frequencies:
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)
                        * 2467 MHz [12] (20.0 dBm) (no IR)
                        * 2472 MHz [13] (20.0 dBm) (no IR)
                        * 2484 MHz [14] (20.0 dBm) (no IR)
        Band 2:
                Capabilities: 0x2f2
                        HT20/HT40
                        Static SM Power Save
                        RX Greenfield
                        RX HT20 SGI
                        RX HT40 SGI
                        TX STBC
                        RX STBC 2-streams
                        Max AMSDU length: 3839 bytes
                        No DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 2 usec (0x04)
                HT RX MCS rate indexes supported: 0-15, 32
                TX unequal modulation not supported
                HT TX Max spatial streams: 2
                HT TX MCS rate indexes supported may differ
                Bitrates (non-HT):
                        * 6.0 Mbps
                        * 9.0 Mbps
                        * 12.0 Mbps
                        * 18.0 Mbps
                        * 24.0 Mbps
                        * 36.0 Mbps
                        * 48.0 Mbps
                        * 54.0 Mbps
                Frequencies:
                        * 5180 MHz [36] (20.0 dBm) (no IR)
                        * 5190 MHz [38] (20.0 dBm) (no IR)
                        * 5200 MHz [40] (20.0 dBm) (no IR)
                        * 5210 MHz [42] (20.0 dBm) (no IR)
                        * 5220 MHz [44] (20.0 dBm) (no IR)
                        * 5230 MHz [46] (20.0 dBm) (no IR)
                        * 5240 MHz [48] (20.0 dBm) (no IR)
                        * 5250 MHz [50] (disabled)
                        * 5260 MHz [52] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5270 MHz [54] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5280 MHz [56] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5290 MHz [58] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5300 MHz [60] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5310 MHz [62] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5320 MHz [64] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5500 MHz [100] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5510 MHz [102] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5520 MHz [104] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5530 MHz [106] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5540 MHz [108] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5550 MHz [110] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5560 MHz [112] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5570 MHz [114] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5580 MHz [116] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5590 MHz [118] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5600 MHz [120] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5610 MHz [122] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5620 MHz [124] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5630 MHz [126] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5640 MHz [128] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5650 MHz [130] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5660 MHz [132] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5670 MHz [134] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5680 MHz [136] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5690 MHz [138] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5700 MHz [140] (20.0 dBm) (no IR, radar detection)
                          DFS state: usable (for 957 sec)
                          DFS CAC time: 60000 ms
                        * 5745 MHz [149] (20.0 dBm) (no IR)
                        * 5755 MHz [151] (20.0 dBm) (no IR)
                        * 5765 MHz [153] (20.0 dBm) (no IR)
                        * 5775 MHz [155] (20.0 dBm) (no IR)
                        * 5785 MHz [157] (20.0 dBm) (no IR)
                        * 5795 MHz [159] (20.0 dBm) (no IR)
                        * 5805 MHz [161] (20.0 dBm) (no IR)
                        * 5825 MHz [165] (20.0 dBm) (no IR)
                        * 4920 MHz [184] (disabled)
                        * 4940 MHz [188] (disabled)
                        * 4960 MHz [192] (disabled)
                        * 4980 MHz [196] (disabled)
        Supported commands:
                 * new_interface
                 * set_interface
                 * new_key
                 * start_ap
                 * new_station
                 * new_mpath
                 * set_mesh_config
                 * set_bss
                 * authenticate
                 * associate
                 * deauthenticate
                 * disassociate
                 * join_ibss
                 * join_mesh
                 * set_tx_bitrate_mask
                 * frame
                 * frame_wait_cancel
                 * set_wiphy_netns
                 * set_channel
                 * set_wds_peer
                 * probe_client
                 * set_noack_map
                 * register_beacons
                 * start_p2p_device
                 * set_mcast_rate
                 * testmode
                 * set_qos_map
                 * connect
                 * disconnect
        Supported TX frame types:
                 * IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                 * P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
        Supported RX frame types:
                 * IBSS: 0x40 0xb0 0xc0 0xd0
                 * managed: 0x40 0xd0
                 * AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                 * AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                 * mesh point: 0xb0 0xc0 0xd0
                 * P2P-client: 0x40 0xd0
                 * P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                 * P2P-device: 0x40 0xd0
        software interface modes (can always be added):
                 * AP/VLAN
                 * monitor
        valid interface combinations:
                 * #{ AP, mesh point } <= 8,
                   total <= 8, #channels <= 1
        HT Capability overrides:
                 * MCS: ff ff ff ff ff ff ff ff ff ff
                 * maximum A-MSDU length
                 * supported channel width
                 * short GI for 40 MHz
                 * max A-MPDU length exponent
                 * min MPDU start spacing
        Device supports TX status socket option.
        Device supports HT-IBSS.
        Device supports SAE with AUTHENTICATE command
        Device supports low priority scan.
        Device supports scan flush.
        Device supports AP scan.
        Device supports per-vif TX power setting
        Driver supports a userspace MPM
        Device supports configuring vdev MAC-addr on create.

Na výpisu můžeme vidět podporu obou pásem 2,4 GHz a 5 GHz a zejména název fyzického zařízení Wiphy phy0, tedy phy0. S tímto názvem budeme v některých z následujících kroků pracovat.

Vypnutí a zapnutí vysílacích obvodů

Některá zařízení mají integrovaný hardwarový přepínač, který slouží pro vypnutí a zapnutí vysílacích obvodů zařízení – tzv. „režim letadlo“. Tímto přepínačem můžeme ovládat zařízení WiFi, Bluetooth, ale například i GSM, UMTS a LTE modemy. Ve většině případů není dotyčné zařízení odpojeno od systému (záleží na hardwarovém zapojení v počítači), ale pouze jeho vysílací část. Proto můžeme stále vidět příslušné rozhraní aktivní. V GNU/Linux máme možnost tuto funkcionalitu ovládat i softwarově. K tomu slouží nástroj rfkill, který je součástí stejnojmenného softwarového balíčku.

Chceme-li se podívat na stav hardwarových a softwarových přepínačů, použijeme příkaz rfkill list:

[root@linux ~]# rfkill list
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
2: dell-wifi: Wireless LAN
        Soft blocked: no
        Hard blocked: no
3: dell-bluetooth: Bluetooth
        Soft blocked: no
        Hard blocked: no
4: dell-wwan: Wireless WAN
        Soft blocked: no
        Hard blocked: no
5: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

Na výpisu vidíme, že žádné bezdrátové zařízení nemá vysílací výstup vypnutý.

Pokud zapneme režim letadlo (vypnutí vysílání) hardwarovým přepínačem, můžeme zpozorovat, že se stav všech zařízení u pole Hard blocked změnil na yes:

[root@linux ~]# rfkill list
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: yes
2: dell-wifi: Wireless LAN
        Soft blocked: no
        Hard blocked: yes
3: dell-bluetooth: Bluetooth
        Soft blocked: no
        Hard blocked: yes
4: dell-wwan: Wireless WAN
        Soft blocked: no
        Hard blocked: yes

Pro softwarové vypnutí slouží volba block s parametrem obsahujícím index příslušného zařízení. Pro WiFi phy0 můžeme najít index 1.

[root@linux ~]# rfkill block 1

Opětovně ověříme stav:

[root@linux ~]# rfkill list
1: phy0: Wireless LAN
        Soft blocked: yes
        Hard blocked: no
2: dell-wifi: Wireless LAN
        Soft blocked: no
        Hard blocked: no
3: dell-bluetooth: Bluetooth
        Soft blocked: no
        Hard blocked: no
4: dell-wwan: Wireless WAN
        Soft blocked: no
        Hard blocked: no

Jak vidíme, nyní máme softwarově zablokováno vysílání pro WiFi zařízení.

Opakem volby block je unblock, která provede opětovné připojení vysílací části:

[root@linux ~]# rfkill unblock 1

Ověříme stav:

[root@linux ~]# rfkill list
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
2: dell-wifi: Wireless LAN
        Soft blocked: no
        Hard blocked: no
3: dell-bluetooth: Bluetooth
        Soft blocked: no
        Hard blocked: no
4: dell-wwan: Wireless WAN
        Soft blocked: no
        Hard blocked: no

I přesto, že máme vysílací obvody vypnuté, můžeme, jak již bylo uvedeno, pozorovat přítomnost příslušného rozhraní v systému:

[root@linux ~]# iwconfig
wlan0     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

Jestliže používáme nástroj rfkill, musíme na tuto vlastnost pamatovat.

Vytvoření a odstranění virtuálního síťového rozhraní

Abychom mohli využívat připojené fyzické WiFi zařízení phy0, musíme vytvořit virtuální síťové rozhraní. Moderní distribuce se o tuto proceduru postarají díky udev samy, ale někdy je potřeba tuto úlohu od systému převzít.
Existuje několik typů/módů bezdrátového rozhraní, které můžeme vytvořit. Mezi nejpoužívanější patří: managed, ibss, monitor, mesh, ap, ap/vlanwds. Pro náš účel, připojení k bezdrátové síti, použijeme typ managed:

[root@linux ~]# iw phy phy0 interface add wlan0 type managed

Síťové rozhraní má název wlan0.

[root@linux ~]# iwconfig wlan0
wlan0     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
[root@linux ~]# iw wlan0 info
Interface wlan0
        ifindex 5
        wdev 0x3
        addr 80:3f:5d:16:79:4e
        type managed
        wiphy 0

Tímto způsobem můžeme na jednom fyzickém zařízení (např. phy0) vytvořít více virtuálních rozhraní najednou:

[root@linux ~]# iwconfig
wlan3     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

wlan0     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

wlan5     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

wlan2     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

lo        no wireless extensions.

wlan4     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

eth0      no wireless extensions.

wlan1     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=off
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

Odstranění virtuálního síťového rozhraní ze systému:

[root@linux ~]# iw wlan0 del
[root@linux ~]# iwconfig wlan0
wlan0     No such device

Aktivace a deaktivace virtuálního síťového rozhraní

Abychom mohli virtuální síťové rozhraní wlan0 používat, musíme jej aktivovat. K tomu použijeme příkaz ip nebo ifconfig.
Nejprve zjistíme stav rozhraní:

[root@linux ~]# ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 80:3f:5d:16:79:4e brd ff:ff:ff:ff:ff:ff
[root@linux ~]# ifconfig wlan0
wlan0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 80:3f:5d:16:79:4e  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Vidíme, že rozhraní není aktivní (mezi příznaky flags chybí text UP). Provedeme aktivaci:

[root@linux ~]# ip link set wlan0 up

nebo

[root@linux ~]# ifconfig wlan0 up

Ověříme:

[root@linux ~]# ip link show wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 80:3f:5d:16:79:4e brd ff:ff:ff:ff:ff:ff
[root@linux ~]# ifconfig wlan0
wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 80:3f:5d:16:79:4e  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Rozhraní je aktivní – příznak UP.

Pokud potřebujeme, můžeme podobným způsobem rozhraní deaktivovat. To je nutné například pokud chceme měnit vysílaný výkon, regulační region, atp.

[root@linux ~]# ip link set wlan0 up

nebo

[root@linux ~]# ifconfig wlan0 up

Zobrazení dostupných AP

Pro připojení musíme znát SSID AP, ke kterému se budeme připojovat. Seznam všech dostupných AP můžeme získat příkazy iw nebo iwlist:

[root@linux ~]# iw dev wlan0 scan | grep SSID
        SSID: Leon
        SSID: Net 20
        SSID: Fiskule
        SSID: buf
        SSID: UPC Wi-Free
        SSID: bob
[root@linux ~]# iwlist wlan0 scanning | grep SSID
                    ESSID:"Leon"
                    ESSID:"Net 20"
                    ESSID:"Fiskule"
                    ESSID:"buf"
                    ESSID:"UPC Wi-Free"
                    ESSID:"bob"

Výše uvedenými příkazy (iw dev wlan0 scaniwlist wlan0 scanning) můžeme zjistit i další parametry vztahující se k jednotlivým AP.

Připojení k bezdrátové síti

Před připojením k AP bychom měli znát veškeré údaje, které budeme potřebovat. Těmi jsou zejména název AP (SSID), použité šifrování (otevřená síť, WEP, WPA), šifrovací klíč, a pokud není v síti pro předělování IP adres použit DHCP server i nám přidělenou IP adresu, definici síťové brány, masky, a jiné.

Pro připojení můžeme opět využít příkazu iw nebo iwconfig. Během nastavování je virtuální rozhraní v aktivním stavu.

Připojení k otevřené síti

Toto připojení je nejjednodušší. Musíme však brát v úvahu, že na takové AP se může kdokoli připojit a přenášení data nejsou šifrována. Využití je zejména v restauracích a jiných podobných objektech.

[root@linux ~]# iw dev wlan0 connect -w <SSID>

nebo

[root@linux ~]# iwconfig wlan0 essid <SSID>
[root@linux ~]# iwconfig wlan0 key open

Místo parametru <SSID> zadáme přesný název našeho AP (SSID/ESSID). Pokud se jedná o řetězec slov oddělených mezerami, použijeme na začátku a konci uvozovky.
Pokud je vše v pořádku, jsme připojeni k AP. Nyní můžeme pokračovat nastavením síťových parametrů – IP.
V některých případech může být na AP nastaven seznam MAC adres síťových rozhraní, které mají mít možnost se k tomuto AP připojovat. Vyměníme-li našeho klienta, musíme tento seznam na AP aktualizovat.

Připojení se šifrováním WEP

Šifrování WEP je nejstarším zabezpečením a šifrovacím mechanizmem, který se začal u veřejných bezdrátových WiFi sítí používat. Toto šifrování lze poměrně jednoduchým procesem prolomit. Je ale nutné zachytit dostatečné množství datových paketů, z kterých sofistikovanou metodou dostaneme šifrovací klíč.
Klíč může být řetězec ASCII nebo HEX znaků v délce 64 bit nebo 128 bit.

[root@linux ~]# iw dev wlan0 connect -w <SSID> key <KEY>
[root@linux ~]# iwconfig wlan0 essid <SSID>
[root@linux ~]# iwconfig wlan0 key <KEY>
[root@linux ~]# iwconfig wlan0 enc on

Místo parametru <SSID> zadáme přesný název našeho AP (SSID/ESSID). Pokud se jedná o řetězec slov oddělených mezerami, použijeme na začátku a konci uvozovky. Parametr <KEY> je přidělený šifrovací klíč. U WEP lze použít až čtyři klíče. O této možnosti lze nalézt více v manuálových stránkách příslušných příkazů.

Připojení se šifrováním WPA

Připojení pomocí WPA je nejnovějším a těžko prolomitelným způsobem. Pro práci, na rozdíl od předchozích metod, potřebujeme softwarový balíček wpa_supplicant.
Tento nástroj je ve výchozím stavu v závislosti na použité distrubuci řízen souborem /etc/wpa_supplicant/wpa_supplicant.conf, případně /etc/wpa_supplicant.conf. V něm je definice příslušné bezdrátové sítě. V případě potřeby, může obsahovat takových sítí několik.

Pro každé SSID musí být vygenerován příslušný záznam obsahující 256 bit PSK:

[root@linux ~]# wpa_passphrase <SSID> <PASSPHRASE> | tee -a /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="<SSID>"
        #psk="<PASSPHRASE>"
        psk=c2161655c6ba444d8df94cbbf4e9c5c4c61fc37702b9c66ed37aee1545a5a333
}

Příkaz nám tento záznam vygeneruje a přidá do souboru /etc/wpa_supplicant/wpa_supplicant.conf. Samozřejmě pokud chceme, upravíme soubor ručně. <PASSPHRASE> je heslo/fráze pro převedení na klíč 256 bit PSK.

Nyní můžeme spustit wpa_supplicant, který provede vyhledání všech SSID uvedených v souboru /etc/wpa_supplicant/wpa_supplicant.conf a v případě nalezení se k nim pokusí připojit. Pokud je nalezeno více shod aktivních SSID (ve vzduchu i v souboru), je vybráno jedno z AP na základě v souboru definovaných priorit.

[root@linux ~]# wpa_supplicant -d wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B

Nastavení parametrů IP sítě

V zásadě máme dvě možnosti. Použít automatickou konfiguraci pomocí DHCP, pokud je na AP nakonfigurována, nebo nastavit síť ručně. V případě ručního nastavení, musíme znát několik základních parametrů.

Nastavení pomocí DHCP (příkaz dhclient nebo dhcpcd)

Při této metodě nemusíme mít o síti žádné znalosti, protože vše je nastaveno automaticky.

[root@linux ~]# dhcpcd wlan0
DUID 00:01:02:01:1b:a0:e4:7c:10:18:8b:bb:65:b0
wlp12s0: IAID 66:c3:bf:7a
wlp12s0: soliciting an IPv6 router
wlp12s0: soliciting a DHCP lease
wlp12s0: offered 192.168.0.10 from 192.168.0.1
wlp12s0: leased 192.168.0.10 for 86400 seconds
wlp12s0: adding route to 192.168.0.0/24
wlp12s0: adding default route via ´192.168.0.1
forked to background, child pid 1292

Ruční nastavení

Pro ruční nastavení můsíme mít přidělenu IP adresu (192.168.0.10), masku (/24) sítě a výchozí bránu (192.168.0.1).
Nastavíme IP adresu a masku sítě:

[root@linux ~]# ip addr add dev wlan0 192.168.0.10/24

nebo

[root@linux ~]# ifconfig wlan0 192.168.0.10/24

Nastavíme výchozí bránu – pokud potřebujeme:

[root@linux ~]# ip route add default via 192.168.0.1 dev wlan0

nebo

[root@linux ~]# route add -net default gw 192.168.0.1 dev wlan0

Nastavení dalších parametrů

Nastavení MAC adresy

Pokud potřebujeme dočasně změnit MAC adresu, můžeme použít nástroj macchanger, ip nebo ifconfig. Při této změně nesmí být rozhraní aktivní, tzn. ve stavu DOWN.

[root@linux ~]# ip link set wlan0 address 00:11:22:33:44:55

nebo

[root@linux ~]# ifconfig wlan0 hw ether 00:11:22:33:44:55

Po změně MAC adresy je nutné rozhraní aktivovat a připojit se k AP.

Nastavení regionu

Na nastavení regionu je závislé množství parametrů, které můžeme změnit. Vždy je ale nutné zadat takový region/zemi, kde se nacházíme, jinak se můžeme dostat do konfliktu s místní legislativou.
Kódy zemí jsou uvedeny v ISO/IEC 3166-1. Nastavení se provádí globálně pro celý operační systém při deaktivovaném rozhraní.

[root@linux ~]# iw reg set CZ

Nastavení kmitočtu a kanálu

Kmitočty/kanály jsou závislé na nastavení regionu.

[root@linux ~]# iwconfig wlan0 channel 11
[root@linux ~]# iwconfig wlan0 channel auto
[root@linux ~]# iwconfig wlan0 freq 2.422G
[root@linux ~]# iwconfig wlan0 freq 2422000000
[root@linux ~]# iw dev wlan0 set channel 11
[root@linux ~]# iw phy phy0 set channel 11
[root@linux ~]# iw dev wlan0 set freq 2.422G
[root@linux ~]# iw phy phy0 set freq 2.422G

Nastavení úspory energie

[root@linux ~]# iw dev wlan0 set power_save on
[root@linux ~]# iwconfig wlan0 power on

Nastavení typu/módu rozhraní

[root@linux ~]# iw dev wlan0 set type managed
[root@linux ~]# iwconfig wlan0 mode managed

Nastavení chování v zarušeném prostředí

[root@linux ~]# iwconfig wlan0 retry 16
[root@linux ~]# iwconfig wlan0 retry lifetime 300m
[root@linux ~]# iwconfig wlan0 frag 512
[root@linux ~]# iwconfig wlan0 commit

Nastavení vysílacího výkonu

Maximální hodnota vysílacího výkonu je závislá na nastavení regionu.

[root@linux ~]# iwconfig wlan0 txpower 20

Monitoring spektra

Monitoring WiFi spektra je popsán v článku Monitoring rádiového spektra WiFi v GNU/Linux.

Závěr

Existuje množství softwarových nástrojů, které nás pohodlně provedou kompletním nastavením WiFi v GNU/Linux. Můžeme se však dostat do situace, kde nemáme tyto nástroje k dispozici a je nutné použít jiné metody. Právě proto vznikl tento článek.

Leave a Reply