一个Oracle监听问题的网络排查
今天在梳理一套环境的时候,发现了一个奇怪的问题,应用端连接正常,但是服务端却有些问题。
假设服务端的IP地址为10.129.128.57
使用tnsping本机的服务,竟然抛出了监听的问题。
$ tnsping s2gamebbs
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = s2gamebbs.test.com)(PORT = 1528)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = gamebbs)))
TNS-12541: TNS:no listener
是监听没启动吗,查看监听进程存在,确实是启动了,但是查看监听状态却抛出了错误
LSNRCTL> status listener_1528
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=s2gamebbs.test.com)(PORT=1528)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
这个问题立马勾起了我的兴趣,我使用域名解析的方式查看是没有问题的。
$ ping `hostname`
PING s2gamebbs.cyou.com (10.129.128.57) 56(84) bytes of data.
64 bytes from s2gamebbs.test.com (10.129.128.57): icmp_seq=1 ttl=64 time=0.059 ms
。。。
^C
但是ping服务器的IP是有问题的。
# ping 10.129.128.57
PING 10.129.128.57 (10.129.128.57) 56(84) bytes of data.
From 10.129.128.57 icmp_seq=1 Destination Port Unreachable
From 10.129.128.57 icmp_seq=2 Destination Port Unreachable
如此一来,这个问题就有趣了,我对比了如下的几种测试场景。
# telnet 10.129.128.57 1528
Trying 10.129.128.57...
telnet: connect to address 10.129.128.57: Connection refused
# telnet 127.0.0.1 1528
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
# telnet `hostname` 1528
Trying 10.129.128.57...
telnet: connect to address 10.129.128.57: Connection refused
同时做了strace调试,也没有看到明显的问题,于是我怀疑是网络层面解析的问题,/etc/hosts的文件看了很多遍没有问题,那就只有网络层面,比如防火墙了,我开始琢磨防火墙里的配置。 看到了下面的一段:
-A INPUT -s 10.10.75.59/32 -j ACCEPT
-A INPUT -p udp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
其中最后的一句是关键,如果倒数两句的顺序调整一下,上面的错误就会完全不一样。
这个参数其实的设定其实也是一种安全策略,如果能够扫描到我们的端口,但是却没法得知我们的网络访问是否在防火墙控制下,当然这个地方的设置伤害到“自己人”了。所以暂不需要。
去掉折后,重新启动防火墙,问题就得到了解决。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法