If you’re familiar with configuring network gear, you know that a very useful best practice is providing “plain English” descriptions of your device’s ports. For example, on my Cisco SF500-48MP switch port 24 is the “uplink port” to the gateway router. I make this clear in the port’s description:
[code lang=text]
sw01#show interfaces description fa1/2/24
Port Description
——- ———–
fa1/2/24 Uplink to Internet Gateway
[/code]
By doing so, the ifAlias
OID for this interface is set:
[code lang=text]
snmpget -c public -v2c sw01.iachieved.it IF-MIB::ifAlias.24
IF-MIB::ifAlias.24 = STRING: Uplink to Internet Gateway
[/code]
What is particularly nice about this is that a network monitoring tool such as Observium will display the ifAlias
string as a part of the description of the port. Like I said, this becomes very useful, particularly when trying to track down where ports lead to.
In the previous post we installed SNMP on an OpenWrt router and surfaced it in Observium. By default the snmpd package doesn’t present any information for ifAlias
, but we can fix that with snmpset
.
Permitting snmpset Access
snmpset
will make use of the SNMP private
community on our OpenWrt (note: if you were working in a production environment you might consider using SNMP v3 with authentication or at the very least changing your community strings). By default the OpenWrt SNMP configuration only permits use of the private
community from localhost
(i.e., the router itself). We’ll change that to permit access from our private subnet:
Find this section in your /etc/config/snmpd
file
[code lang=text]
config com2sec private
option secname rw
option source localhost
option community private
[/code]
and change the option source
like this:
[code lang=text]
option source 192.168.77.0/24
[/code]
Obviously you’ll use the appropriate subnet in your configuration.
Restart snmpd
on the router with /etc/init.d/snmpd restart
.
Updating ifAlias
To update the appropriate ifAlias
entries we need to see the ifDescr
list. This can be obtained by walking ifDescr
with snmpwalk
:
[code lang=text]
snmpwalk -c public -v2c gw.gw01.chcgil01.iachieved.it ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth1
IF-MIB::ifDescr.3 = STRING: eth0
IF-MIB::ifDescr.5 = STRING: wlan0
IF-MIB::ifDescr.6 = STRING: wlan1
IF-MIB::ifDescr.7 = STRING: br-lan
IF-MIB::ifDescr.8 = STRING: eth0.1
IF-MIB::ifDescr.9 = STRING: eth1.2
IF-MIB::ifDescr.10 = STRING: eth0.100
IF-MIB::ifDescr.11 = STRING: eth1.3
IF-MIB::ifDescr.12 = STRING: eth1.4
[/code]
In our Chicago router example let’s label the three interfaces that are OSPF links to other routers:
eth1.2
is a link togw01.dnvrco01
eth1.3
is a link togw01.atlaga01
eth1.4
is a link togw01.dllstx01
From the output of ifDescr
we can see that
eth1.2
will map toifAlias.9
eth1.3
will map toifAlias.11
eth1.4
will map toifAlias.12
So let’s set those ifAlias
strings!
[code lang=text]
# snmpset -c private -v2c gw.gw01.chcgil01.iachieved.it ifAlias.9 string "OSPF Link to gw01.dnvrco01"
IF-MIB::ifAlias.9 = STRING: OSPF Link to gw01.dnvrco01
# snmpset -c private -v2c gw.gw01.chcgil01.iachieved.it ifAlias.11 string "OSPF Link to gw01.atlaga01"
IF-MIB::ifAlias.11 = STRING: OSPF Link to gw01.atlaga01
# snmpset -c private -v2c gw.gw01.chcgil01.iachieved.it ifAlias.12 string "OSPF Link to gw01.dllstx01"
IF-MIB::ifAlias.12 = STRING: OSPF Link to gw01.dllstx01
[/code]
The Catch
The problem with this approach is its persistence – reboot your router and watch those interface descriptions bite the dust. But no worries, the fix is simple.
Go back to /etc/config/snmpd
and change your private
community to accept interaction from localhost
(in other words, what it was originally!):
[code lang=text]
config com2sec private
option secname rw
option source localhost
option community private
[/code]
Restart snmpd
with /etc/init.d/snmpd restart
.
On the router we’re going to edit /etc/rc.local
and before exit 0
put:
[code lang=text]
# Wait for snmpd to accept connections
/bin/sleep 5
/usr/bin/snmpset -c private -v2c localhost ifAlias.9 string "OSPF Link to gw01.dnvrco01" > /tmp/snmpset.log
/usr/bin/snmpset -c private -v2c localhost ifAlias.11 string "OSPF Link to gw01.atlaga01" >> /tmp/snmpset.log
/usr/bin/snmpset -c private -v2c localhost ifAlias.12 string "OSPF Link to gw01.dllstx01" >> /tmp/snmpset.log
[/code]
I have not optimized the /bin/sleep
at this point, but without it snmpset
will be talking to an snmpd
daemon that isn’t ready. Trust me.
You can now reboot the router and the custom interface descriptions will survive.
Wrapping Up
Why did we go to all the trouble of creating descriptions (aliases) for our OpenWrt interfaces? Again, monitoring tools such as Observium will take those descriptions and apply them to your UI.
At a glance I can quickly see, for example, that eth1.2
is the interface being used for OSPF with gw01.dnvrco01
. That information is incredibly useful when working with dozens (or more) links.