7. Management Target Translation in Proxy Forwarder Applications
Proxy Forwarder-Anwendungen führen die Übersetzung von Management Targets bei der Weiterleitung von SNMP-Nachrichten durch. Diese Übersetzung umfasst die Zuordnung eingehender Nachrichtenparameter (contextEngineID, contextName, securityModel, securityName, securityLevel) zu ausgehenden Nachrichtenparametern, die für die Ziel-SNMP-Engine geeignet sind.
Die snmpProxyTable definiert die Übersetzungsregeln, die von Proxy Forwarders verwendet werden.
7.1. Request Forwarding
Request Forwarding umfasst den Empfang einer Befehlsanfrage von einem Command Generator, die Übersetzung der Anfrageparameter und die Weiterleitung der Anfrage an einen Command Responder.
7.1.1. Verarbeiten einer eingehenden Anfrage
Wenn ein Proxy Forwarder eine Anfrage empfängt:
-
Extrahiert die eingehenden Parameter aus der empfangenen Nachricht:
- contextEngineID
- contextName
- securityModel
- securityName
- securityLevel
- PDU-Typ
-
Sucht in der snmpProxyTable unter Verwendung dieser Parameter als Schlüssel. Sucht speziell nach einem Eintrag, bei dem:
- snmpProxyType read(1) für Read-Class-PDUs (Get, GetNext, GetBulk) oder write(2) für Write-Class-PDUs (Set) ist
- snmpProxyContextEngineID mit der eingehenden contextEngineID übereinstimmt
- snmpProxyContextName mit dem eingehenden contextName übereinstimmt
- snmpProxyTargetParamsIn Target-Parameter referenziert, die mit den eingehenden Sicherheitsparametern übereinstimmen
-
Falls kein passender Eintrag gefunden wird:
- Eine Fehlerantwort erzeugen, die anzeigt, dass die Anfrage nicht weitergeleitet werden kann.
- Der spezifische Fehler hängt von der SNMP-Version und den Umständen ab (z.B. authorizationError, genErr).
-
Falls ein passender Eintrag gefunden wird:
- Den snmpProxySingleTargetOut- oder snmpProxyMultipleTargetOut-Wert extrahieren.
7.1.2. Weiterleiten der Anfrage
Nach dem Finden eines passenden snmpProxyTable-Eintrags:
Single-Target-Weiterleitung
Falls snmpProxySingleTargetOut angegeben ist:
-
Sucht in der snmpTargetAddrTable unter Verwendung von snmpProxySingleTargetOut als snmpTargetAddrName.
-
Extrahiert die Zieladressinformationen:
- snmpTargetAddrTDomain (Transport-Domain)
- snmpTargetAddrTAddress (Transportadresse)
- snmpTargetAddrParams (Referenz auf snmpTargetParamsTable)
-
Sucht in der snmpTargetParamsTable unter Verwendung von snmpTargetAddrParams.
-
Extrahiert die Ziel-Sicherheitsparameter:
- snmpTargetParamsMPModel (Message Processing Model)
- snmpTargetParamsSecurityModel
- snmpTargetParamsSecurityName
- snmpTargetParamsSecurityLevel
-
Bestimmt den Zielkontext:
- Falls snmpProxyContextEngineID leer ist, verwendet die eingehende contextEngineID.
- Ansonsten verwendet snmpProxyContextEngineID.
- Ähnlich für snmpProxyContextName.
-
Übersetzt die PDU falls notwendig:
- Falls die eingehenden und ausgehenden SNMP-Versionen unterschiedlich sind, übersetzt PDU-Format und Fehlercodes.
- Für SNMPv1 zu SNMPv2: Fehlercodes zuordnen, Trap-Formate konvertieren.
- Für SNMPv2 zu SNMPv1: Fehlercodes zuordnen (z.B. noAccess → genErr), Exception-Werte behandeln.
-
Leitet die Anfrage weiter unter Verwendung der send PDU-Primitive des Message-Processing-Subsystems mit den Zielparametern.
Multiple-Target-Weiterleitung
Falls snmpProxyMultipleTargetOut angegeben ist:
-
Durchsucht die snmpTargetAddrTable nach allen Einträgen, bei denen snmpTargetAddrTagList das in snmpProxyMultipleTargetOut angegebene Tag enthält.
-
Für jede passende Zieladresse:
- Befolgt die Schritte 2-7 der Single-Target-Weiterleitung.
- Beachtet, dass die ursprüngliche Anfrage dupliziert und an mehrere Zieladressen gesendet wird.
-
Antwortbehandlung für mehrere Ziele:
- Multiple-Target-Weiterleitung wird typischerweise nur für Leseoperationen verwendet.
- Der Proxy muss möglicherweise Antworten aggregieren oder die erste erfolgreiche Antwort zurückgeben.
- Das spezifische Verhalten ist implementierungsabhängig.
7.1.3. Weiterleiten der Antwort
Wenn der Proxy Forwarder eine Antwort vom Ziel-Command-Responder empfängt:
-
Übersetzt die Antwort-PDU falls notwendig, um dem vom ursprünglichen Anforderer erwarteten Format zu entsprechen.
-
Ordnet die contextEngineID und contextName zurück zu den vom ursprünglichen Anforderer erwarteten Werten.
-
Gibt die Antwort zurück unter Verwendung der return response PDU-Primitive des Message-Processing-Subsystems.
7.2. Notification Forwarding
Notification Forwarding umfasst den Empfang einer Benachrichtigung von einem Notification Originator und deren Weiterleitung an einen oder mehrere Notification Receiver.
7.2.1. Verarbeiten einer eingehenden Benachrichtigung
Wenn ein Proxy Forwarder eine Benachrichtigung empfängt:
-
Extrahiert die eingehenden Parameter:
- contextEngineID
- contextName
- securityModel
- securityName
- securityLevel
- Benachrichtigungstyp (Trap oder Inform)
-
Sucht in der snmpProxyTable unter Verwendung dieser Parameter. Sucht nach einem Eintrag, bei dem:
- snmpProxyType trap(3) für Trap-Benachrichtigungen oder inform(4) für Inform-Benachrichtigungen ist
- snmpProxyContextEngineID mit der eingehenden contextEngineID übereinstimmt (oder leer ist, um mit beliebigen zu matchen)
- snmpProxyContextName mit dem eingehenden contextName übereinstimmt (oder leer ist, um mit beliebigen zu matchen)
- snmpProxyTargetParamsIn Target-Parameter referenziert, die mit den eingehenden Sicherheitsparametern übereinstimmen (oder leer ist, um mit beliebigen zu matchen)
-
Falls kein passender Eintrag gefunden wird:
- Die Benachrichtigung wird nicht weitergeleitet.
- Der Proxy kann dieses Ereignis lokal protokollieren.
-
Falls ein passender Eintrag gefunden wird:
- Den snmpProxyMultipleTargetOut-Wert extrahieren (Benachrichtigungsweiterleitung verwendet immer Multiple-Target-Weiterleitung).
7.2.2. Weiterleiten der Benachrichtigung
Nach dem Finden eines passenden snmpProxyTable-Eintrags:
-
Durchsucht die snmpTargetAddrTable nach allen Einträgen, bei denen snmpTargetAddrTagList das in snmpProxyMultipleTargetOut angegebene Tag enthält.
-
Für jede passende Zieladresse:
a. Sucht die snmpTargetAddrParams in der snmpTargetParamsTable.
b. Extrahiert die Zielparameter.
c. Bestimmt, ob als Trap oder Inform gesendet werden soll, basierend auf der snmpNotifyTable (falls referenziert) oder verwendet den gleichen Typ wie die eingehende Benachrichtigung.
d. Übersetzt die Benachrichtigungs-PDU falls notwendig:
- SNMPv1-Trap zu SNMPv2-Trap: PDU-Format konvertieren, sysUpTime.0 und snmpTrapOID.0 hinzufügen.
- SNMPv2-Trap zu SNMPv1-Trap: PDU-Format konvertieren, enterprise, agent-addr, generic-trap, specific-trap extrahieren.
e. Leitet die Benachrichtigung weiter unter Verwendung der send PDU-Primitive des Message-Processing-Subsystems.
-
Falls die ausgehende Benachrichtigung ein Inform-Request ist:
- Auf eine Antwort von jedem Ziel warten.
- Falls die eingehende Benachrichtigung ebenfalls ein Inform war, Antworten aggregieren.
- Eine Antwort an den ursprünglichen Notification Originator erst zurückgeben, nachdem Antworten von allen (oder einer konfigurierten Teilmenge von) Zielen empfangen wurden.
Übersetzungsbeispiele
Beispiel 1: SNMPv3 zu SNMPv1 Anfrage-Übersetzung
Eingehende Anfrage:
- contextEngineID: 0x80001F8880
- contextName: "publicView"
- securityModel: 3 (USM)
- securityName: "admin"
- securityLevel: authPriv
- PDU: GetRequest
snmpProxyTable-Eintrag:
- snmpProxyType: read(1)
- snmpProxyContextEngineID: 0x80001F8880
- snmpProxyContextName: "publicView"
- snmpProxyTargetParamsIn: "snmpv3Params"
- snmpProxySingleTargetOut: "legacyDevice"
snmpTargetAddrTable-Eintrag (legacyDevice):
- snmpTargetAddrTDomain: snmpUDPDomain
- snmpTargetAddrTAddress: 192.0.2.10:161
- snmpTargetAddrParams: "snmpv1Params"
snmpTargetParamsTable-Eintrag (snmpv1Params):
- snmpTargetParamsMPModel: 0 (SNMPv1)
- snmpTargetParamsSecurityModel: 1 (SNMPv1)
- snmpTargetParamsSecurityName: "public"
- snmpTargetParamsSecurityLevel: noAuthNoPriv
Ausgehende Anfrage:
- Transport: UDP an 192.0.2.10:161
- SNMP-Version: SNMPv1
- Community: "public"
- PDU: GetRequest (gleiche variable-bindings)
Antwort-Übersetzung:
- Eingehende SNMPv1-Antwort wird zurück ins SNMPv3-Format übersetzt.
- Antwort wird unter Verwendung von USM verschlüsselt und authentifiziert.
- Zurückgegeben an den ursprünglichen Anforderer.
Beispiel 2: SNMPv1-Trap zu SNMPv2-Trap-Übersetzung
Eingehender SNMPv1-Trap:
- Community: "public"
- enterprise: 1.3.6.1.4.1.9
- agent-addr: 192.0.2.1
- generic-trap: linkDown(2)
- specific-trap: 0
- time-stamp: 12345
snmpProxyTable-Eintrag:
- snmpProxyType: trap(3)
- snmpProxyContextEngineID: "" (mit beliebigen matchen)
- snmpProxyContextName: "" (mit beliebigen matchen)
- snmpProxyTargetParamsIn: "" (mit beliebigen matchen)
- snmpProxyMultipleTargetOut: "snmpv2Targets"
snmpTargetAddrTable-Einträge mit Tag "snmpv2Targets": Mehrere Einträge mit SNMPv2c- oder SNMPv3-Parametern.
Ausgehende SNMPv2/v3-Traps:
- snmpTrapOID.0: 1.3.6.1.6.3.1.1.5.3 (linkDown)
- sysUpTime.0: 12345
- Zusätzliche variable-bindings aus dem ursprünglichen Trap.
Besondere Überlegungen
Kontextübersetzung
Die snmpProxyTable ermöglicht Kontextübersetzung:
- Eine leere snmpProxyContextEngineID oder snmpProxyContextName im Tabelleneintrag bedeutet "verwende den eingehenden Wert."
- Ein nicht-leerer Wert bedeutet "ordne den eingehenden Kontext diesem ausgehenden Kontext zu."
Dies ermöglicht es dem Proxy, mehrere eingehende Kontexte einem einzelnen ausgehenden Kontext zuzuordnen oder umgekehrt.
Verhinderung von Sicherheitsherabstufung
Bei der Übersetzung von einem höheren Sicherheitslevel zu einem niedrigeren (z.B. SNMPv3 authPriv zu SNMPv1 noAuthNoPriv) sollte der Proxy:
- Die Sicherheitsherabstufung protokollieren für Audit-Zwecke.
- Zusätzliche Zugriffskontrollen anwenden, um zu begrenzen, welche Operationen herabgestuft werden können.
- Erwägen, den Transport zu verschlüsseln (z.B. unter Verwendung von IPsec oder TLS), um die reduzierte SNMP-Layer-Sicherheit zu kompensieren.
Fehlerbehandlung
Proxys müssen Fehler sorgfältig behandeln:
- Übersetzungsfehler: Falls eine PDU nicht übersetzt werden kann (z.B. SNMPv2-Exception-Werte in SNMPv1), einen entsprechenden Fehler zurückgeben.
- Weiterleitungsfehler: Falls das Ziel nicht erreichbar ist, einen Timeout oder Netzwerkfehler an den ursprünglichen Anforderer zurückgeben.
- Antwort-Übersetzungsfehler: Falls eine Antwort nicht zurück übersetzt werden kann, den Fehler protokollieren und einen genErr an den ursprünglichen Anforderer zurückgeben.
Leistungsoptimierung
Proxy-Weiterleitung kann optimiert werden durch:
- Caching von Tabellen-Lookups: Cache snmpProxyTable, snmpTargetAddrTable und snmpTargetParamsTable-Lookups für häufig verwendete Pfade.
- Vorkompilierung von Regeln: Tabelleneinträge zur Konfigurationszeit in ein optimiertes internes Format konvertieren.
- Connection Pooling: Für TCP-basierte Transporte persistente Verbindungen zu häufig zugegriffenen Zielen aufrechterhalten.