在路由器内用脚本实现网络拨号


网络拨号备份是网络解决方案中的一种非常实用的方法,具有很高的性能价格比 。主流路由器内IOS提供了一种脚本语言,可以根据不同的需求进行灵活的网络配置 。这使我们可以用脚本语言解决特定情况下的特定问题,笔者利用脚本语言解决了拨号备份这个比较复杂的问题,并总结了一种通用的方法来解决此类问题,现在将这种方法介绍给大家, 以便共同交流 。
问题的提出
笔者所在的单位设计了一个拨号备份的网络方案,所用的拨号客户端路由器为Cisco 1720和Motorola的3225、3265的调制解调器,中心的拨号服务器为Cisco 3640 ,内置异步Modem 。设计要求当DDN专线出现网络故障,需要传输数据时自动启动拨号备份,在180秒内没有数据传输时自动挂线 。将设备正确连接,路由器和调制解调器进行常规配置后发现: 使用Usr_courier 型号的Modem 工作完全正常,而使用Motorola 3265的 Modem出现不拨号现象,使用Motorola 3225不但出现不拨号问题,而且应答来电 。
原因分析
如何使客户端Motorola的3225、3265 的两种调制解调器与中心Cisco路由器内置的Modem协调工作?Cisco 路由器默认配置只支持下面的调制解调器型号: Codex_3260、Usr_courier、Usr_sportster等17个型号 。其余的以Default类型对待,不与此标准兼容的调制解调器就不能正常工作 。通过AT配置命令集的对比,发现Motorola的3225、3265 的两种调制解调器与Codex_3260或Default类型要害参数有部分差异,所以自动匹配的配置方法在这种情况下就不能正常工作 。现在考虑采用一种比较灵活的方法来解决这个问题: 根据Modem AT配置命令集,在路由器内编写chat-script拨号脚本,使拨号的命令序列和Modem拨号控制命令序列完全匹配,从而解决此类Modem不兼容的问题 。
解决方法
1. 编写客户端的脚本(以Cisco IOS 12.0版本为例) 。
脚本内容为:
chat-script call “ ”“ATS54=03HS0=0&D3” OK “ATDT T” TIMEOUT 60 “CONNECT” d
这里“ATS54=03H”用来设置Modem 接收到 DTR变低后挂机;“S0=0”表示来电不应答;“&D3”表示流量控制方式为 hardware;“OK”意味着Modem响应命令序列后反馈“OK”; “ATDT T”为拨叫端口内由dialer map设置的电话号码;“TIMEOUT 60”表示等待Modem拨号握手成功,超过60秒,则超时; “CONNECT”意味着等待的反馈信息内容为“CONNECT”; “d”参数表示将命令方式转换为数据传输方式 。
2. 挂线时用下面的脚本解决客户端调制解调器待机时不应答问题 。
chat-script reset “”“ATS0=0” OK d
也可以用:modemcap entry modem_3225:FD=&fs0=0
这里增加一种Modem: modem_3225 。“FD=&f”表示恢复默认参数; “s0=0”表示将默认参数由应答方式改为不应答,这样做的目的是当挂线时,路由器发送的恢复出厂参数命令序列内自动携带了应答方式的设置 。
3. 测试脚本 。
语法:#start-chat 脚本名 端口类型 端口号
例如:
#termino monitor ;显示系统信息
#debug chat ;打开脚本调试
#start-chat reset tty 1
#start-chat call tty 1
4. 拨号客户端有关拨号的配置文档如下:
chat-script call “ ”“ATS54=03HS0=0&D3” OK “ATDT T” TIMEOUT 60 “CONNECT” d
modemcap entry modem_3225:FD=&fs0=0
chat-script reset “”“ATS0=0” OK d
interface Serial0
physical-layer async
no ip address
no ip directed-broadcast
encapsulation ppp
dialer in-band
dialer rotary-group 0
!
interface Dialer0
ip address 192.16.251.25 255.255.255.0
no ip directed-broadcast
encapsulation ppp
ppp authentication chap
dialer in-band

推荐阅读