You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

单VLAN内多子网隔离逻辑疑问及连通性问题求助

单VLAN内多子网隔离逻辑疑问及连通性问题求助

嗨,先把你的问题捋明白哈——你现在想在同一个VLAN里放三个/24子网,核心需求是让不同子网的VM之间必须经过防火墙规则才能互通,但实际测试时应该是没达到预期(比如不同子网的VM直接就能通了,或者隔离规则完全没生效?),对吧?我帮你拆解下核心问题和解决思路:

为啥你的当前逻辑没生效?核心误区在这

你现在把三个子网都挂在同一个VLAN下,这就等于把它们扔在了同一个二层广播域里。哪怕每个VM的子网掩码是/24,这里有个很容易踩的坑:
比如test-admin(10.50.0.10/24)要访问test-db(10.50.10.10/24),按道理它应该判断目标不在自己子网,发ARP找网关10.50.0.1对吧?但因为所有VM都在同一个VLAN,交换机的二层会把test-admin的ARP请求广播给所有同VLAN的设备,test-db收到后可能直接回复ARP包——这时候test-admin就会直接给test-db发二层流量,完全绕开了网关和防火墙规则!

另外,你给每个VM配了不同的网关(10.50.0.1、10.50.10.1、10.50.20.1),这些网关如果是交换机的SVI接口的话,交换机默认会开启三层转发,直接在交换机内部就把三个子网的流量转了,根本到不了防火墙,你的隔离规则自然没用。

两种解决思路,按需选

思路1:保留单VLAN,硬把流量按在防火墙上(适合不想改VLAN的场景)

  1. 统一网关配置:把所有VM的网关都改成同一个地址,比如都用10.50.0.1,然后在防火墙上给这个接口配置主IP+辅助IP(比如主IP10.50.0.1/24,再加10.50.10.1/24、10.50.20.1/24作为辅助IP),让防火墙能响应所有子网的网关请求。
  2. 掐断二层绕路的可能:要么在交换机上把这三个VM所在的端口设为私有VLAN(PVLAN)的隔离端口,让它们之间不能直接发二层广播;要么在防火墙上开启代理ARP——这样所有异网IP的ARP请求都会被防火墙拦截,test-admin要找test-db的话,只能收到防火墙的ARP回复,流量必须先过防火墙,你的规则才能生效。
  3. 确保交换机不抢着转发:如果你的交换机是三层交换机,一定要把这个VLAN的SVI接口关掉,或者禁止这个VLAN的三层转发,别让交换机替防火墙干活。

思路2:换用VLAN隔离(更规范,推荐长期用)

其实业界更常用的做法是一个子网对应一个独立VLAN,比如:

  • 10.50.0.0/24 → VLAN 50
  • 10.50.10.0/24 → VLAN 51
  • 10.50.20.0/24 → VLAN 52
    然后在防火墙上给每个VLAN配个子接口,每个子接口对应子网的网关,这样不同VLAN的流量天然二层隔离,必须经过防火墙的三层转发,你在防火墙上配的允许/拒绝规则就能直接生效,排障也更清晰。

现在可以先做个快速排查

你现在可以在test-admin上ping test-db,同时用tcpdump抓arp和icmp包(比如tcpdump -i eth0 arp or icmp),看是直接收到了test-db的ARP回复,还是收到了网关的ARP回复:

  • 如果是直接收到test-db的ARP,那就是二层绕路了,按思路1的方法掐断就行;
  • 如果是走了网关但还是能ping通,那就是防火墙默认允许了子网间流量,你需要在防火墙上加拒绝规则,只开必要的端口。

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

火山引擎 最新活动