On 3/7/19 8:42 AM, Joe Novak wrote:
Are you using your billing system to build the configs? Can you kind of give a work flow of provisioning a customer, just as a example?



I don't have a billing system doing configs. To provision a SM I just need the MAC of the SM to go out and it goes out blank. The only time SMs get touched ahead of time is for pre-assembly, make sure it's not DOA, and maybe to load whatever firmware version is being used.

A RADIUS entry for a customer looks like this:

dn: cn=00-00-00-00-00-00,ou=radusers,dc=rollernet,dc=us
cn: 00-00-00-00-00-00
dialupAccess: true
objectClass: radiusObjectProfile
objectClass: top
objectClass: radiusprofile
uid: 00-00-00-00-00-00
radiusFramedIPNetmask: 255.255.255.0
userPassword: %RADIUSPASS%
radiusFramedIPAddress: 1.2.3.4
description: %CUSTNAME%
radiusReplyItem: Cambium-Canopy-DLBR += "10000"
radiusReplyItem: Cambium-Canopy-DLBL += "10000"
radiusReplyItem: Cambium-Canopy-DLMB += "20000"
radiusReplyItem: Cambium-Canopy-ULBR += "4000"
radiusReplyItem: Cambium-Canopy-ULBL += "4000"
radiusReplyItem: Cambium-Canopy-ULMB += "8000"
radiusReplyItem: Cambium-Canopy-BCASTMIR += "128"
radiusReplyItem: Cambium-Canopy-HPENABLE += "0"
radiusReplyItem: Cambium-Canopy-HPULCIR += "200"
radiusReplyItem: Cambium-Canopy-HPDLCIR += "200"
radiusReplyItem: Cambium-Canopy-Gateway += "1.2.3.4"
radiusReplyItem: Cambium-Canopy-VLMGVID += "10"
radiusReplyItem: Cambium-Canopy-VLIGVID += "%SM_VLAN%"
radiusReplyItem: Cambium-Canopy-VLLEARNEN += "0"
radiusReplyItem: Cambium-Canopy-ConfigFileImportUrl += "http://configs.example.com/pmp/";

Items in %xx% are variables, and 00-00-00-00-00-00 would be the real MAC of the SM. I use a different password in RADIUS per customer, but that's not mandatory. Descriptions for all the Cambium-Canopy-X attributes are in the docs. But anything in RADIUS can also be set in the config file. I set them ahead of time this way so that if the config file fails to load for any reason at least the SM has an IP address (of course PMP has the proxy thing too but it needs working IP somehow to load config files). Set speeds to whatever you use, these are just random.

No experience with NAT mode, I use QinQ and the SMs are just bridges. So for example an AP or site may have outer VLAN 200 (also set in the SM config below as providerVID) and all customers under it would have inner VLAN 201, 202, 203, etc. where you'd set Cambium-Canopy-VLIGVID += "201". That's a network design choice that everyone will have a different opinion about, this is just how I do it because it works best for me.

Given this the SM will ask for the file "http://configs.example.com/pmp/000000000000.cfg"; when it starts up.

Or DHCP (cisco):

ip dhcp pool pmp-icc
 network 10.0.0.0 255.255.255.0
 default-router 10.0.0.1
 option 66 ascii "http://configs.example.com/pmp/";

As far as configs, I think someone else said just export the config from an SM after setting it up the way you want it and trim it down. Anything you don't explicitly specify in the config file will just be whatever its default is. I also always have the SM reset to defaults every time it boots so it's always pulling the central config.

Like if you want to do multiple color codes I would recommend setting them in a test SM and then exporting that config to get the format right the first time. Any little mistake in the config file is failure, like forgetting to have or not have a comma in the right place.

A config file template looks like this (edited to remove info specific to me with XXX for strings or 1.2.3.4 for IPs):

{
 "userParameters": {
  "radioConfig": {
   "installationColorCode": 1,
   "factoryResetOnDefaultPlug": 1,
   "regionCode": 25
  },
  "smRadioConfig": {
   "apSelection": 0,
   "colorCodeList": [
    {
     "colorCode": 1,
     "priority": 1
    }
   ]
  },
  "authenticationConfig": {
   "whispWebUserAccessMode": 2,
   "allowRejectThenLocal": 1,
   "accounts": [
    {
     "userName": "XXX",
     "level": 3,
     "readOnly": false,
     "passwordEncrypted": "XXX"
    }
   ],
   "authKeyOption": 0
  },
  "smAuthenticationConfig": {
   "useRealm": 0,
   "authOuterId": "anonymous",
   "authenticationEnforce": 1,
   "phase1": 0,
   "phase2": 2,
   "authUsername": "00-00-00-00-00-00",
   "authPasswordEncrypted": "%RADIUSCRYPTPW%",
   "certificates": [
    "XXX",
    "XXX"
   ]
  },
  "smSpectrumAnalysisConfig": {
   "spectrumAnalysisOnBoot": 0
  },
  "snmpConfig": {
   "snmpPort": 161,
   "commStringROnly": "XXX",
   "snmpMibPerm": 0,
   "commStringRW": "XXX",
   "snmpTrapAddresses": [
    "1.2.3.4",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0",
    "0.0.0.0"
   ],
   "snmpTrapPort": 162,
   "trapDomainNameAppend": 0,
   "snmpv2cEnable": 1,
   "snmpIpAccessFilter": [
    {
     "address": "1.2.3.4",
     "netmask": 32
    }
   ]
  },
  "smNetworkConfig": {
   "networkAccess": 0,
   "enable8023link": 1
  },
  "location": {
   "siteName": "%CUSTIDENT%",
   "siteLocation": "%CUSTNAME%",
   "siteInfoViewable": 1,
   "siteContact": "XXX",
   "latitude": "%GEO_LAT%",
   "longitude": "%GEO_LONG%",
   "height": %GEO_AGL%
  },
  "networkConfig": {
   "tftpStatus": 1,
   "telnetStatus": 1,
   "sessionTimeout": 600,
   "webAutoUpdate": 3,
   "textSecurityBanner": "XXX",
   "lldpBroadcastEnable": 0,
   "enableSecurityBanner": 0,
   "snmpStatus": 1,
   "packetFilterSmb": 0,
   "lanDhcpState": 0,
   "dnsIpState": 1,
   "dnsPrimaryMgmtIP": "1.2.3.4",
   "dnsAlternateMgmtIP": "1.2.3.4",
   "dnsMgmtDomainName": "XXX",
   "webAccess": 0,
   "ftpStatus": 1,
   "acceptSecurityBanner": 1,
   "lanIp": "169.254.1.1",
   "lanMask": "255.255.0.0",
   "lanGateway": "169.254.0.0"
  },
  "rfSecurityConfig": {
   "encryptionConfig": 1
  },
  "smSyslogConfig": {
   "syslogServerApPreferred": 1,
   "syslogSMXmitControl": 3
  },
  "smNetworkSecurityConfig": {
   "ethAccessEnable": 1
  },
  "syslogConfig": {
   "syslogMinLevelApPreferred": 1,
   "syslogMinLevel": 6
  },
  "vlanConfig": {
   "dynamicLearning": 0,
   "vlanAcceptQinQFrames": 0,
   "providerVID": 200,
   "agingTimeout": 25,
   "vlanPortType": 1,
   "frameType": 0
  },
  "cnMaestroConfig": {
   "cnMaestroUrl": "https://cnmaestro.example.com";,
   "cnMaestroEnable": 1
  }
 },
 "cfgFileString": "Canopy configuration file",
 "cfgFileVersion": "1.0",
 "configFileParameters": {
     "rebootIfRequired": true,
     "setToDefaults": true
 }
}


The customer specific variables would get filled in and then saved as 000000000000.cfg in the location where the SMs can read it from.

That's basically it. Getting RADIUS EAP up and running can be hard, but I already had that. If I didn't already have a RADIUS/LDAP infrastructure I'd probably start with DHCP option 66. I think at some point option 66 wasn't supported.

You can make these into templates, manually fill them, process through through sed, whatever floats your boat. I set all this up before cnMaestro was a thing. I do use the on premise version now for graphs and the pretty map, and to update firmware, but not for configs.

Anyway that's what works for me and it's great because we never have to touch SMs for provisioning, since I sub out installs they can just hang, aim, and leave.


--
AF mailing list
[email protected]
http://af.afmug.com/mailman/listinfo/af_af.afmug.com

Reply via email to