客户端无法连接数据库的小问题(r8笔记第53天)
最近碰到了一个比较奇怪的数据库连接问题。问题的起因是做一个数据整合的时候,把服务器B的防火墙信息都拷贝到了服务器A,迁移的过程都很顺利,是一套开 发测试环境,迁移完成之后,从应用的反馈来说都没有发现问题,过了几天有个开发的同事找到我说,她现在连接数据库的时候总是有超时的错误。之前连接服务器 B是没有问题的,想让我帮她看看。
对于这个问题,最直接的思路就是防火墙了,确认客户端IP,端口库,数据库实例名都没有问题,但是她那边的反馈就是怎么都连接不了。而且比较奇怪的是和她 一个组的另外一个同事连接就没有问题,所以就想如果跨网段实在访问不了,应该是得找IT的同事来解决了吧,是不是有什么特定的规则限制,最开始也没有怎么 上心,但是等她再次找到我时,感觉这个问题确实有些奇怪。
为了进一步验证,我专门抽了一些时间来了解开发同学的这个连接问题,最后为了进一步确认,我们开了远程协助,我可以看到她那边的连接情况。
基本情况如下:
tnsping 显示操作超时
使用telnet连接22号端口,显示连接失败,目前开了22号的端口
使用ping 服务器,显示正常
所以这个问题看起来就比较奇怪,而且有些让人捉摸不透,在服务器端再三确认了防火墙的设置。可以看到防火墙是开通了1521,22和1528的端口的。
# iptables -nvL|grep 10.12.1.12
374 39102 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 1528
0 0 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 22
0 0 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 1521
但是现在情况是tnsping和telnet都是失败的。
带着一丝尝试,重新赋予了1521端口的权限,再次查看也确认开通了,这个时候继续尝试连接就没有问题了。
# iptables -nvL|grep 10.12.1.12
5 299 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 1521,1522
374 39102 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 1528
0 0 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 22
0 0 ACCEPT tcp -- eth0 * 10.12.1.12 0.0.0.0/0 multiport dports 1521
这个问题虽然解决了,但是问题原因还是没有找到,于是今天继续查看。终于在同事的帮助下找到了原因。在/etc/sysconfig/iptables里面的内容和内存中的内容是同步的。得到的文件内容结果有这么一段。
-A INPUT -s 10.10.xx.61/32 -i eth0 -j ACCEPT
-A INPUT -s 10.10.xx.60/32 -i eth0 -j ACCEPT
-A INPUT -s 192.168.xx.232/32 -i eth0 -j ACCEPT
-A INPUT -s 192.168.xx.228/32 -i eth0 -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -j DROP
-A INPUT -i eth0 -j DROP
-A INPUT -s 10.12.xx.99/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT
-A INPUT -s 10.12.1.12/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT
-A INPUT -s 10.127.xxx.82/32 -i eth0 -p tcp -m multiport --dports 10050 -j ACCEPT
-A INPUT -s 10.127.xxx.82/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT
当然亮点的还是
-A INPUT -s 10.12.1.12/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT 这一行上面的内容
-A INPUT -i eth0 -j DROP 这一行的内容代表的含义是不允许eth0的网卡访问,在防火墙设置里面还是存在这样一种依赖,自上向下,规则越严格,越要放在最上面。
所以之一行之后的连接都被限制了。当然通过iptables -nvL也确实看到后面的哪些IP确实都没有任何的流量。
问题到了这里就很清楚了,当然这也是对防火墙的操作不够规范导致的。可以把防火墙中的内容转化为iptables的命令,避免直接拷贝文件内容这种简单粗暴的方式。
- 全球互联网发展进入“拐点”——展望下一代互联网
- 2 分钟论文:语音生成表情包背后的技术原理
- 享学课堂谈-Python程序员的常见错误
- 区块链技术,如何提升网络安全?
- 趣店推“大白汽车”业务 启用域名dabaiqiche.com
- 糖果吃了那么多,你真的知道比特币分叉是咋回事吗?
- 静息态网络拓扑传输认知任务信息
- MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING
- 如何用Python提取中文关键词?
- 工信部:将加大网络提速降费力度加快百兆宽带普及
- 人工智能AI(5):线性代数之矩阵、线性空间
- iOS开发进阶篇——FRP与ReactiveCocoa的介绍(一)
- 英伟达修改GeForce软件使用条款:禁止在数据中心运行深度学习等应用
- 浅谈几种SLB技术的实现
- 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 数组属性和方法
- 使用自签名证书内部分发 iOS7 应用
- 在 MvvmCross 下使用 iOS Storyboard
- 动态隐藏某些特殊类型的SAP CRM附件
- 设计模式之生成器模式
- Git 客户端保存用户名和密码
- SAP WebClient UI component模型元数据解析工具
- 设计模式之抽象工厂模式
- 测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
- 设计模式之代理模式
- SQL Server 中的 ROW_NUMBER 函数
- NHibernate 批量数据插入测试
- MvvmCross 框架中 ViewModel 之间的导航以及生命周期
- 在 mono 下尝试 ASP.NET vNext
- 设计模式之享元模式
- 设计模式之外观模式