Cacti在某些情形下使用會有所限制,但「窮則變,變則通」,這裡將示範當Cacti無法直接與設備連線時,該如何改用其他的方式來順利收集相關的設備資訊。
雖然Cacti軟體本身易學易用,但在某些情形下,使用時會有所限制。例如在無法直接連線至目的設備的狀況下,即使再好用的工具,也會有巧婦難為無米之炊的嘆息。在本文中,將介紹如何在Cacti無法直接與設備連線的狀況下,收集設備的相關資訊。
本次的測試架構如圖1所示,此圖取自Cacti官方網頁。
圖1中的192.168.0.1是Cacti Server,它想要取得192.168.1.2的相關資訊。但192.168.1.2只允許192.168.1.1(同時也是192.168.0.2)存取。192.168.0.1只能單向透過SSH協定連線至192.168.0.2進行遠端管理,在192.168.0.2與192.168.0.1的網路中有防火牆設備攔阻其他網路協定。
|
▲圖1 測試架構圖。 |
解決辦法與相關工具
Cacti可透過SNMP協定或以登入設備執行指令的方式取得設備資訊,但在此架構中,無法直接連線至目的主機,從一般的角度來看,此需求無法達成。
但192.168.0.1既然可以透過SSH協定連線至192.168.0.2,因此能夠試著由192.168.0.1發起SSH連線需求,透過SSH機制將封包轉發至192.168.0.2,並在192.168.0.2上使用Netcat或SOcket CAT等機制,將此連線轉至192.168.1.2的UDP 161通訊埠(Port),從而取得相關的SNMP資訊。
除了Cacti和相關SNMP程式以及必定會用到的SSH程式外,在本文中也會使用下列幾項工具:
·autossh:SSH的自動重新連線程式,避免因為網路不穩定而造成斷線,或是防火牆機制造成連線中斷。
·socat:SOcket CAT,是Multipurpose Relay的程式,可將TCP的封包轉換為UDP的封包並轉發至其他設備,並將對應的Port也做轉換。另外,亦可將TCP的封包轉發至其他Port及設備。
·tcpdump及Wireshark:在此測試中,使用tcpdump來收集封包並以Wireshark觀察封包內容。此工具並非必備,但透過此工具可以更清楚地知道在此架構中封包轉發的情形。
Cacti Server端作業說明
由於會用到Port的轉換,在Linux只有root可以執行1024以下Port的管理,為避免權限問題產生未如預期的結果,因此以下的指令都是在CLI模式下,使用root權限執行。
先在Cacti Server發起一個SSH連線至192.168.0.2,使用的帳號是klting:
該指令中的參數說明如下:
-L [bind_address:]port:host:hostport
-N Do not execute a remote command. This is useful
for just forwarding ports.
-L的功能是將localhost的10000 Port收到的連入需求,轉發至192.168.0.2的10000 Port(SSH只能用在TCP協定,所以此處相關操作均針對TCP Port執行)。
-N的部分指的是登入後不執行任何指令,一般是作為轉發Port時使用。
輸入密碼建立連線後,可使用netstat指令來查看目前連線情形:
針對10000 Port做篩選,並且可以看出SSH已在本機開啟了10000 Port等待連線。
Gateway端作業設定
接著,在Gateway上先確定可透過snmpget取得192.168.1.2的資訊: