最近遇到一个问题,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,也提供类似功能,而且是图形化的,可以在地图上显示路由过程,但装上后需要注册什么的,如果你的电脑不能直接上网的话,它还会多次企图连接官网,导致电脑狂慢!!
我整理了一个x-firewalk + 最新的IP数据库放到CSDN下载频道。
附2:一个后备解决方案 - 路由器虚拟服务器功能
这也是现在很多路由器都支持的功能(我使用的ADSL调制解调器附带的路由器都有这个支持),可以指定某些端口的数据转发到特定的IP,这个方案主要是可以帮助你把私网上的服务器发布到公网上,当路由器没有采用完全圆锥体的NAT方案时,设置虚拟服务器的端口转发可以帮助你达成穿透的目的。
但这个方案也有缺点,就是如果你的NAT映射不是静态的,或者私网下设备很多,就很难设置。
分享到:
相关推荐
SNMP网管系统开发、snmp协议介绍、开发流程等
基于ARM和LINUX的SNMP网管系统的实现 基于ARM和LINUX的SNMP网管系统的实现 基于ARM和LINUX的SNMP网管系统的实现 基于ARM和LINUX的SNMP网管系统的实现
snmp网管软件
一套vc开发库,可以用来开发snmp的网管系统,使开发人员提高效率,把更过精力用于系统逻辑方面,而不用关心snmp报文的发送和接收。
对基于MIB编译的SNMP网管系统进行了系统设计,根据MIB编译器生成的Java目标代码设计了SNMP网管系统中的通信模块,并对PDU处理模块和本地MIB缓存进行的详细的分析和设计,并根据设计实现了SNMP通信模块中的部分功能,...
录 <br>第1章 绪论 1 1.1 网络管理系统重要性及发展现状 1 1.2 ...SNMP的网管系统实现框架 52 5.3 系统功能设计 53 5.4 网络管理系统实现 56 5.4.1 用户控制 56 5.4.2 拓扑发现 56 5.4.3 端口...
TR-069与SNMP网管协议比较与研究,陈焘,,TR-069协议是Broadband Forum1(宽带论坛)专门制定了适用于远程终端管理技术的网管协议。相比较于传统的SNMP协议来讲,SNMP协议是利用代理
LINUX环境下用C++实现SNMP网管协议(作者:耶健)
这是一个基于snmp网管系统的硕士生论文 仅供参考
路由器基本维护-SNMP网管的配置
sugarnmstool 属于SNMP网管软件的一个小工具,不建议企业网中使用
一、 Net-SNMP的编译及安装 二、 MIB文件的编写 三、 将MIB文件转换成.c和.h 四、 Agent代理工程 五、 Trap
NET-SNMP网管代理在ARM9上实现的技术.pdf
基于SNMP的网管程序设计,希望对自主学习的同学们有所帮助
net snmp的源码,最新版,简单网络管理协议
在SNMP中,SNMP管理模型包含四个组成部分: 1)SNMP NMS:SNMP管理站,利用SNMP协议对网络设备进行管理和监控的系统; 2)SNMP Agent:SNMP代理,是运行在被管设备上的软件模块,用于维护被管设备的信息数据(即MIB),...
然后设计并实现了一个网络管理系统基于SNMP用VC++和SNMP++ API。该系统由设备性能管理模块,网络故障管理模块,和网络拓扑检测模块。它直观地显示网络设备的运行状态,并通知网络管理系统管理员的故障,使网络管理员...
NET-SNMP是最出名的SNMP网管系统的开发包,提供了几乎所有SNMP网管开发所需要的资源 1 SNMP API。封装SNMP协议和网络接口细节。提供了方便调用的SNMP操作接口 2 MIB管理。提供了所有的典型MIB库。并可以将MIB库映射...
基于SNMP_AGENT_的网管系统开发
net-snmp 的基本开发流程。 包括开发环境,开发方法等。 供 SNMP 网管开发参考。