【发布时间】:2014-08-04 11:21:24
【问题描述】:
背景信息
我正在开发一种支持网络的嵌入式设备,旨在与服务器进行通信。因为该服务器将运行 linux(但我需要 Windows 工具进行开发),所以我正在运行一个带有 Ubuntu Server 14.04 的 VM 用于开发目的。
嵌入式方面对于这个问题并不重要,因为我要回到最简单的测试设置(只需让主机连接到 VM 上的服务器以查看 TCP 连接建立)以进行故障排除。
网络设置
运行 DD-WRT [v24-sp2 (03/25/13) std (SVN 版本 21061)] 的 D-Link DIR-615,通过 MAC 过滤器分配给主机和 VM 的静态 IP,启用 DNS 功能
开发机(192.168.5.117,dev.test.lan)
Ubuntu VM (192.168.5.118, vm.test.lan) - 使用桥接连接(NAT 不起作用,因为客户端将启动与 VM 的连接)
路由器未连接到任何类型的 WAN,仅有线连接,Wi-fi 已禁用
已执行健全性检查
从 VM ping 主机成功(使用 IP 或 dns 名称)
从主机 ping VM 成功(使用 IP 或 dns 名称)
主机之间的nc VM(可以从任一端监听/连接)[监听端口9050]
在 VM 内,可以通过 nc 连接到 VM 上运行的服务器应用程序,连接已成功建立 [到端口 9050]
为端口 9050 上的传入/传出 TCP 连接打开 Windows 防火墙
问题分析
使用 wireshark,我可以在执行 nc 健全性测试(主机 虚拟机)时看到 TCP 连接成功运行。
当我在 VM 上运行服务器(用 python 编写,使用 asyncio)并尝试从主机通过 nc 连接时,服务器看不到任何连接进入(但我们知道从 nc 连接到服务器工作正常,因为它已在 VM 内部成功测试)。
从 wireshark 我看到主机向 VM 发送 SYN,之后 VM 以 [RST, ACK] 响应。主机在放弃前重试传输两次。
问题
桥接连接是否适合用于 VM 的设置?
找出 RST 来源的最佳方法是什么? (是路由器、虚拟机 TCP/IP 堆栈,还是 Python 的某些部分造成的?)
更新:
在虚拟机中尝试nc 192.168.5.118 9050 并观察到与我从主机尝试过的相同的拒绝连接行为。根据亚当所说的,看起来我们越来越近了。也会尝试 Adam 的建议并发布更新。
【问题讨论】:
-
"在 VM 内,可以通过 nc 连接到运行在 VM 上的服务器应用程序," -- 确切地说,您用来调用
nc的命令行是什么?案子?如果是nc localhost 9050,请改用nc 192.168.5.118 9050。然后告诉我们发生了什么。
标签: python ubuntu tcp vmware dd-wrt