V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
KasuganoSoras
V2EX  ›  问与答

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

  •  
  •   KasuganoSoras · 2019-04-27 05:23:00 +08:00 · 2296 次点击
    这是一个创建于 2041 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    简略网络架构图

    img

    目前有以下需求:

    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 或者其他东西,只要能实现上面三个需求就行,付费也可以(

    5 条回复    2020-05-21 23:49:28 +08:00
    HuasLeung
        1
    HuasLeung  
       2019-04-27 06:58:03 +08:00 via Android   ❤️ 1
    singerll
        2
    singerll  
       2019-04-27 07:59:26 +08:00 via Android
    没有了解过 kvm 网络,不过你可以用一些轻量私有云。有个疑问,虚拟机为什么可以访问宿主机???
    singerll
        3
    singerll  
       2019-04-27 08:01:00 +08:00 via Android   ❤️ 1
    你也可以三个虚拟机创建三个桥接网卡,删除相关路由表试一试
    gam2046
        4
    gam2046  
       2019-04-27 09:43:16 +08:00   ❤️ 2
    参考方案:
    物理机物理网络出口 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
        5
    woyaojizhu8  
       2020-05-21 23:49:28 +08:00
    @gam2046 请问,如果还要禁止它访问物理机,应该怎么做?比如物理机上开了一个 web 服务,因为疏忽监听了 0.0.0.0:80,得让这个虚拟机无法访问它
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5447 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:34 · PVG 15:34 · LAX 23:34 · JFK 02:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.