在大多数托管交换机上,您可以启用第 2 层端口隔离。实施和术语因供应商而异,但一般而言,您将一个或多个端口保持在默认的混杂 (Cisco) 或上行链路 (HP) 状态,并将其他端口配置为隔离 (Cisco) 或专用 (HP)。之后,孤立的端口只能与混杂的端口通信,而不能相互通信。
有什么方法可以通过 Linux 桥来实现这一点。将虚拟机彼此隔离?也许通过ebtables?
根据@pQd 的要求,当主机是上行链路并且所有虚拟机应相互隔离时,这是一个与虚拟机进行端口隔离的工作示例(此处:基于Proxmox VE)。我将它用于内部服务网络(DNS、更新等)。桥接器是vmbr1
,虚拟以太网设备是vethNNN.1
(NNN
VID在哪里)。如果您只想隔离,这应该足够了:
ebtables --append FORWARD --logical-in vmbr1 --jump DROP
Run Code Online (Sandbox Code Playgroud)
如果要配置多个网桥并且其他 VM 也应该是上行链路(这里:veth100.1
和veth102.1
),这样的事情更合适(未经测试):
for br in $(seq 0 1); do
br=vmbr$br
ebtables --new-chain $br
ebtables --policy $br DROP
ebtables --append FORWARD --logical-in $br --jump $br
done
for if in 100.1 102.1; do
br=vmbr$(echo $if | cut -d. -f2)
if=veth$if
ebtables --append $br --in-if $if
ebtables --append $br --out-if $if
done
Run Code Online (Sandbox Code Playgroud)
如果主机不应该是上行链路,这应该可以工作(不过我也没有尝试过):
ebtables --append INPUT --logical-in vmbr1 --jump vmbr1
ebtables --append OUTPUT --logical-out vmbr1 --jump vmbr1
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用ebtables并创建自己的涉及输入/输出桥端口的规则。
我手头没有带有网桥的服务器,但我会做这样的事情:
ebtables -P FORWARD DROP
ebtables -F FORWARD
ebtables -A FORWARD -i $uplinkPort -j ACCEPT # let the traffic flow from uplink to any ports
ebtables -A FORWARD -o $uplinkPort -j ACCEPT # let the traffic flow from any ports to uplink
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7368 次 |
最近记录: |