2016-12-05 106 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接口,它工作。 –