Skip to content

Instantly share code, notes, and snippets.

@bluewalk
Last active December 5, 2024 15:50
Show Gist options
  • Save bluewalk/7b3db071c488c82c604baf76a42eaad3 to your computer and use it in GitHub Desktop.
Save bluewalk/7b3db071c488c82c604baf76a42eaad3 to your computer and use it in GitHub Desktop.
Getting NordVPN WireGuard details

About

Instructions to obtain WireGuard details of your NordVPN account. These can be used to setup a WireGuard tunnel on your router to NordVPN.

Source: https://forum.gl-inet.com/t/configure-wireguard-client-to-connect-to-nordvpn-servers/10422/27

Prerequisites

If you have any linux machine, use that or install a vm if you don't have one.

Get their official linux app installed. Make sure you have wireguard installed too. And set the used technology to Nordlynx by running nordvpn set technology nordlynx

Fetching details

Connect to nordvpn with command: nordvpn connect (don't forget to login with nordvpn login --legacy).

Fetch (your) IP address

After successful connection run

ifconfig nordlynx

Fetch your private key

Run

sudo wg show nordlynx private-key

Output of this command should be something like this:

CKMAE9LARlt2eZHgGnNaSUYiKllKJN7f3hed/bWm5E8=

The key above is just a random key for demo purposes.

Fetch your public key

Run

sudo wg show nordlynx public-key

Output of this command should be something like this:

TO158iXbNXt2eZHgGnNaSUYiKZHgGN7f3hed/bWm5E8=

The key above is just a random key for demo purposes.

Fetch server details

Make sure you have curl and jq installed on your host/router. These are needed to be able to fetch the config of NordVPN Server. If not installed, go ahead and install

opkg install curl jq

After installation enter the command below to fetch the recommended server config:

curl -s "https://api.nordvpn.com/v1/servers/recommendations?&filters\[servers_technologies\]\[identifier\]=wireguard_udp&limit=1"|jq -r '.[]|.hostname, .station, (.locations|.[]|.country|.city.name), (.locations|.[]|.country|.name), (.technologies|.[].metadata|.[].value), .load'

Output:

uk1818.nordvpn.com #your endpoint host
178.239.166.185 #its ip address
London #city
United Kingdom #country
K53l2wOIHU3262sX5N/5kAvCvt4r55lNui30EbvaDlE= #Server public key
10 #Server load at the time.

Or just visit the following url https://api.nordvpn.com/v1/servers/recommendations?&filters\[servers_technologies\]\[identifier\]=wireguard_udp&limit=1 from your browser and look for the details manually.

@spurkster
Copy link

I just want to say thank you to all those that posted. Running a simple python program made this incredibly easy, you guys are amazing.

@techie2000
Copy link

For anyone using UDM Pro devices, you can setup a manual entry in the gui. Based on the notes in https://gist.github.com/bluewalk/7b3db071c488c82c604baf76a42eaad3?permalink_comment_id=4967841#gistcomment-4967841, the output of #2 goes in Private Key field, step #3 goes in Server Address (note the port#). Note the fixed value of Tunnel IP/Netmask. Add your preferred Primary/Secondary DNS Servers.

image

You can choose to route all, or just some of your devices through the VPN:

image

@mustafachyi
Copy link

u could checkout my second web version for this project tryed to make it as easy as possible to get your configs u could find it at
https://nord-configs.onrender.com/

@rrbb86
Copy link

rrbb86 commented Oct 28, 2024

Another way of getting the NordVPN server details you want (steps after installation of curl and jq):

  1. Use the NordVPN site ([https://nordvpn.com/servers/tools/]) to get the hostname of a server you desire. Feel free to use the server preferences on the right and/or advanced options
  2. Copy the hostname of the desired server (this will be in the format of e.g. "us8261.nordvpn.com")
  3. In the terminal type in the following, replace the ##HOSTNAME## with the above hostname:
    curl --silent "https://api.nordvpn.com/v1/servers?limit=16384" | jq --raw-output '.[] | select(.hostname == "##HOSTNAME##") | "\nServer: \(.name)\nHostname: \(.hostname)\nIP Address: \(.station)\nLocation: \(.locations.[].country.name) - \(.locations.[].country.city.name)\nType: \(.technologies.[].name)\nPubKey: \(.technologies.[].metadata.[].value)\nLoad: \(.load)\nStatus: \(.status)\n"'
  4. Wait for a moment and the terminal will print out the required details for your desired host, e.g.:
    Server: United States #8261
    Hostname: us8261.nordvpn.com
    IP Address: 212.102.47.74
    Location: United States - Seattle
    Type: Wireguard
    Public Key: 1GaNB9RbeGNzekcuRDcxTXvqtXWFe2K9GtUd+EjNuyI=
    Load: 21
    Status: online

Hello, what could be wrong if I got "jq: 1 compile error" ?

@2-click
Copy link

2-click commented Nov 8, 2024

For my people under windows that don't have curl and jq, I have converted it to powershell:
https://gist.github.com/2-click/d3267354648bd6175db78ef171472e1d

@jfishie
Copy link

jfishie commented Dec 5, 2024

Found a simple way to get your private key if you have the NordVPN app installed on a Mac. I am sure there is a windows or linux equivalent.

  • Open the keychain app
  • Search NordVPN
  • Double click on the result "NordVPN Configuration"
  • Click "Show Password" and type in your computer password

In the field next to the Show Password button you will see a json result. You can either copy the private key from here or paste it into an editor so you can see little easier. Remove any backslashes " \ " from the private key so the final key is in Base64 format and paste into your docker compose file.

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