排查服务器1521端口访问失败
2020-04-15湖南曹彩武
■ 湖南 曹彩武
笔者在一家公立医疗机构信息科工作,近年来,医改工已经是医院工作中的重中之重。而利用信息化解决看病难、看病贵的问题也就成了信息科工作的重点之一。
最近,上级有关部门要求笔者单位将所有用户在单位的就诊数据上传到上级互联互通平台,上传方式是通过单位内搭建一台前置服务器,双网卡,一张网卡连接单位内网访问信息系统,另一网卡连接专线进行上传数据。
前置服务器安装Oracle数据库,Oracle数据库安装成功后,发现通过专线访问前置机1521端口失败,为什么会发生这种情况?请看笔者是如何对故障进行排查的。
故障排查
购进服务器一台,安装了Windows Server 2008 R2企业版操作系统,双网卡,前置服务器安装了Oracle数据库。
图1 通过卫计专网telnet 提示连接失败
按照上级有关部门要求,访问相关专网网卡的IP设置成10.66.X.X,子网掩码为255.255.254.0,网关为10.66.25.X。单位内网网卡IP设置 成192.168.0.X,子网掩码为255.255.255.0,网关为192.168.0.X。
前置服务器需在单位信息系统中提取所有病人数据后上传至上级有关部门,所以前置服务器需要同时与单位内网和专网进行通信。于是笔者在前置服务器上添加了两条路由:route add 10.65.X.X mask 255.255.252.0 10.66.25.X。此路由是指访问专网10.65.8.X网段的信息走10.66.25.254这个网关。路由route add 0.0.0.0 mask 255.255.255.0 192.168.0.X是指在访问其他的时则走192.168.0.X这个网关。
路由添加完成后单位内网测试ping 192.168.X.X不丢包,而且telnet 192.168.X.X 1521正常访问。
于是笔者联系相关工程师测试能否与10.66.X.X正常通信,对方反馈说ping 10.66.X.X不丢包,网络通信正常,但是telnet 10.66.X.X 1521显示端口连接失败,无法正常访问,如图1所示。
1521端口是Oracle数据库的默认监听端口。应用系统通过这个端口与Oracle数据建立连接并进行通信。如果此端口无法访问,那么前置服务器上的数据将无法上传到对方的服务器。
什么原因导致单位内网可以正常访问服务器上的1521端口,而通过专网又无法访问呢?
首先,笔者测试了在服务器上telnet 127.0.0.1 1521 发现能正常访问,证明本机的1521端口肯定是开放的。
其次,笔者考虑可能是服务器上的杀毒软件把1521端口封闭了,但是在医院内网和本机上测试没有问题,证明与杀毒软件无关。
进一步检查操作系统自带防火墙是否将1521端口封闭。在防火墙高级设置、入站规则里将其他端口关闭,测试发现关闭后医院内网无法与服务器的任何端口进行通信。于是增加一条访问服务器TCP 1521端口的入站规则。
经测试,增加入站规则后,单位内网仍可正常访问服务器的1521端口。但是通过专网依旧无法与1521端口通信,提示连接失败,问题依旧。难道是网卡的原因?但是物理网卡跟服务器系统的端口没有直接的关系,能够ping通,证明网卡的通信肯定没有问题。
图2 将192.168.0.34改成服务器名hlhtserver
故障解决
经过笔者的再三思考和同事们的集体讨论,分析出问题应该只能出在安装的Oracle软件上面了。
但是Oracle在整个安装过程中始终都没有报错,于是笔者开始检查Oracle的配置文件,打开路径“D:OracleAdministratorproduct11.2.0dbhome_1NETWORKADMINlistener.ora”文件,发现配置文件中:(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.34)(PORT=1521))。
问题找到了!如果配置文件中只有192.168.X.X通过单位内网肯定能访问1521成功了,通过专线就肯定无法访问1521端口了。于是尝试将IP地址改成服务器名,(ADDRESS=(PROTOCOL=TCP)(HOST=hlhtserver)(PORT=1521)),如图2所示。
最后,通过专线telnet 10.66.X.X 1521成功了,至此问题解决。
结语
笔者回头分析,认为有可能是在安装Oracle的时候,专线并没有开通,所以写入配置文件的地址就成了医院内网的IP,当专线开通后,通过专线自然就无法访问1521端口了。笔者把该故障及相应的解决方法记录下来,与大家分享。