Linux 服务器作为非管理型交换机

Linux 服务器作为非管理型交换机

我有一台小型 Ubuntu x64 服务器,它为我的家庭网络提供 dhcp、命名、文件等服务。它只需连接到旁边的非托管 SOHO 交换机即可工作。但是,它在 PCIe 插槽中有未使用的 4xGbE i350 NIC 卡,我想用这个 NIC 代替当前的交换机。如果它也是像当前专用设备一样的普通非托管交换机,它可能没有任何优势,但我想学习一些东西(我以后可能会把它变成托管交换机,也许可以实现一些 IPS/IDS 和其他东西)。我很惊讶地发现我不知道怎么做。当然,我做了一些搜索,但它让我更加困惑。首先,为什么所有的操作指南和文章都配置桥接来实现交换?对于非托管交换机,所有端口都是平等的,没有 IP,其中一个通向网关。在 Linux 服务器上创建它是否可行(考虑到小型交换机的低价,忽略它可能不是很有用)?

答案1

使用桥接驱动程序。

网桥是第 2 层交换机的软件实现,其中添加到网桥的每个接口都是一个交换端口。

假设您有 4 个 i350 端口,br0并插入了另外两台 PC:

[ Remote PC A - MAC aa:aa:aa:aa:aa ] ---- [ i350 #1 ] ---- .------------.
                                          [ i350 #2 ] ---- |  Linux PC  |
                                          [ i350 #3 ] ---- | bridge br0 |
[ Remote PC B - MAC bb:bb:bb:bb:bb ] ---- [ i350 #4 ] ---- '------------'

远程 PC A 尝试访问远程 PC B。

ffPC A 将使用自己的源 MAC地址(全部)向广播目标 MAC 地址(全部aa)进行 ARP 。

网桥将接收该 ARP 请求并获悉 MACaa已关闭桥接端口i350 #1

然后,网桥将该广播转发到所有其他 i350 端口,因为这是交换机接收到广播数据包时的正确行为。

远程 PC B 收到该 ARP,并向 PC A 发送一个回复,回复内容为 PC A 的目标 MAC 地址(全部aa)以及自己的源 MAC 地址(全部bb)。

网桥将收到该 ARP 答复并获悉 MACbb已关闭桥接端口i350 #4

网桥看到目标 MAC 是aa,并且网桥知道该 MACaa在端口可用i350 #1,因此将帧从该 NIC 发送出去。

向网桥添加 IP 地址并像常规网络接口一样使用它,用它进行路由、NAT 等,但您不必这样做。

即使net.ipv4.ip_forward=0设置了内核可调参数,也会发生上述情况,因为桥接驱动程序没有执行 IP 转发、IP 路由或 IP NAT,而是像任何其他非托管第 2 层交换机一样执行第 2 层数据包交换。

如果您要将网桥连接到更大的网络,您还可以在网桥上运行生成树。

您说您正在使用 Ubuntu。以下内容应适用于使用 NetworkManager 的 Ubuntu 20.04:

/etc/NetworkManager/system-connections/br0.nmconnection

[connection]
id=br0
type=bridge
interface-name=br0
permissions=

[bridge]
stp=false

[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=disabled
never-default=true

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=ignore
never-default=true

[proxy]

对每个名为 的 i350 重复此文件netX,使用每个 NIC 的正确 MAC 地址:

/etc/NetworkManager/system-connections/netX.nmconnection

[connection]
id=netX
type=ethernet
interface-name=netX
master=br0
metered=2
permissions=
slave-type=bridge

[ethernet]
mac-address=xx:xx:xx:xx:xx:xx
mac-address-blacklist=

[bridge-port]

相关内容