2009年3月16日星期一

路由器和UDP广播

不同网段之间的通讯(TCP/UDP)可以通过端口映射来实现。端口映射就是将主机的IP地址的一个端口映射到局域网中一台机器,当用户访问这个IP的这个端口时,服务器自动将请求映射到对应局域网分机(就这么简单)。

广播地址主要有以下四种:
1、受限的广播:受限的广播地址是255.255.255.255,该地址用于主机配置过程中IP数据报的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限广播地址的数据报,这样的数据报只出现在本地网络中。
2、指向网络的广播:指向网络的广播地址是主机号全为1的地址,A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。
3、指向子网的广播:指向子网的广播地址是主机号全为1的地址,作为子网直接广播的IP地址需要知道子网的掩码。如果B类网络128.1的子网掩码是255.255.255.0,则地址128.1.2.255就是对应子网的广播地址。
4、指向所有子网的广播:指向所有子网的广播也需要知道目的网络的子网掩码。这些广播地址的子网号和主机号全为1。如果目的子网掩码是255.255.255.0,那么IP地址128.1.255.255就是一个指向所有子网的广播地址。

路由器默认是不转发UDP广播包的,这样可以净化内网环境。但是某些特殊场合,需要使用udp广播,最常见的是DHCP服务,因为给每个网段都架设DHCP服务器,效率太低。怎么办呢?
cisco有ip广播转发的解决方案:DHCP中继代理和UDP广播转发。
在路由器或者三层交换机接口模式下用个ip helper-address的命令,这个使用DHCP中继代理特性将路由器配置成可以转发DHCP广播
对于udp广播转发,在前面的基础上加个 ip forward protocol udp udp_ports。
对于要禁止转发的udp广播,只需在前面加个no 后面加上端口号
默认情况下 使用ip helper-address,可以转发DHCP、TFTP、DNS、时间、NetBIOS、名称服务器和BOOTP等UDP数据包。

帮助地址(Helper Address)将会阐述网络和路由器如何使用帮助地址来将广播分组转发给另一个网段的服务器和路由器,以及使用帮助地址的目的和情景。

1使用帮助地址
在一个复杂的分级网络中,往往不是所有的客户端都与这些服务器(ftp、dhcp、dns)处于同一个子网中。远程客户端将通过广播方式寻找服务器,但在缺省的情况下,路由器是不会将客户端广播转发到它们的子网之外的。但比如一种情况,因为有些客户端在没有DHCP这类服务的情况下将不能工作,所以管理员不得不面对两种选择:
在所有子网上都放置DHCP和DNS服务器
采用Cisco IOS 的帮助地址特性
在多台电脑上运行例如DHCP和DNS这类服务会产生很多额外的开销和管理问题,所以第一张选择并不是最佳的。在可能的情况下,管理员可以用命令"ip
helper-address"来中继这些主要的用户数据报文协议(UDP)服务请求。
通过使用命令"ip
helper-address",路由器可以被配置为接受对UDP服务的请求广播,然后将该广播以单播传送方式转发给某个具体的IP地址或者路由器可以用定向广播方式向某个网络或者子网转发这些请求。

2配置帮助地址
要配置帮助地址,先要识别将接受UDP服务广播的路由器端口。然后在端口配置模式下,使用命令"ip
helper-address"来定义UDP服务广播应该被转发出去的地址。缺省地,命令"ip
helper-address"将转发表1中所示的8种UDP服务

表1 缺省转发的UDP服务

服务                          端口
Time                          37
TACAS                      49
DNS                          53
BOOTP/DHCP服务器 67
BOOTP/DHCP客户机 68
TFTP                         69
NetBIOS名字服务      137
NetBIOS数据报服务   138

但若公司需要转发的服务请求不再这个表中怎么办?Cisco
IOS提供了全局配置命令"ip forward-protocol"来是管理员能转发除这8种缺省协议之外的任何UDP端口。例如,为了转发UDP端口517,可以使用全局配置命令"ip forward-protocol 517"。"ip forward-protocol"命令不仅可以用来添加UDP端口,还可以用于从缺省的8种协议种减去任何不想要的端口。例如,如果要转发DHCP、TFTP和DNS,但出于某种原因,不转发时间、TACACS和NetBIOS,则可以按照例1来配置路由器。

例1 配置定制的UDP转发端口
RTA (config-if) #ip helper-address 192.168.1.254
RTA (config-if) #exit
RTA (config) #ip forward-protocol udp 517
RTA (config) # no ip forward-protocol udp 37
RTA (config) # no ip forward-protocol udp 49
RTA (config) # no ip forward-protocol udp 137
RTA (config) # no ip forward-protocol udp 138

3帮助地址配置举例
考虑图2中复杂的帮助地址的配置例子。首先,我们想让主机A自动从位于地址172.24.1.9处的DHCP服务器上获得它的IP配置。因为路由器RTA不转发主机A的DHCPDISCOVER广播,所以必须配置路由器RTA以帮助主机A转发广播。之后,配置将要接收主机A的广播的路由器RTA的接口E0,以便它可以将DHCP广播以单点传送的方式中继给DHCP服务器,使用的配置命令如下:
RTA (config) # interface e0
RTA (config-if) # ip helper-address 172.24.1.9

通过这个简单的配置,使用8个缺省UDP端口中任意一个主机A的广播都将被中继到DHCP服务器。例如,如果主机A发送广播型TFTP分组,则该分组将由路由器RTA转发到位于地址172.24.1.9的DHCP服务器。然而,若主机A也需要位于地址172.24.1.5的NetBIOS服务器的服务,这样会出现什么样的情况呢?根据上面的配置,主机A的NetBIOS广播分组也将会被路由器RTA转发到172.24.1.9的DHCP服务器上。显然,这样就无法获得正确的服务。事实上,在这种情况下,只需配置一个可以向网段上所有服务器都中继广播分组的帮助地址即可,配置命令如下:

RTA (config) # interface e0
RTA (config-if) # ip helper-address 172.24.1.255

给服务器网段(172.24.1.255)配置一个定向广播比输入每台有可能应答主机A的UDP广播的服务器的IP地址更有效。
最后,在主机A所在的网段上还有一些设备需要广播到不再服务器机群种的TACACS服务器上。此时,可以通过添加命令"ip helper-address 172.16.1.2"来配置RTA的E0以让它工作。
可以用命令"show ip interface"验证帮助地址的配置是否正确,如例2所示

例2 验证IP帮助地址的配置
RTA# show ip interface e0
Ethernet0 is up, line protocol is up
Interface address is 10.1.1.1/24
Broadcast address is 255.255.255.255
Address determined by setup command
MTU is 1500 bytes
Helper addresses are
172.24.4.255
172.16.1.2
Directed broadcast forwarding is disabled
<Output omitted>

在 例3中,路由器RTA连接服务器机群的E3接口并没有配置帮助地址。然而,输入显示该接口的定向广播转发功能被关闭了。这意味着路由器将不能把逻辑广播172.24.1.255转发为一个物理广播(有FF-FF-FF-FF-FF-FF的第二层地址)

例3 验证定向广播的转发
RTA# show ip interface e3
Ethernet3 is up, line protocol is up
Interface address is 172.24.1.1/24
Broadcast address is 255.255.255.255
Address determined by setup command
MTU is 1500 bytes
Helper addresses is not set
Directed broadcast forwarding is disabled
<Output omitted>

要让服务器机群中的所有节点都收到第二层广播,必须配置接口E3让它转发定向广播,配置如下:
RTA (config) # interface e3
RTA (config-if) # ip directed-broadcast

如此,你就可以实现UDP广播转发了,但是一般的路由器大都没有这项功能,支持如此操作。对于一般的路由器,如果你非要用全网广播,那么一个简单的方法是把路由器降级当作交换机来使用,实现方法也非常简单:WAN闲置,将所有的线都接在LAN口上。