You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地网络中如何从机器A访问机器B上KVM虚拟机的openmediavault服务?

本地网络中如何从机器A访问机器B上KVM虚拟机的openmediavault服务?

首先得搞清楚问题出在哪:你的openmediavault虚拟机用的是KVM默认的NAT网络模式(对应B上的virbr0网桥,子网是192.168.122.0/24)。这种模式下,这个子网是机器B本地的私有网络,只有B本身能直接访问,机器A的路由表里没有指向这个子网的路径,所以自然打不开那个地址。

下面给你三种可行的解决方案,你可以根据自己的需求选:

方案一:改成桥接模式(最省心,推荐)

这个方法能让虚拟机直接加入你本地的192.168.177.0/24网络,和其他设备一样获取同网段IP,之后访问起来就和访问B一样简单:

  • 打开B上的KVM管理工具(比如virt-manager),找到你的openmediavault虚拟机
  • 进入虚拟机的硬件设置,找到网络适配器,把当前的“NAT”选项改成“桥接模式”,然后选择B的物理网卡enp1s0
  • 重启虚拟机,它会自动从路由器获取192.168.177.x的IP(或者你手动给它设个静态IP更稳定)
  • 之后直接在A的浏览器里输入http://[虚拟机的192.168.177.x地址]:3670就能访问了

方案二:在B上做端口转发(不用改虚拟机网络)

如果不想动虚拟机的网络设置,可以把B的某个端口映射到虚拟机的3670端口,相当于让B作为“中转站”:

  1. 先在B的终端里执行下面的iptables命令(临时生效,重启后会消失,要持久化的话可以用iptables-save保存规则):
sudo iptables -t nat -A PREROUTING -p tcp -d 192.168.177.70 --dport 3670 -j DNAT --to-destination 192.168.122.153:3670
sudo iptables -A FORWARD -p tcp -d 192.168.122.153 --dport 3670 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  1. 开启B的IP转发功能(临时生效):
sudo sysctl -w net.ipv4.ip_forward=1

要永久生效的话,编辑/etc/sysctl.conf,把net.ipv4.ip_forward=1这行的注释去掉,然后执行sudo sysctl -p刷新配置。
3. 现在在A的浏览器里访问http://192.168.177.70:3670,就能转到虚拟机的服务了

方案三:在A上添加静态路由(让A知道走B去虚拟机子网)

这个方法是给A加一条路由规则,告诉它去192.168.122.0/24子网的流量要通过B转发:

  1. 在A的终端里执行:
sudo ip route add 192.168.122.0/24 via 192.168.177.70 dev wlan0

(这是临时生效的,要永久保存的话,Ubuntu可以编辑/etc/netplan/下的配置文件,或者用rc.local,具体看你的Ubuntu版本)
2. 同样要确保B已经开启了IP转发(参考方案二的第二步)
3. 之后A就能直接访问http://192.168.122.153:3670了

额外注意事项

  • 因为A的ufw是开启状态,别忘了允许对应的流量:
    • 如果用方案一或三,执行:
      sudo ufw allow from 192.168.177.0/24 to 192.168.122.153 port 3670 proto tcp
      
    • 如果用方案二,执行:
      sudo ufw allow from 192.168.177.0/24 to 192.168.177.70 port 3670 proto tcp
      
  • 方案二和三依赖B的IP转发功能,如果B重启后没自动开启,记得重新设置或者配置永久生效

备注:内容来源于stack exchange,提问作者user7468395

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:13:07