1. 程式人生 > >SNMP網管NAT穿透的問題

SNMP網管NAT穿透的問題

      最近遇到一個問題,SNMP網管不能穿透路由器管理到私網裝置(即使內網中的裝置先使用trap包打洞出來),因此研究了一下NAT機制。

      現在多數路由器都支援NAT轉換,但實現模式不同,因此當你需要NAT穿透的功能時,必須確定路由器使用的NAT模式,不然可能導致你的NAT穿透功能失效。

      先介紹一下,大致有4種類型的NAT:
a) Full Cone 完全圓錐體
因特網上的任何PC,可以傳送資料包到IP:port對;而NAT將這個IP:port對(公網上的)對映到內網的IP:port對(私有網路的)。

b) restricted cone 受限制的圓錐體
NAT外面的PC,只有那些內網中已有PC與之聯絡過的PC,才能通過這個對映進來。例如,我通過內網的一臺機器,IP 地址是10.1.1.1:123,與PC(a)聯絡,則PC(a)也可以通過這個NAT的對映,聯絡到我。而PC(b)則不行。
10.1.1.1:123 ---NAT ---> 202.70.65.78:10000 ------pc(a)
如果pc(b)也傳送資料到202.70.65.78:10000,則不會有資料送到10.1.1.1:123。

c) port restricted 埠受限制的圓錐體
除了b)的條件外,即不但要檢測pc(a)的源IP地址,還要檢測其埠是否與前面也一樣。
10.1.1.1:123 --->NAT---->202.70.65.78:10000 -----> pc(a)[213.123.324.34:8000]

這個NAT只會接收從IP地址 213.123.324.34 且埠為 8000來的資料,讓進入到10.1.1.1:123。

d) symmetric 對稱的NAT
這是關係描述最簡單的一個
10.1.1.1:1000 ----NAT -----> 200.123.123.34:1234 ----pc(a)
10.1.1.1:1000 ----NAT -----> 200.123.123.34:2222----pc(b)
這種NAT的IP:port對,對每個外部的程式,都是不同的。因而每一個外部的程式,都有自己的對映(NAT分配的IP:port對)。而前面的三種,多個外部程式,可能共用一個NAT的IP:port對。

      從上面可以看出,Full Cone(完全圓錐體)型別的NAT模式是最寬鬆的,只要私網有包發出形成埠對映以後,公網的任何IP任何埠都可以向對映的外網IP+埠發包進來,即使你的應用程式編寫時兩端的通訊埠不是完全對稱(即收發埠正好相反),通訊也是沒有問題的,但必須注意的是,現在大多電信運營商使用的路由器其NAT都不是Full cone模式,因此要小心,當你的應用程式設計為不完全對稱埠通訊時,很可能導致你不能穿透NAT。

請看下面的各廠商使用的NAT模式的調查列表:
In the following table the Prim column indicates the primary type of the NAT. A value of Port indicates port restricted, Cone is a full cone, Bad is described in the next section, Symm is Symmetric, and Addr is Address restricted. The Hair column value of Y or N indicates whether the NAT will hairpin media. The Pres column indicates whether the NAT attempts to preserve port numbers. The Sec column indicates the secondary type of the NAT, and a value of Same indicates it is the same as the primary type. The Grp indicates the group that this NAT falls into.
Vendor         Model       Firmware           Prim  Sec  Hair Pres Grp

   Airlink     ASOHO4P     V1.01.0095         Port  Symm  N    Y    B
   Apple       Air Base    V5.2               Cone  Same  Y    N    A
   Belkin      F5D5321     V1.13              Port  Same  N    N    B
   Cisco       IOS                            Port  Symm            -
   Cisco       PIX                            Port  Same            -
   Corega      BAR Pro2    R1.00 Feb 21 2003  Cone                  -
   DLink       DI-604      2.0 Jun 2002       Cone  Same  N    N    B
   DLink       DI-704P     2.61 build 2       Cone  Same  Y    N    A
   Dlink       DI-804      .30, Tue,Jun 24 20 Cone  Same  Y    N    A
   Hawkings    FR24        6.26.02h Build 004 Bad   Same  Y    Y    D
   Linksys     BEFSR11                        Port                  B
   Linksys     BEFSR11 V2  1.42.7, Apr 02 200 Port                  B
   Linksys     BEFSR41     v1.44.2            Port                  B
   Linksys     BEFSR81     2.42.7.1 June 2002 Addr  Same  N    Y    B
   Linksys     BEFSRU31                       Port                  B
   Linksys     BEFSX41     1.44.3, Dec 24 200 Port                  B
   Linksys     BEFVP41     1.41.1, Sep 04 200 Port                  B
   Linksys     BEFW11S4    1.45.3, Jul 1 2003 Port                  B
   Linksys     WRT54G      1.42.2             Port  Symm  N    Y    B
   Linksys     WRT55AG     1.04, Jun.30, 2003 Port                  B
   Linksys     WRV54G      2.03               Port  Same  N    Y    B
   Microsoft   MN-700      02.00.07.0331      Cone  Same  N    N    B
   Netgear     FVS318      V1.4 Jul. 15 2003  Port  Same  N    N    B
   Netgear     RP114       3.26(CD.0) 8/17/20 Cone                  -
   Netgear     RP614       4.00 April 2002    Cone  Same  Y    N    A
   NetworkEver NR041       Version 1.0 Rel 10 Symm  Same  N    N    F
   NetworkEver NR041       Version 1.2 Rel 03 Bad   Same  Y    Y    D
   SMC         2804WBRP-G  v1.00 Oct 14 2003  Port  Symm  Y    Y    B
   SMC         7004ABR     V1.42.003          Port  Same  N    N    B
   SMC         7004VBR     v1.03 Jun 12, 2002 Cone                  -
   Toshiba     WRC-1000    1.07.03a-C024a     Port  Cone  N    Y    B
   umax        ugate-3000  2.06h              Port                  -
   US Robotics USR8003     1.04 08            Cone  Same  N    N    B
   ZOT         BR1014      Unknown            Bad   Same  N    Y    D
   Netgear     MR814v2     Version 5.01       Bad   Same  Y    Y    D
   Cisco       PIX 515     6.3(3)             Port  Same  N    N    B
   Dynex       DX-E401     1.03               Cone  Same  Y    N    A
   Asante      FR1004      R1.13 V2           Cone  Same  N    N    B
   Linksys     BEFSR81     2.42.7.1           Addr Note 1 N    Y    B
   Lanner      BRL-04FPU                      Cone  Same  N    N
   AboCom      CAS3047                        Port  Same  N    Y
   Lemmel      LM-IS6400B                     Port  Same  N    Y

主流供應商裡面,Cisco普遍使用port restricted模式,DLink的幾款倒是使用Full cone模式。


如果要保證穿透,需要把我們的的SNMP網管的下行口都改成162(本來這個是Trap的接收口),極不方便;另外還有一個辦法使用靜態NAT對映,但是路由器配置麻煩。華為公司的IADMS網管提到支援SNMP的NAT穿透,不知道是什麼機制,可有達人知道?

附1 推薦一個Tracert命令替代工具 x-firewalk
      這是一個IP路由trace工具,比Windows系統自帶的Tracert命令強許多,主要是支援IP歸屬地解析(基於純真IP資料庫,注意從x-firewalk官網下載的2006的版本所帶的IP資料庫太舊,有很多錯誤,建議自行到純真網下一個最新的IP資料庫放在x-firewalk.exe旁邊),另外,除了傳統的ICMP探測,它還支援TCP和UDP的探測以及埠掃描。

下面是一個使用例項:
e:/myprogram/vc/firewalk/Release>x-firewalk.exe www.163.net -u -N

Tracing route to www.163.net [202.108.252.146] by UDP
over No.0 netWork interface with ip [10.11.11.177]
over a maximum of 32 hops, timeout in 3000 milliseconds:

  1     *       *       *       Request Timed Out
  2     <10 ms  <10 ms  <10 ms  61.154.14.254     [福建省福州市 電信]
  3     <10 ms  <10 ms  <10 ms  202.109.204.181   [福建省福州市  CZ88.NET]
  4     <10 ms  *       16 ms   202.109.204.6     [福建省福州市  CZ88.NET]
  5     31 ms   15 ms   32 ms   202.97.41.209     [中國電信 骨幹網]
  6     15 ms   47 ms   31 ms   202.97.35.25      [ CZ88.NET ]
  7     32 ms   31 ms   31 ms   202.97.46.38      [中國電信 骨幹網]
  8     156 ms  157 ms  156 ms  219.158.32.1      [北京市 網通]
  9     250 ms  250 ms  250 ms  219.158.13.9      [北京市 網通]
  10    266 ms  250 ms  250 ms  202.96.12.162     [北京市 CHINANET-BJ]
  11    265 ms  250 ms  250 ms  202.106.193.150   [北京市 路由器]
  12    250 ms  *       250 ms  202.106.193.114   [北京市 路由器]
  13    266 ms  250 ms  250 ms  61.148.3.30       [北京市 網通]
  14    *       250 ms  250 ms  202.106.48.129    [北京市 網通]
  15    250 ms  *       250 ms  202.106.48.6      [北京市 網通]
  16    265 ms  250 ms  *       202.108.252.146   [北京市 網通]
  17    250 ms  250 ms  266 ms  202.108.252.146   [北京市 網通]

Trace complete.

     還有一個國外的共享軟體,VisualRoute,也提供類似功能,而且是圖形化的,可以在地圖上顯示路由過程,但裝上後需要註冊什麼的,如果你的電腦不能直接上網的話,它還會多次企圖連線官網,導致電腦狂慢!!


附2:一個後備解決方案 - 路由器虛擬伺服器功能
     這也是現在很多路由器都支援的功能(我使用的ADSL調變解調器附帶的路由器都有這個支援),可以指定某些埠的資料轉發到特定的IP,這個方案主要是可以幫助你把私網上的伺服器釋出到公網上,當路由器沒有采用完全圓錐體的NAT方案時,設定虛擬伺服器的埠轉發可以幫助你達成穿透的目的。

虛擬伺服器

但這個方案也有缺點,就是如果你的NAT對映不是靜態的,或者私網下裝置很多,就很難設定。