是否可以在 Linux 网桥上启用端口隔离?

mss*_*mss 9 linux-networking

在大多数托管交换机上,您可以启用第 2 层端口隔离。实施和术语因供应商而异,但一般而言,您将一个或多个端口保持在默认的混杂 (Cisco) 或上行链路 (HP) 状态,并将其他端口配置为隔离 (Cisco) 或专用 (HP)。之后,孤立的端口只能与混杂的端口通信,而不能相互通信。

有什么方法可以通过 Linux 桥来实现这一点。将虚拟机彼此隔离?也许通过ebtables?

mss*_*mss 5

根据@pQd 的要求,当主机是上行链路并且所有虚拟机应相互隔离时,这是一个与虚拟机进行端口隔离的工作示例(此处:基于Proxmox VE)。我将它用于内部服务网络(DNS、更新等)。桥接器是vmbr1,虚拟以太网设备是vethNNN.1NNNVID在哪里)。如果您只想隔离,这应该足够了:

ebtables --append FORWARD --logical-in vmbr1 --jump DROP
Run Code Online (Sandbox Code Playgroud)

如果要配置多个网桥并且其他 VM 也应该是上行链路(这里:veth100.1veth102.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)


pQd*_*pQd 4

您可以尝试使用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)