2016-12-05 72 views
1

我有一個客戶端和一個服務器。在同一臺機器上運行時,它們工作正常,但是當我嘗試從網絡外部連接客戶端時,我的服務器將不會發送SYN+ACK數據包來響應SYN數據包。服務器不發送SYN + ACK

使用Wireshark我可以看到來自客戶端的SYN數據包,但我沒有看到SYN+ACK數據包發送到客戶端。

我發現了一些解決方案,說關閉TCP窗口縮放和TCP時間戳,但沒有爲我工作。此外,與在服務器端的netstat -ln命令,我可以看到

tcp  0  0 0.0.0.0:55000   0.0.0.0:*    LISTEN 

這裏是在服務器端Wireshark的輸出:

Server side wireshark print

這裏是我的IP表:

IPTables

+0

檢查您的防火牆配置。 Wireshark可能會在流量進入防火牆之前捕獲流量,以便您在Wireshark中看到SYN,但應用程序永遠不會獲取它。 –

+0

@SteffenUllrich我使用了「sudo ufw allow myport」,如果我使用「sudo ufw status」,則表示允許我的端口。我想這是完成的,對吧?但仍然沒有結果 –

+0

考慮到netstat顯示監聽套接字,並且TCP握手在內核中完成(即沒有應用程序故障),我的猜測仍然是防火牆或您已經錯誤地解釋wireshark輸出。如果你添加* all * iptables規則和wireshark/tcpdump輸出到你的問題,你可以仔細看看。 –

回答

0

您必須評估三種可能性:

  1. 有一個在被髮送到TCP堆棧
  2. 有一個iptables在被送出
  3. 有一個前丟棄SYN-ACK服務器規則之前丟棄SYN服務器一個iptables規則通過其他接口發送SYN-ACK的錯誤路由(我懷疑是這種情況,因爲我期望使用通過其接收SYN的相同接口)
+0

已解決。我通過vpn與客戶端連接,可能導致了問題。我改變了ip到tap0接口,它工作。 –