Server-centric message routing#

In some use-cases it may be desirable to perform peer classification at the server side and let client(s) re-using the outcome of server classification. The example configuration explains server-based classification design.

For more information please refer to the client configuration documentation.

Server configuration#

Server is configured to:

  • listen on UDP socket at localhost

  • respond to queries performed over SNMPv2c

  • serve two distinct SNMP community names

  • forward all queries to snmpfwd client through an unencrypted trunk connection running in client mode

#
# SNMP forwarder: Agent part configuration
#

config-version: 2
program-name: snmpfwd-server

snmp-credentials-group {
  snmp-transport-domain: 1.3.6.1.6.1.1.100
  snmp-bind-address: 127.0.0.1:1161

  snmp-engine-id: 0x0102030405070809

  snmp-community-name: public
  snmp-security-name: public
  snmp-security-model: 2
  snmp-security-level: 1

  customer-1 {
    snmp-community-name: public-123
    snmp-security-name: public-123

    snmp-credentials-id: customer-1
  }

  customer-2 {
    snmp-community-name: public-321
    snmp-security-name: public-321

    snmp-credentials-id: customer-2
  }
}

context-group {
  snmp-context-engine-id-pattern: .*?
  snmp-context-name-pattern: .*?

  snmp-context-id: any-context
}

content-group {
  snmp-pdu-type-pattern: .*?
  snmp-pdu-oid-prefix-pattern-list: .*?

  snmp-content-id: any-content
}

peers-group {
  snmp-transport-domain: 1.3.6.1.6.1.1.100
  snmp-bind-address-pattern-list: .*?
  snmp-peer-address-pattern-list: .*?

  snmp-peer-id: 100
}

trunking-group {
  trunk-bind-address: 127.0.0.1
  trunk-peer-address: 127.0.0.1:30301
  trunk-ping-period: 60
  trunk-connection-mode: client

  trunk-id: trunk-1
}

routing-map {
  matching-snmp-context-id-list: any-context
  matching-snmp-content-id-list: any-content

  matching-snmp-credentials-id-list: customer-1 customer-2
  matching-snmp-peer-id-list: 100

  using-trunk-id-list: trunk-1
}

Download server configuration file.

Client configuration#

Client is configured to:

  • listen on server-mode unencrypted trunk connection

  • process all incoming SNMP messages in the same way

  • route inbound SNMP PDUs into either of two backend SNMP agents (at demo.pysnmp.com) chosen based on server-classification-id option.

#
# SNMP forwarder: Manager part configuration
#

config-version: 2
program-name: snmpfwd-client

peers-group {
  snmp-engine-id: 0x0102030405070809

  snmp-transport-domain: 1.3.6.1.6.1.1.1
  snmp-bind-address: 0.0.0.0:0

  # time out SNMP request in 1 second
  snmp-peer-timeout: 100
  snmp-peer-retries: 0

  snmp-community-name: public
  snmp-security-name: public
  snmp-security-model: 2
  snmp-security-level: 1

  agent-1 {
    snmp-peer-address: 104.236.166.95:161
    snmp-peer-id: snmplabs-agent-1
  }

  agent-2 {
    snmp-peer-address: 104.236.166.95:1161
    snmp-peer-id: snmplabs-agent-2
  }
}

trunking-group {
  trunk-bind-address: 127.0.0.1:30301
  trunk-ping-period: 60
  trunk-connection-mode: server

  trunk-id: <discover>
}

original-snmp-peer-info-group {
  orig-snmp-bind-address-pattern: .*?
  orig-snmp-context-name-pattern: .*?

  orig-snmp-pdu-type-pattern: .*?
  orig-snmp-oid-prefix-pattern: .*?

  orig-snmp-engine-id-pattern: .*?
  orig-snmp-context-engine-id-pattern: .*?

  orig-snmp-transport-domain-pattern: .*?
  orig-snmp-peer-address-pattern: .*?

  orig-snmp-security-level-pattern: .*?

  orig-snmp-security-name-pattern: .*?
  orig-snmp-security-model-pattern: .*?

  orig-snmp-peer-id: any-manager
}

server-classification-group {
  server-snmp-context-id-pattern: .*?
  server-snmp-content-id-pattern: .*?
  server-snmp-peer-id-pattern: .*?

  customer-1 {
    server-snmp-credentials-id-pattern: customer-1

    server-classification-id: customer-1-classification
  }

  customer-2 {
    server-snmp-credentials-id-pattern: customer-2

    server-classification-id: customer-2-classification
  }
}

routing-map {
  matching-trunk-id-list: trunk-1
  matching-orig-snmp-peer-id-list: any-manager

  agent-1 {
    matching-server-classification-id-list: customer-1-classification

    using-snmp-peer-id-list: snmplabs-agent-1
  }

  agent-2 {
    matching-server-classification-id-list: customer-2-classification

    using-snmp-peer-id-list: snmplabs-agent-2
  }
}

Download client configuration file.