Skip to content

Instantly share code, notes, and snippets.

@francoism90
Last active June 11, 2024 16:26
Show Gist options
  • Save francoism90/3dede7973354d067c41bff5e54203fe9 to your computer and use it in GitHub Desktop.
Save francoism90/3dede7973354d067c41bff5e54203fe9 to your computer and use it in GitHub Desktop.
Change country to unlock channels, increase TX-power. (Use at your own risk)

Warning

Following instructions are provided without any warranty, and may even get you in trouble legally. The instructions are provided for testing, and should be use with care. We (including commentators) are not responsible for any damage to your device(s).

Introduction

This may enable additional channels and power (in most cases don't) on ASUS Merlin provided routers.

The nvram settings have been tested on a ASUS RT-AX58U, they may work on other models as well (ASUS RT-AC78U).

Please use nvram dump and adjust when needed, as they may differ on your device!

Credits to the commentators below, and members on the SNBForums posting instructions. Please post your findings, and help others when needed. :)

Login into router using SSH

See https://www.htpcguides.com/enable-ssh-asus-routers-without-ssh-keys/ for instructions.

Backup current settings

nvram dump > dump.txt

NOTE: You need to copy the dump.txt (or output by nvram dump to somewhere else, as they will be lost on reboot

JFFS custom scripts and configs

Make sure Enable JFFS custom scripts and configs, is enabled in System settings. See https://github.com/RMerl/asuswrt-merlin.ng/wiki/User-scripts for details.

Create a /jffs/scripts/wl file, and paste the nvram overwrites into this file (see given example file).

Create/adjust /jffs/scripts/init-start:

#!/bin/sh

[ -x /jffs/scripts/wl ] && /jffs/scripts/wl &
# [ -x /jffs/addons/AdGuardHome.d/AdGuardHome.sh ] && /jffs/addons/AdGuardHome.d/AdGuardHome.sh init-start & # place before addons

Create/adjust /jffs/scripts/services-start:

#!/bin/sh

cru a wl "0 */8 * * * /jffs/scripts/wl"

Make sure the scripts are executable:

chmod a+rx /jffs/scripts/*

Applying changes

You need to reboot the router to apply changes

Please note changing settings in the UI, may undo nvram changes.

It is recommended to change settings using CLI instead:

nvram set wl1_chanspec=149/160
# nvram set wl1_chanspec=149/80
# nvram set wl1_chanspec=48
service restart_wireless

To make the changes persistent, make sure to add them to the jffs/scripts/wl script.

#!/bin/sh
# Allow all channels
nvram set location_code=#a
nvram set 0:ccode=#a
nvram set 0:regrev=0
nvram set 1:ccode=#a
nvram set 1:regrev=0
nvram set territory_code=CN/02 # or US/02
nvram set wl_country_code=#a
nvram set wl_reg_mode=h
nvram set wl0_chlist="1 2 3 4 5 6 7 8 9 10 11 12 13 14"
nvram set wl0_country_code=#a
nvram set wl0_country_rev=0
nvram set wl0_reg_mode=h
nvram set wl1_chlist="36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 149 153 157 161 165 169 173 177"
nvram set wl1_country_code=#a
nvram set wl1_country_rev=0
nvram set wl1_reg_mode=h
nvram set acs_dfs=0
nvram set wl_acs_excl_chans_dfs=
nvram set wl_acs_excl_chans=
nvram set wl0_acs_dfs=0
nvram set wl0_acs_excl_chans_base=
nvram set wl0_acs_excl_chans=
nvram set wl1_acs_dfs=0
nvram set wl1_acs_excl_chans_base=
nvram set wl1_acs_excl_chans=
nvram set acs_unii4=1
# Channel selection
# nvram set wl0_chanspec=0 # auto select
# nvram set wl1_chanspec=0 # auto select
# nvram set wl_chanspec=0 # auto select
# nvram set wl0_sel_channel=7/80 # force 2.4GHz channel
# nvram set wl1_sel_channel=149/80 # force 5GHz channel
# Set TX-Power (risky!)
nvram set 0:maxp2ga0=120
nvram set 0:maxp2ga1=120
nvram set 1:maxp5gb0a0=120
nvram set 1:maxp5gb0a1=120
nvram set 1:maxp5gb0a2=120
nvram set 1:maxp5gb0a3=120
nvram set 1:maxp5gb1a0=120
nvram set 1:maxp5gb1a1=120
nvram set 1:maxp5gb1a2=120
nvram set 1:maxp5gb1a3=120
nvram set 1:maxp5gb2a0=120
nvram set 1:maxp5gb2a1=120
nvram set 1:maxp5gb2a2=120
nvram set 1:maxp5gb2a3=120
nvram set 1:maxp5gb3a0=120
nvram set 1:maxp5gb3a1=120
nvram set 1:maxp5gb3a2=120
nvram set 1:maxp5gb3a3=120
nvram set 1:maxp5gb4a0=120
nvram set 1:maxp5gb4a1=120
nvram set 1:maxp5gb4a2=120
nvram set 1:maxp5gb4a3=120
nvram set wl0_txpower=500
nvram set wl1_txpower=500
nvram set wl_txpower=500
# Commit changes
nvram commit
@omrij
Copy link

omrij commented May 3, 2024

Thanks, I guess I'll stick with wl method using services-start which works for me (but I wish it was persistent)

@pasko-zh
Copy link

pasko-zh commented May 4, 2024

Hi Does anyone know how to disable DFS using nvram without changing country/local/transmit power? I can do it using wl command but it's not persistent.

Just put all your WL commands in a bash script. Run it manually after a reboot of your router. I mean, I reboot my router once year or so...
Or, put in a script which is run after reboot, see documentation here https://github.com/RMerl/asuswrt-merlin.ng/wiki/User-scripts

@omrij
Copy link

omrij commented May 4, 2024

That's the way I do it now
Using services-start script and also service-event-end script (so it's running after every change made in wireless settings).
It's still more convinent to make the changes once using nvram which is also applicable to asuswrt and not only Merlin.

@825i
Copy link

825i commented May 29, 2024

This doesn't seem to work for my original AX88U (non pro). Which is originally set to "DE" (Germany) region.

Trying nvram command

I followed all the steps above and uncommented:
nvram set wl0_sel_channel=14/80 # force 2.4GHz channel

To try and set the 2.4Ghz channel to 14. After rebooting the router, it is still set to 13.

Trying Web GUI

I can see 14 as an option the "Wireless" tab in the router control panel.
If I try to set it to 14 in the Web GUI it reboots and sets it to 5 (Auto)...

If I go to Wireless > Professional > Right Click "Inspect" > CTRL+F "Country" > It shows "#a" like it should in the hidden setting.

Any other suggestions? I am just trying to get channel 14 because in the capital city every single other channel is completely saturated...


Here is my script. Do I need to replace the country code #a with something else? Is that why it's not working?

#!/bin/sh

# Allow all channels
nvram set location_code=#a
nvram set 0:ccode=#a
nvram set 0:regrev=0
nvram set 1:ccode=#a
nvram set 1:regrev=0
nvram set territory_code=CN/02 # or US/02
nvram set wl_country_code=#a
nvram set wl_reg_mode=h
nvram set wl0_chlist="1 2 3 4 5 6 7 8 9 10 11 12 13 14"
nvram set wl0_country_code=#a
nvram set wl0_country_rev=0
nvram set wl0_reg_mode=h
nvram set wl1_chlist="36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 149 153 157 161 165 169 173 177"
nvram set wl1_country_code=#a
nvram set wl1_country_rev=0
nvram set wl1_reg_mode=h
nvram set acs_dfs=0
nvram set wl_acs_excl_chans_dfs=
nvram set wl_acs_excl_chans=
nvram set wl0_acs_dfs=0
nvram set wl0_acs_excl_chans_base=
nvram set wl0_acs_excl_chans=
nvram set wl1_acs_dfs=0
nvram set wl1_acs_excl_chans_base=
nvram set wl1_acs_excl_chans=
nvram set acs_unii4=1

# Channel selection (these don't seem to do anything, so they're commented out)
# nvram set wl0_chanspec=0 # auto select
# nvram set wl1_chanspec=0 # auto select
# nvram set wl_chanspec=0 # auto select
# nvram set wl0_sel_channel=14/80 # force 2.4GHz channel
# nvram set wl1_sel_channel=149/80 # force 5GHz channel

Seems there's nothing I can do to actually use Channel 14 for 2.4Ghz.

@825i
Copy link

825i commented May 29, 2024

Ok adding on to what I have learned from fooling around a bit.

My AX88U shipped with "DE" country. This limited transmission power to 12, i.e.:

admin@RT-AX88U-9B20:/tmp/home/root# wl txpwr_target_max
Maximum Tx Power Target (chanspec:0x100d):      12.00  12.00  12.00  12.00

After copying the example script and rebooting the router:

admin@RT-AX88U-9B20:/tmp/home/root# wl txpwr_target_max
Maximum Tx Power Target (chanspec:0x100d):      26.00  26.00  26.00  26.00

So the Tx power has increased by a bit over double. I can also see from numerous WiFi apps and also the Asus Site Survey/WiFi Radar that my transmission power has increased massively. Note that I have not copied any of the "Risky" transmission lines into my start script. All I have in my start script is what I have in the reply above.

2.4Ghz

  • Xperia 1V previously reported the signal strength at -33dBm even at 1ft from the router.
  • It now reports -23dBm which I am sure is as sensitive/low as it can record. Remembering that dBm is logarithmic, a 3dBm increase is essentially a 100% improvement, so this is a huge improvement for 2.4Ghz.

5Ghz

  • Xperia 1V previously reported the signal strength at -38dBm
  • It now reports -30dBm. Still a massive improvement.

I am pretty satisfied with this. It would have been nice to use Channel 14, but I can concur and confirm with others. Setting the channel to 14 will generally reset my router to "DE" region again and put the Tx power back to 12 from 26. This is generally good enough for me.

Hopefully there's no health risks from setting the Tx power so high. I sit about 1.2m from my router. Though I plan to move it into another room when I move my study area. Hence part of the reason why I started investigating this in the first place.

@825i
Copy link

825i commented May 29, 2024

I forgot to add the speeds before and after the 12 -> 26mW change:

Result (Xperia 1V):

  • 689/492mbps - 12mW Tx Power
    • 707/485
  • 802/460 - 26mW Tx Power
    • 805/481

Result (S7 Tab):

  • 763/492mbps - 12mW Tx Power
    • 739/481
  • 756/481 - 26mW Tx Power

@francoism90
Copy link
Author

@825i Increasing Tx Power leads to more noise, it may/may not increase performance. It's basically aim is to increase the range of your router. However, this could also increase heat and load.

If I'm not mistaken, the txpwr_target_max key only indicates the maximum allowed Tx Power, it doesn't increase the value. It's a dynamic value based on the selected country, etc.

Thanks for posting your findings and results. Like said in the disclaimer, it may work for you or not.
In most cases unfortunately it doesn't work, because many WiFi-chipsets have hidden/unknown abilities to check if the receiving/sending values are valid. So even changing the country or Tx Power, it may not change anything to your end-devices.

@QaDoPL
Copy link

QaDoPL commented Jun 10, 2024

AX1100 Merlin 388.7 - so far no luck with unlock TX,
wl txpwr_target_max Maximum Tx Power Target (chanspec:0x1003): 12.00 12.00 12.00 12.00

Power really sucks, even cheap router totolink has 100% more efficient at my home.
One wall and AX don't have 2.4Ghz,,,

I tried downgrade to 388.1 and same issue can't change territory and tx.

nvram show | grep -e 'country_code|location_code|territory_code|ccode'
0:ccode=#a
1:ccode=E0
2:ccode=E0
3:ccode=E0
location_code=#a
territory_code=EU/01
wl0_country_code=E0
wl1_country_code=#a
wl2_country_code=E0
wl_country_code=#a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment