在 IP 地址为 192.168.200.5 的 Windows 10 计算机上,我想设置一个带有 Ubuntu 的 VirtualBox,以便 Ubuntu 可以接收从端口 9001 上的硬件设备(IP 192.168.200.10)发送的 UDP 数据。
到目前为止我尝试了以下操作:
- 具有端口转发 9001 -> 9001 的 NAT 适配器
- 桥接适配器
- 仅限主持人
我也尝试使用文件将 Ubuntu VM 的 IP 配置为 192.168.200.6 /etc/sysconfig/network-scripts/ifcfg-enp0s3
,然后重新启动网络sudo systemctl restart systemd-networkd
,但这也不起作用。
通过使用 wireshark 进行验证,Windows 本身确实在端口 9001 上接收 UDP 数据。
那么我还能尝试什么呢?或者这不可能做到吗?
答案1
如果数据可以到达主机上的端口,则无需更改任何 IP 设置。通过 NAT 进行常规端口转发即可。
免责声明:在 Ubuntu-Host/Ubuntu-VM 上使用 VirtualBox 6.1 成功测试。
首先,在“设置”>“网络”下为您的虚拟机配置端口转发规则。确保网络已启用并设置为Attached to: NAT
。接下来,在“高级”下拉菜单下,选择“端口转发”并创建新规则。选择 UDP 作为协议并设置所需的端口。暂时将 IP 地址设置留空。
您需要启动/重新启动虚拟机以使这些更改生效。从您的主机,确保 VirtualBox VM 设置正常运行并监听所需端口。在 Linux 主机上,您可以使用 查看开放端口netstat -ln | grep udp
。对于 Windows,请使用netstat -an | find "UDP"
。
转到您的 Ubuntu VM 以验证您是否可以接收传入数据。运行 netcat 实用程序以使用 监听所需端口上的传入 UDP 数据nc -ulk 9001
。运行后,返回您的主机并使用这个简单的 Python 脚本来自你的主机测试是否可以将数据发送到虚拟机:
import socket
UDP_IP = "0.0.0.0" # Broadcast over any address
UDP_PORT = 9001 # Send to this port
MESSAGE = "Hello World! Here's a Datagram!\n"
sock = socket.socket(
socket.AF_INET, # Internet
socket.SOCK_DGRAM # UDP
)
sock.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP, UDP_PORT))
如果一切正常,消息将从主机传递到虚拟机。
如果您愿意,现在可以更改端口转发规则中的 IP 设置以缩小来源范围。如果像以前一样留空,它将监听全部该端口的地址,这可能是一个潜在的安全风险。
但请注意,如果主机上的任何服务已在监听,或者稍后启动服务来监听同一端口,它将拦截数据并且不会将其传递到您的虚拟机。确保该端口专门用于向您的虚拟机传递消息。
希望这可以帮助!
答案2
步骤 1:将虚拟机设置为桥接适配器
这意味着您的虚拟机将直接看到您的 LAN 并与路由器通信
第 2 步:为你的 Ubuntu 客户机分配静态地址
我假设您安装了 Ubuntu Server。这很重要,因为 Ubuntu Server 和 Ubuntu Desktop 以不同的方式配置其静态 IP(服务器使用netplan
,桌面不使用)。
sudo apt install tilde # to install a nice-to-use
sudo tilde /etc/netplan/00-installer-config.yaml
并使用此配置:
# Make sure the address is VALID and the router address is correct!
network:
ethernets:
enp0s3:
addresses:
- 192.168.200.6/24
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
routes:
- to: default
via: 192.168.200.1
version: 2
使用Ctrl+W
保存并Ctrl+Q
退出。
请注意,这enp0s3
是我的接口的名称,在您的机器上可能有所不同,请使用命令ip a
列出客户虚拟机内的所有接口。
在此配置中我假设:
- 您希望客户虚拟机位于
192.168.200.6
。这就是您的硬件设备应该与之通信的地方。请注意,这与您的 Windows 10 的 IP 地址 不同192.168.200.5
。对于 LAN 中的所有人来说,这就像存在第二台物理计算机 - 路由器位于
192.168.200.1
。如果此地址错误,您的 VM 客户机将无法访问互联网。
Windows 防火墙可能会阻止你与 Ubuntu VM 通信
现在,您的硬件设备192.168.200.10
应该能够与您的 Ubuntu VM 通信。
但是你的 Windows 10 主机可能不想与你的客户 Ubuntu VM 对话。如果已经对话了,那么你就完了。
Windows 是否允许 LAN 中的其他计算机与 Windows 中的进程通信取决于:
- 您的连接设置为家庭/工作/公共。
- 防火墙规则允许从您的访客地址传入/传出 UDP 数据包(在主页上它应该可以工作,除非某些规则阻止它)。
- 这应该很简单:点击添加新规则它会询问您是否要为所有程序或特定程序打开端口,哪个端口以及是否阻止或允许连接。
欢呼并祝你好运。