网桥
网桥相当于网卡的容器,可以将多个网卡放到网桥内,它们就像在一个局域网里了,对外用同一个 IP。
工作原理
网桥工作在第二层(数据链路层)。它不关心 IP 地址,只看 MAC 地址。
当我们创建一个网桥并将物理网卡丢进去时,会发生以下变化。
- 身份收回
一旦物理网卡进入了网桥,它就变成了网桥的一个从设备。此时,这些物理网卡不再需要(也不应该)拥有自己的 IP 地址。 - 统一对外接口
网桥变成了一个“逻辑网卡”。你给 br0 配置的 IP 地址,运行 dnsmasq 或设置访火墙规则。所有塞进这个网桥的网卡,对表现出来的都是这个网桥的身份。 - 内部交换机制
网桥内部的网卡之间是打通的。网桥会记住每一个网口后面连接的是哪一个 MAC 地址。如果网桥发现数据包的源 MAC 地址和目的 MAC 是接在网桥内的另外一个网口,就会把包转发过去。
关键名词
- MAC 地址表:
- 网桥内部存储 MAC 地址和端口对应关系的表
- 混杂模式
- 让网卡接受所有经过它的流量包,而不只是发给它自己的
- STP(生成树协议)
- 虚拟网桥
网桥 vs 交换机 vs 路由器
这三个东西经常弄混。
- 网桥 vs 交换机
现代的交换机其实就是多端口的硬件网桥。网桥通过软件(比如 Linux 内核)实现二层转发,而交换机是靠专门的硬件芯片(ASIC)实现的。 - 网桥 vs 路由器
路由器工作在第三层(网络层),靠 IP 地址转发,网桥是把路修通,路由器是给包裹写地址并指路。
应用场景
在 Linux 机器上,网桥主要是消除物理接口的边界。
假设你的机器有 eth1(接下挂路由器) 和 eth2(接台式机):
- 你创建一个网桥 br0。
- 把 eth1 和 eth2 都塞进 br0。
- 关键点:此时 eth1 和 eth2 都不需要 IP 地址了。你只需要给 br0 设置一个 IP,然后让 dnsmasq 监听 br0 作为 dhcp server。
- 结果:台式机和下挂路由器就像插在了同一个傻瓜交换机上,他们都能从 dnsmasq 获取到同一个网段的 IP。
创建网桥实践
# 1. 创建网桥容器
sudo ip link add name br0 type bridge
# 2. 把物理网卡塞进去
sudo ip link set eth1 master br0
sudo ip link set eth2 master br0
# 3. 启动它们
sudo ip link set br0 up
sudo ip link set eth1 up
sudo ip link set eth2 up
# 4. 给网桥配置 ip
sudo ip addr add 192.68.2.1/24 dev br0
Read other posts