我有一個在防火牆伺服器上運行的 Java 程序,該程式旨在使用 java-apns 向我的 iPhone 應用程式發送推播通知。問題是,每當我嘗試發送通知時,庫都無法連接到 APNS 伺服器。從堆疊追蹤來看,似乎在創建所需的 SSL 連線時,連線在某個時刻被拒絕(當程式庫呼叫的方法java.net.ConnectException
時,會拋出帶有「連線被拒絕」詳細訊息的訊息)。SSLSocketFactory
createSocket
如果防火牆阻止連接,我一點也不感到驚訝,但不幸的是,由於我不管理伺服器,我無法驗證情況是否確實如此。該程式在我的(無防火牆)桌面上運作良好的事實似乎支持了該理論。
我的問題是,有誰知道我可以找到問題根本原因的任何方法,和/或任何人都可以告訴我應該告訴伺服器管理員進行更改以使事情正常工作(如果確實是防火牆)那就是問題所在) ?我對這些事情的理解有點有限,但它應該像取消阻止連接埠 2195(APNS 伺服器使用的連接埠)上的傳出連接一樣簡單,對吧?
作為參考,伺服器是 Linux 機器,我使用的是 java-apns 0.1.2 版本。
答案1
好吧,您應該先要求他/她解鎖連接埠 2195 傳出。
這是一個例子:
iptables -A OUTPUT -o eth0 -p tcp --dport 2195 -j ACCEPT
上面假設這eth0
是外部的、面向互聯網的介面。
您可能還需要新增一行用於傳入(假設來源也是另一端的連接埠 2195):
iptables -A INPUT -i eth0 -p tcp --sport 2195 -j ACCEPT
如果返回通訊的來源連接埠是隨機的,則必須使用 iptables 中的狀態模組來追蹤連線:
iptables -A OUTPUT -o eth0 -p tcp --dport 2195 \
-m state --state NEW, ESTABLISHED, RELATED \
-j ACCEPT
iptables -A INPUT -i eth0 -p tcp \
-m state --state ESTABLISHED, RELATED \
-j ACCEPT
這是非常基本的。管理員負責這種事情,而不是您,因此可能需要對上述內容進行修改。 HTH。