静看光阴荏苒
不管不顾不问不说也不念

Proxmox限制虚拟机改变IP地址

假设我配置了一个NAT网络,网段是10.0.0.0/24,那么理论上这个网段内的任意ip地址都可以提供给vm使用。

如果这个环境只有我自己一个人使用的话,那看上去没什么问题。但如果是提供给多人使用的环境,问题就大了去了。。举个栗子:

假设我分配了一个10.0.0.2给vm1,然后这个vm1的主人自行把ip改成了10.0.0.3,然后我又给vm2分配了10.0.0.3,那这ip不就冲突了,不就乱套了吗。。

这个栗子就是想表达一点:提供给多人使用的环境,如果不限制vm可用ip的话,ip欺骗、ip冲突、arp欺骗就都来了。。

我们要实现的目标就是,如果我分配了10.0.0.2这个ip给vm1,那么vm1就只能使用这个ip联网,如果vm1的主人擅自把ip修改为其他的地址则无法联网。

这里我准备了1台vm,vm内有2个网络,一个是公网ipv6,一个是natipv4,ipv6通过桥接vmbr0联网,natipv4通过pve自带的simple sdn网络联网:

[备注1]通过上图可得知vm的ipv6地址是2001:41d0:a:5205::2:1443,ipv4地址是10.0.0.12

[备注2]simple sdn配置方法:https://lala.im/8925.html

目标:限制这台vm只能使用2001:41d0:a:5205::2:1443和10.0.0.12。

首先我们要确保pve各个级别的防火墙都已经启用,分别是:数据中心级别、节点级别、vm级别。

数据中心级别的防火墙,我们可以先设置默认放行全部流量,将输入策略、输出策略改为ACCEPT即可:

转到对应的vm,启用网络设备内的防火墙功能:

启用成功的话,会有下图的参数显示出来:

启用vm防火墙,勾选ip筛选:

[备注1]为方便后续测试,这里的输入策略也可以先改成ACCEPT。

编辑对应vm的防火墙配置文件:

nano /etc/pve/firewall/101.fw

默认配置如下:

[OPTIONS]

enable: 1
ipfilter: 1
policy_in: ACCEPT

加入如下配置:

[IPSET ipfilter-net0]

2001:41d0:a:5205::2:1443

[IPSET ipfilter-net1]

10.0.0.12

如图所示:

[备注1]网络设备的名字与ipfilter-netX要进行匹配。net0对应ipfilter-net0,net1对应ipfilter-net1,以此类推。

[备注2]ipv6的规则可能需要重启vm才能生效,原因不明。。

现在进行测试,没有修改ip的时候,网络都是正常可以连通的:

把vm内的ip删掉:

ip addr del 2001:41d0:a:5205::2:1443/56 dev eth0
ip addr del 10.0.0.12/24 dev eth1

然后添加其他的地址:

ip addr add 2001:41d0:a:5205::2:4443/56 dev eth0
ip addr add 10.0.0.22/24 dev eth1

vm里面ping不通外部:

从外部ping也是不通的:

参考:

https://pve.proxmox.com/wiki/Firewall
https://pve.proxmox.com/pve-docs/chapter-pve-firewall.html#pve_firewall_ipfilter_section

赞(1)
未经允许不得转载:荒岛 » Proxmox限制虚拟机改变IP地址
分享到: 更多 (0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    你好 我想咨询一下,为什么我配置完成之后,VM就ping不通公网了呢? 但是到网关是通的。 可否给个联系方式呢?

    tdd2周前 (11-04) Google Chrome 130.0.0.0 Google Chrome 130.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 我在hostloc和nodeseek都看到你的帖子了哈哈,我的建议是你可以试试convoy这个面板,这个面板也是基于proxmox的,并且创建虚拟机时会自动添加防火墙规则。

      LALA2周前 (11-04) Google Chrome 118.0.0.0 Google Chrome 118.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿