Removing Country WiFi restrictions

There are 3 things which can limit the channels your WiFi dongle has access to:

  • The physical hardware
  • The Drivers
  • The CDRA which is baked into the operating system

Short of getting your soldering iron out or buying a different dongle, there isn’t anything you can do about the physical restrictions of the hardware in use. But, when it comes to the CDRA agent, we are able to manipulate it. For example, lets set the regulatory domain to the US and list what frequencies and power settings are permitted:

pi@raspberrypi:~ $ sudo iw reg set US
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ iw reg get
country US: DFS-FCC
        (2402 – 2472 @ 40), (N/A, 30), (N/A)
        (5170 – 5250 @ 80), (N/A, 23), (N/A)
        (5250 – 5330 @ 80), (N/A, 23), (0 ms), DFS
        (5490 – 5730 @ 160), (N/A, 23), (0 ms), DFS
        (5735 – 5835 @ 80), (N/A, 30), (N/A)
        (57240 – 63720 @ 2160), (N/A, 40), (N/A)
pi@raspberrypi:~ $ 

For example, on the 2.4 Ghz WiFi band this is reporting that access to frequencies 2.402 GHz to 2.472 GHz is allowed. A maximum of 40 Mhz of bandwidth can be used for a single broadcast with a maximum power output of 30dBm. This equates to channels 1 to 11. If the terms centre frequencies & bandwidth are new to you, you may wish to check out my short guide that graphically illustrates all the WiFi channels.

Next, lets see how that translates to a dual band 802.11a/b/g/n Alfa AWUS051NHv2 USB WiFi dongle.

pi@raspberrypi:~ $ iw list | grep ‘Frequencies:\|Wiphy\|Band\|MHz.\[[1-9]’
Wiphy phy1
        Band 1:
                Frequencies:
                        * 2412 MHz [1] (30.0 dBm)
                        * 2417 MHz [2] (30.0 dBm)
                        * 2422 MHz [3] (30.0 dBm)
                        * 2427 MHz [4] (30.0 dBm)
                        * 2432 MHz [5] (30.0 dBm)
                        * 2437 MHz [6] (30.0 dBm)
                        * 2442 MHz [7] (30.0 dBm)
                        * 2447 MHz [8] (30.0 dBm)
                        * 2452 MHz [9] (30.0 dBm)
                        * 2457 MHz [10] (30.0 dBm)
                        * 2462 MHz [11] (30.0 dBm)
                        * 2467 MHz [12] (disabled)
                        * 2472 MHz [13] (disabled)
                        * 2484 MHz [14] (disabled)
        Band 2:
                Frequencies:
                        * 5180 MHz [36] (23.0 dBm)
                        * 5190 MHz [38] (23.0 dBm)
                        * 5200 MHz [40] (23.0 dBm)
                        * 5220 MHz [44] (23.0 dBm)
                        * 5230 MHz [46] (23.0 dBm)
                        * 5240 MHz [48] (23.0 dBm)
                        * 5260 MHz [52] (23.0 dBm) (radar detection)
                        * 5270 MHz [54] (23.0 dBm) (radar detection)
                        * 5280 MHz [56] (23.0 dBm) (radar detection)
                        * 5300 MHz [60] (23.0 dBm) (radar detection)
                        * 5310 MHz [62] (23.0 dBm) (radar detection)
                        * 5320 MHz [64] (23.0 dBm) (radar detection)
                        * 5500 MHz [100] (23.0 dBm) (radar detection)
                        * 5510 MHz [102] (23.0 dBm) (radar detection)
                        * 5520 MHz [104] (23.0 dBm) (radar detection)
                        * 5540 MHz [108] (23.0 dBm) (radar detection)
                        * 5550 MHz [110] (23.0 dBm) (radar detection)
                        * 5560 MHz [112] (23.0 dBm) (radar detection)
                        * 5580 MHz [116] (23.0 dBm) (radar detection)
                        * 5590 MHz [118] (23.0 dBm) (radar detection)
                        * 5600 MHz [120] (23.0 dBm) (radar detection)
                        * 5620 MHz [124] (23.0 dBm) (radar detection)
                        * 5630 MHz [126] (23.0 dBm) (radar detection)
                        * 5640 MHz [128] (23.0 dBm) (radar detection)
                        * 5660 MHz [132] (23.0 dBm) (radar detection)
                        * 5670 MHz [134] (23.0 dBm) (radar detection)
                        * 5680 MHz [136] (23.0 dBm) (radar detection)
                        * 5700 MHz [140] (23.0 dBm) (radar detection)
                        * 5745 MHz [149] (30.0 dBm)
                        * 5755 MHz [151] (30.0 dBm)
                        * 5765 MHz [153] (30.0 dBm)
                        * 5785 MHz [157] (30.0 dBm)
                        * 5795 MHz [159] (30.0 dBm)
                        * 5805 MHz [161] (30.0 dBm)
                        * 5825 MHz [165] (30.0 dBm)
                        * 5835 MHz [167] (disabled)
                        * 5845 MHz [169] (disabled)
                        * 5855 MHz [171] (disabled)
                        * 5865 MHz [173] (disabled)
pi@raspberrypi:~ $ 

We can see that channels 12, 13 and 14 on the 2.4 Ghz band are disabled. In the 5Ghz band, power is restricted to 23dBm for channels 36-140, whilst 30dBm is allowed for channels 149-165. Channels 167-173 are disabled.

These restrictions cab be removed by re-writing the regulatory database. WARNING – This may be illegal in some countries as exceeding power restrictions, receiving or transmitting on unpermitted frequencies may be breaking the law. Before proceeding, you should familiarise yourself with your countries regulations.
Install the dependencies

sudo apt-get install libnl-3-dev libnl-genl-3-dev libgcrypt11-dev python-m2crypto

Download source code for regulatory database and CDRA agent

cd ~
wget https://www.kernel.org/pub/software/network/wireless-regdb/wireless-regdb-2017.03.07.tar.gz
wget https://www.kernel.org/pub/software/network/crda/crda-3.18.tar.gz

Extract the files

tar -xvzf wireless-regdb-2017.03.07.tar.gz
tar -xvzf crda-3.18.tar.gz

Backup and then edit the database

cd ~/wireless-regdb-2017.03.07
cp db.txt db.txt.backup
nano db.txt

Add the new country AA to the database by inserting the lines highlighted in yellow:

# This is the world regulatory domain
country 00:
        (2402 – 2494 @ 40), (30)
        (5160 – 5875 @ 40), (30)

country AA:
        # Channels in the 2.4 Ghz band. 802.11b/g/n
        # 40Mhz bandwidth. Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
        (2402 – 2494 @ 40), (100)

        # Channels in the 5 Ghz Band U-NII-1 & U-NII-2A.
        # 20Mhz bandwidth. Channels: 36, 40, 44, 48, 52, 56, 60, 64
        (5170 – 5330 @ 20), (100)
        # 40Mhz bandwidth. Channels: 38, 46, 54, 62
        (5170 – 5330 @ 40), (100)
        # 80Mhz bandwidth. Channels: 42, 58
        (5170 – 5330 @ 80), (100)
        #160Mhz bandwidth. Channel: 50
        (5170 – 5330 @ 160), (100)

        # Channels in the 5 Ghz Band U-NII-2C.
        # 20Mhz bandwidth. Channles: 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144
        (5490 – 5730 @ 20), (100)
        # 40Mhz bandwidth. Channels: 102, 110, 118, 126, 134, 142
        (5490 – 5730 @ 40), (100)
        # 80 Mhz bandwidth, Channles: 106, 122, 138
        (5490 – 5730 @ 80), (100)
        # 160Mhz bandwidth. Channel: 114
        (5490 – 5650 @ 160), (100)

        # Channels in the 5 Ghz Band U-NII-3.
        # 20 Mhz bandwidth. Channles: 149, 153, 157, 161, 165
        (5735 – 5835 @ 20), (100)
        # 40 Mhz bandwidth. Channels: 151, 159
        (5735 – 5815 @ 40), (100)
        # 80Mhz bandwidth: Channel 155
        (5735 – 5815 @ 80), (100)


        # Currently unallocated, channels 167, 169, 171 and 173
        # 20 Mhz bandwidth. Channels: 169, 173
        (5835 – 5875 @ 20), (100)
        # 40Mhz bandwidth. Channel: 167
        (5815 – 5855 @ 40), (100)
        # 80Mhz bandwidth. Channel: 171
        (5815 – 5895 @ 80), (100)


country AD:
        (2402 – 2482 @ 40), (20)
        (5170 – 5250 @ 80), (20)
        (5250 – 5330 @ 80), (20), DFS
        (5490 – 5710 @ 80), (27), DFS
        # 60 GHz band channels 1-4, ref: Etsi En 302 567
        (57000 – 66000 @ 2160), (40)

ctrl-o to save
ctrl-x to exit
Compile the database

make
sudo make install

Copy the signing keys to CDRA

cp -v ~/wireless-regdb-2017.03.07/*.key.pub.pem ~/crda-3.18/pubkeys/

Edit the make file for CRDA. Need to remove the -Werror switch that is on line 29

cd ~/crda-3.18/
nano Makefile

ctrl-o to save
ctrl-x to exit
Make the CRDA database

make

Reboot

sudo shutdown -r now

Test
Once the Raspberry Pi has loaded back up, change the regularity country to AA and check the restrictions:

pi@raspberrypi:~ $ sudo iw reg set AA
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ iw reg get
country AA: DFS-UNSET
        (2402 – 2494 @ 40), (N/A, 100), (N/A)
        (5170 – 5330 @ 20), (N/A, 100), (N/A)
        (5170 – 5330 @ 40), (N/A, 100), (N/A)
        (5170 – 5330 @ 80), (N/A, 100), (N/A)
        (5170 – 5330 @ 160), (N/A, 100), (N/A)
        (5490 – 5650 @ 160), (N/A, 100), (N/A)
        (5490 – 5730 @ 20), (N/A, 100), (N/A)
        (5490 – 5730 @ 40), (N/A, 100), (N/A)
        (5490 – 5730 @ 80), (N/A, 100), (N/A)
        (5735 – 5815 @ 40), (N/A, 100), (N/A)
        (5735 – 5815 @ 80), (N/A, 100), (N/A)
        (5735 – 5835 @ 20), (N/A, 100), (N/A)
        (5815 – 5855 @ 40), (N/A, 100), (N/A)
        (5815 – 5895 @ 80), (N/A, 100), (N/A)
        (5835 – 5875 @ 20), (N/A, 100), (N/A)
pi@raspberrypi:~ $ 

Now when we check our Alfa AWUS051NHv2 we see that all the channels are enabled with a power limit of 100dBm which is 10 Mega Watts! and no other restrictions such as DFS apply.

pi@raspberrypi:~ $ iw list | grep ‘Frequencies:\|Wiphy\|Band\|MHz.\[[1-9]’
Wiphy phy1
        Band 1:
                Frequencies:
                        * 2412 MHz [1] (100.0 dBm)
                        * 2417 MHz [2] (100.0 dBm)
                        * 2422 MHz [3] (100.0 dBm)
                        * 2427 MHz [4] (100.0 dBm)
                        * 2432 MHz [5] (100.0 dBm)
                        * 2437 MHz [6] (100.0 dBm)
                        * 2442 MHz [7] (100.0 dBm)
                        * 2447 MHz [8] (100.0 dBm)
                        * 2452 MHz [9] (100.0 dBm)
                        * 2457 MHz [10] (100.0 dBm)
                        * 2462 MHz [11] (100.0 dBm)
                        * 2467 MHz [12] (100.0 dBm)
                        * 2472 MHz [13] (100.0 dBm)
                        * 2484 MHz [14] (100.0 dBm)
        Band 2:
                Frequencies:
                        * 5180 MHz [36] (100.0 dBm)
                        * 5190 MHz [38] (100.0 dBm)
                        * 5200 MHz [40] (100.0 dBm)
                        * 5220 MHz [44] (100.0 dBm)
                        * 5230 MHz [46] (100.0 dBm)
                        * 5240 MHz [48] (100.0 dBm)
                        * 5260 MHz [52] (100.0 dBm)
                        * 5270 MHz [54] (100.0 dBm)
                        * 5280 MHz [56] (100.0 dBm)
                        * 5300 MHz [60] (100.0 dBm)
                        * 5310 MHz [62] (100.0 dBm)
                        * 5320 MHz [64] (100.0 dBm)
                        * 5500 MHz [100] (100.0 dBm)
                        * 5510 MHz [102] (100.0 dBm)
                        * 5520 MHz [104] (100.0 dBm)
                        * 5540 MHz [108] (100.0 dBm)
                        * 5550 MHz [110] (100.0 dBm)
                        * 5560 MHz [112] (100.0 dBm)
                        * 5580 MHz [116] (100.0 dBm)
                        * 5590 MHz [118] (100.0 dBm)
                        * 5600 MHz [120] (100.0 dBm)
                        * 5620 MHz [124] (100.0 dBm)
                        * 5630 MHz [126] (100.0 dBm)
                        * 5640 MHz [128] (100.0 dBm)
                        * 5660 MHz [132] (100.0 dBm)
                        * 5670 MHz [134] (100.0 dBm)
                        * 5680 MHz [136] (100.0 dBm)
                        * 5700 MHz [140] (100.0 dBm)
                        * 5745 MHz [149] (100.0 dBm)
                        * 5755 MHz [151] (100.0 dBm)
                        * 5765 MHz [153] (100.0 dBm)
                        * 5785 MHz [157] (100.0 dBm)
                        * 5795 MHz [159] (100.0 dBm)
                        * 5805 MHz [161] (100.0 dBm)
                        * 5825 MHz [165] (100.0 dBm)
                        * 5835 MHz [167] (100.0 dBm)
                        * 5845 MHz [169] (100.0 dBm)
                        * 5855 MHz [171] (100.0 dBm)
                        * 5865 MHz [173] (100.0 dBm)
pi@raspberrypi:~ $ 

Leave a Reply

Your email address will not be published. Required fields are marked *