It has been a while since I last setup NordVPN on a Debian Linux using StrongSwan. StrongSwan is now using 'native' files rather than the now deprecated ipsec files. NordVPN Example: How to connect to NordVPN with IKEv2/IPSec on Linux refers to the old format. Here is a new format.
Here is my take on a successful installation.
apt install \
  --no-install-recommends \
    strongswan \
    libstrongswan-standard-plugins \
    libstrongswan-extra-plugins \
    libcharon-extra-plugins
wget https://downloads.nordcdn.com/certificates/root.pem -O /etc/swanctl/x509ca/NordVPN.pem
sed -i 's/load = yes/load = no/' /etc/strongswan.d/charon/constraints.conf
An example /etc/swanctl/swanctl.conf file:
connections {
  nordvpn {
    version = 2
    proposals = aes192gcm16-aes128gcm16-prfsha256-ecp256-ecp521,aes192-sha256-modp3072,default
    rekey_time = 0s
    fragmentation = yes
    dpd_delay = 300s
    local_addrs = %defaultroute
    remote_addrs = 
    vips=0.0.0.0,::
    local {
      auth = eap-mschapv2
      eap_id = "<username>"
    }
    remote {
      auth = pubkey
      cacerts = /etc/swanctl/x509ca/NordVPN.pem
      id = %any
    }
    children {
      nordvpn {
        remote_ts = 0.0.0.0/0,::/0
        rekey_time = 0s
        dpd_action = clear
        esp_proposals = aes192gcm16-aes128gcm16-prfsha256-ecp256-modp3072,aes192-sha256-ecp256-modp3072,default
      }
    }
  }
}
secrets {
  eap-nordvpn {
    id = "<username>"
    secret = "<password>"
  }
}
 
If you have a local network to which you need access when the vpn is up, StrongSwan using route table 220 for forwarding. Use the following command to see current settings:
# ip rule list 0: from all lookup local 220: from all lookup 220 32766: from all lookup main 32767: from all lookup default # ip route list table 220 default via 192.168.1.10 dev eth0 proto static src
To add your local network to the route table. Additional subnets are added in a similar way. Change the interface name to suit your local circumstances. Use the updown Plugin for better control of the local routing.
ip route add table 192.168.1.0/24 dev wlan0
This may be required for changes made:
# systemctl restart strongswan
Tunnel related state and status commands:
sudo swanctl --load-conns sudo swanctl --list-conns sudo swanctl --list-certs sudo swanctl --list-sas sudo swanctl --initiate --child nordvpn sudo swanctl --terminate --child nordvpn sudo swanctl --reload-settings
References:
- How to Setup an IKEv2 VPN Connection on Arch Linux (Example: NordVPN) - primary configuration template
 - Allow Strongswan roadwarrior to access local LAN - keeping local traffic out of the vpn
 

