1. 程式人生 > 其它 >一個Oracle監聽問題的網路排查

一個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其中最後的一句是關鍵,如果倒數兩句的順序調整一下,上面的錯誤就會完全不一樣。

這個引數其實的設定其實也是一種安全策略,如果能夠掃描到我們的埠,但是卻沒法得知我們的網路訪問是否在防火牆控制下,當然這個地方的設定傷害到“自己人”了。所以暫不需要。

去掉折後,重新啟動防火牆,問題就得到了解決。