求助: KVM 虚拟机网络隔离问题

2019-04-27 05:23:00 +08:00
 KasuganoSoras

因为我家里有一台服务器,所以打算利用闲置资源开 VPS 进行出租。考虑到安全问题,我需要禁止虚拟机访问物理机所在的网段,同时还需要禁止虚拟机之间互相访问,防止一台虚拟机中毒感染其他虚拟机。

简略网络架构图

目前有以下需求:

  1. 虚拟机之间不允许互相访问
  2. 虚拟机可以访问 192.168.122.1 网关
  3. 虚拟机不允许访问 192.168.3.xxx 网段,192.168.3.181 除外。

我尝试过 Libvirt 自带的 nwfilter 功能,我用了下面这个配置,但是会导致虚拟机不能上网

<filter name='deny-lan' chain='ipv4' priority='-700'>
  <uuid>fce8ae34-e69e-83bf-262e-30786c1f8079</uuid>
  <rule action='drop' direction='inout' priority='205'>
    <ip dstipaddr='192.168.122.0' dstipmask='24'/>
  </rule>
  <rule action='accept' direction='inout' priority='204'>
    <ip dstipaddr='192.168.122.1' dstipmask='32'/>
  </rule>
  <rule action='drop' direction='inout' priority='205'>
    <ip dstipaddr='192.168.3.0' dstipmask='24'/>
  </rule>
  <rule action='accept' direction='inout' priority='204'>
    <ip dstipaddr='192.168.3.181' dstipmask='32'/>
  </rule>
</filter>

具体我是参考这篇文章的: https://www.so-cools.com/?p=1087

搞了很久也没搞定这个问题,只能来求助万能的 V2EX 了……

可以用 iptables 或者其他东西,只要能实现上面三个需求就行,付费也可以(

2222 次点击
所在节点    问与答
5 条回复
HuasLeung
2019-04-27 06:58:03 +08:00
singerll
2019-04-27 07:59:26 +08:00
没有了解过 kvm 网络,不过你可以用一些轻量私有云。有个疑问,虚拟机为什么可以访问宿主机???
singerll
2019-04-27 08:01:00 +08:00
你也可以三个虚拟机创建三个桥接网卡,删除相关路由表试一试
gam2046
2019-04-27 09:43:16 +08:00
参考方案:
物理机物理网络出口 eth0 (假设物理网络网段:192.168.200/24 )
每个 VM 使用一个独立网卡 nat,并划定一个固定网段,如 192.168.100.0/24。每个虚拟机可以使用相同的网段,因相互不同,不存在冲突。

此时,每个虚拟机之间是无法相互访问的。
在物理机上使用 iptables,将来源 IP 为 192.168.100.0/24 且目标位置为 192.168.200.0/24 的数据包直接 drop 即可(似乎直接丢 INPUT 链就可以?)

当然 NAT 的方案也可以用 VLAN 来实现,其他都一样。
woyaojizhu8
2020-05-21 23:49:28 +08:00
@gam2046 请问,如果还要禁止它访问物理机,应该怎么做?比如物理机上开了一个 web 服务,因为疏忽监听了 0.0.0.0:80,得让这个虚拟机无法访问它

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559121

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX