aView Tunnel Alternatives

Overview

All of our devices by default establish an IPSec tunnel to remote.accns.com.  This tunnel is used to send remote commands to a device and for the Terminal on Unit link in aView.  However, due to the number of devices establishing a tunnel to this single endpoint, we have run into congestion and the result is unstable tunnel connections, which leads to poor remote interaction with a device.

We have two separate endpoints that can be used instead of the remote.accns.com tunnel: ipsec.accns.com and an AT&T SIG.  See option a and option b sections below, respectively.  The ipsec.accns.com endpoint is a scalable IPSec endpoint that can handle any number of devices tunneling to it.  Each of the three AT&T SIG endpoints can support up to 8,000 concurrent tunnels before encountering load congestion.  Therefore, our suggestion is to use the ipsec.accns.com endpoint listed in option a, and only fallback to option b if needed.

Option A - ipsec.accns.com

This is a mirror image of remote.accns.com, with some added security enhancements, load-balancing, and scalability improvements implemented under the hood.  It also leverages a dynamic pool of IP address instead of the static MAC-address-to-IP allocation we have on remote.accns.com.  Devices can expect to get a  NAT'd DHCP tunnel IP address when tunneling to the ipsec.accns.com server.  This tunnel IP is used by the Accelerated View site to send remote commands to the device, and for accessing the device via the Terminal on Unit link in Accelerated View.

To utilize this tunnel instead of the default remote.accns.com tunnel, make the following config changes to the aView tunnel in the config settings of the device:

  • set Remote endpoint -> hostname to ipsec.accns.com
  • Set Remote endpoint -> ID -> IPv4 ID value to ipsec.accns.com
  • Set Policies -> Policy -> Local network -> Type to Request a network
  • Set Management priority to 10, which tells aView to use the tunnel IP as the primary IP to contact the unit.
  • Set System > Log > Event categories > Network interfaces > Status interval interval to 1m
  • Under Services -> Web administration ensure the following options are set:
    • Enable is selected
    • Port is set to 443
    • Access control list -> Zones includes IPSec
      • Note: this zone is included in the Web administration service's ACL by default, but it's mentioned here for the user to verify that it is still present in case the device is running settings that deviate from the default config
Option B - AT&T SIG

This is one of three SIG servers residing inside our peak10 datacenter, which is where our aView application lives.  This tunnel hands out dynamic IP addresses as well, in the 1.1.32.1/19 range

To utilize this tunnel instead of the default remote.accns.com tunnel, you will need to disable the default VPN -> IPSec -> Accelerated View tunnel, and create a new IPSec tunnel entry with settings matching the following configuration screenshot.  You can replace the 128.136.162.23 IP address of the SIG with either of the other two SIG servers.  I've listed all three below for reference.

  • 128.136.162.22
  • 128.136.162.23
  • 128.136.162.24
# config dump vpn.ipsec.peak10SIG
auth.secret=AUTH0R1ZEF0R5400RM
auth.type=secret
connection_monitor.attempts=3
connection_monitor.enable=true
connection_monitor.interval=15m
connection_monitor.reboot=false
connection_monitor.restart=true
connection_monitor.success_condition=one
connection_monitor.target.0.dns_server=
connection_monitor.target.0.dns_server6=
connection_monitor.target.0.http_url=
connection_monitor.target.0.http_url6=
connection_monitor.target.0.ping_host=10.0.2.50
connection_monitor.target.0.ping_host6=
connection_monitor.target.0.ping_size=20
connection_monitor.target.0.ping_size6=20
connection_monitor.target.0.test=ping
connection_monitor.timeout=15s
dpd.delay=60
dpd.enable=true
dpd.timeout=90
enable=true
ike.initiate=true
ike.mode=aggressive
ike.pad=true
ike.phase1_proposal.0.cipher=aes128
ike.phase1_proposal.0.dh_group=modp768
ike.phase1_proposal.0.hash=sha1
ike.phase2_proposal.0.cipher=aes128
ike.phase2_proposal.0.dh_group=modp768
ike.phase2_proposal.0.hash=sha1
local.id.fqdn_id=
local.id.ipv4_id=
local.id.ipv6_id=
local.id.keyid_id=RM5400_GROUP
local.id.raw_id=
local.id.rfc822_id=
local.id.type=keyid
local.interface=
local.type=defaultroute
mgmt=20
mode=tunnel
modecfg_client.enable=false
nat.0.dst=10.0.0.0/15
policy.0.local.address=
policy.0.local.custom=
policy.0.local.network=
policy.0.local.type=request
policy.0.remote.network=10.0.0.0/15
remote.hostname=128.136.162.23
remote.id.fqdn_id=
remote.id.ipv4_id=128.136.162.23
remote.id.ipv6_id=
remote.id.keyid_id=
remote.id.raw_id=
remote.id.rfc822_id=
remote.id.type=ipv4
type=esp
xauth_client.enable=true
xauth_client.password=all1use
xauth_client.username=atap.v2vl1010
zone=ipsec

You also need to ensure the Ipsec zone is added to the ACL for the Web admin, SSH, and Remote control services, which allows aView to access the device through the SIG on the appropriate ports/services for sending remote commands and using the Terminal on Unit link.  See screenshot below for reference.

Custom script for fixing Primary Interface on aView

The aView application determines the primary interface for a device by looking for a network syslog with default set to pri and then parses out the intf value as the primary interface. However, if I set an interface or tunnel to have a management priority, such as the case when we want to have aView treat the tunnel IP as the primary IP address to access the device, then the device never sends a syslog where the default key is set to pri and also includes an intf key/value. The result is the primary IP address for the device in aView gets updated, but not the Primary Interface. See screenshot below for reference.

Below is a sample syslog of what is currently sent

cnt=93~type=mgmt~default=pri~ip0=192.168.64.26~name0=ipsec-tunnel-aview

What should be sent is this, where the intf value that the management priority is tied to is using. Meaning, if a tunnel has the highest management priority, I still want to know which WAN interface is the primary interface.

cnt=93~type=mgmt~default=pri~ip0=192.168.64.26~name0=ipsec-tunnel-aview~intf=wwan0

This issue is tracked with our developers in ACL-160, and will be fixed in a future firmware update.

https://jira.digi.com/browse/ACL-160

In the meantime, you can add the following custom script to a device to have it update its Primary Interface in aView properly when it's using an alternate aView tunnel.  To do so, click Add under System -> Scheduled tasks -> Custom scripts.  Select the Enable checkbox, add a 5-minute interval, then copy/paste the script below into the Commands field.

#!/bin/sh

# workaround for devices on firmware 18.4.54.22 or lower to log their primary
# WAN interface to aView when they have a mgmt priority set

send_mgmt_intf_update() {
  pri="$(runt get network.mgmt.log.default)"
  if [ "$pri" = 'pri' ]; then
    default_net="$(runt dump network.route.default | grep -m 1 -o "interface_.*=" | cut -f2 -d'_' | tr -d '=')"
    if [ -n "$default_net" ]; then
      default_intf="$(runt get network.interface.${default_net}.device)"
      runt set network.mgmt.log.intf "$default_intf"
    fi
    log=$(runt log network.mgmt.log)
    accns_log network_mgmt "${log:+type=mgmt~}$log"
  fi
}

reset_tunnel() {
  accns_log w config "custom: aView IPSec tunnel dropping incoming traffic. Restarting tunnel..."
  cat /var/log/messages > /var/log/messages.0
  echo '' > /var/log/messages
  /sbin/ipsec stop
  sleep 5
  /sbin/ipsec start
  sleep 10
  accns_log w config "custom: aView IPSec tunnel restarted"
  send_mgmt_intf_update
}

send_mgmt_intf_update


# workaround for a rare issue where the device doesn't update it's local
# tunnel IP address, resulting in device dropping incoming packets from the
# aView tunnel IPSec server

ip_addr_string='[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'
dropped_tunnel_dst=$(grep -m 1 "DROP.*SRC=192.168.211.50" /var/log/messages | grep -o "$ip_addr_string" | cut -f2 -d'=')
aview_tunnel_ip=$(/sbin/ipsec status | grep -om1 "aview.*$ip_addr_string ===" | grep -o "$ip_addr_string")

route_exists='y' #assume the route is there, then check
[ "$aview_tunnel_ip" ] && ! ip addr | grep -q "$aview_tunnel_ip" && route_exists='n'
[ "$route_exists" = 'n' ] && reset_tunnel

if [ -n "$dropped_tunnel_dst" ] && [ "$dropped_tunnel_dst" = "$aview_tunnel_ip" ]; then
  reset_tunnel
fi
Notes on the username/password prompt in aView

aView looks at two specific config settings within the device's config profile to determine if it needs to prompt the user for a username/password to send a remote command to the device:

1. VPN -> IPSec -> (Tunnel - in 18.4.54 or greater firmware) -> Accelerated View -> Remote endpoint -> hostname

2. Services -> Remote control -> Enable

If option 1 is set to anything other than remote.accns.com, that triggers aView to show the username/password prompt. If option 2 is de-selected, that also triggers the prompt.