一個Oracle監聽問題的網路排查

jeanron100發表於2017-08-17

  今天在梳理一套環境的時候,發現了一個奇怪的問題,應用端連線正常,但是服務端卻有些問題。

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

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

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



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2143749/,如需轉載,請註明出處,否則將追究法律責任。

相關文章