Linux bridge配置工具介绍:bridge-utils与iproute2

概述

bridge-utils 是一个用于管理和配置 Linux 桥接设备的工具集。它提供了一组命令行工具(如 brctl),用于创建、管理和监控 Linux 桥接设备。

iproute2 是一个功能强大的 Linux 网络配置工具集,用于管理和配置现代 Linux 内核中的网络功能。它取代了传统的 net-tools 工具集(如 ifconfigroutearp 等),提供了更强大、更灵活的网络管理功能。

iproute2 的核心命令是 ip,它能够管理网络接口、路由、策略路由、邻居(ARP)、隧道、VLAN、桥接、流量控制等。

安装

sudo apt install bridge-utils
sudo apt install iproute2

功能

  • 网桥创建、删除
  • 网桥上添加删除接口(物理或者虚拟)

常用操作

查看所有网桥

sudo brctl show
# 或者
sudo ip link show type bridge

添加网桥

# 创建一个桥接设备
sudo brctl addbr br0
# 或者使用
sudo ip link add name br0 type bridge

删除网桥

sudo brctl delbr br0
# 或者
sudo ip link delete br0 type bridge

配置网桥IP

# 配置网桥的IP地址
sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0 up
# 或者
sudo ip address add 192.168.1.1/24 dev br0

创建虚拟网络接口对

sudo ip link add veth0 type veth peer name veth1

以上命令创建一对接口,veth和veth1

在容器场景,一般是要把其中一个端口放入到特定的网络命名空间

开启虚拟网络接口对

sudo ifconfig veth0 up
# 或者
sudo ip link set veth0 up

网桥中添加接口

# 桥接veth pair的一端
sudo brctl addif br0 veth0
# 或者
sudo ip link set veth0 master br0

除了可以将虚拟网络接口对添加到网桥,也可以将物理接口添加进来,改一下设备名字为物理网卡即可

将物理设备添加进来,当需要外部流量访问,这种方式性能比NAT更好

网桥中删除接口

sudo brctl delif br0 eth0
# 或者
sudo ip link set eth0 nomaster

配置虚拟网络接口的网络命名空间

sudo ip link set veth1 netns /proc/$CONTAINER_PID/ns/net

配置虚拟网络接口的IP和路由

# 开启端口
sudo nsenter -t $CONTAINER_PID -n ip link set veth1 up
# 设置端口的IP
sudo nsenter -t $CONTAINER_PID -n ip addr add 192.168.1.2/24 dev veth1
# 设置端口的路由
sudo nsenter -t $CONTAINER_PID -n ip route add default via 192.168.1.1

使用iproute2操作会如下

# 在容器的网络命名空间中配置 veth1 的 IP 地址
sudo ip netns exec $CONTAINER_PID ip address add 192.168.1.2/24 dev veth1

# 启用 veth1 接口
sudo ip netns exec $CONTAINER_PID ip link set veth1 up

# 配置默认路由
sudo ip netns exec $CONTAINER_PID ip route add default via 192.168.1.1

直接查看网络命名空间中的配置

# 查看网络命名空间中的接口
sudo ip netns exec $CONTAINER_PID ip link show

# 查看网络命名空间中的 IP 地址
sudo ip netns exec $CONTAINER_PID ip address show

# 查看网络命名空间中的路由表
sudo ip netns exec $CONTAINER_PID ip route show

总结

  • iproute2 提供了更现代、更强大的网络管理功能,推荐使用它替代 bridge-utils
  • 通过 ip 命令,可以统一管理网络接口、路由、桥接、命名空间等。
  • 在容器化环境中,iproute2 的网络命名空间功能非常有用,可以轻松配置容器的网络。
作者

deepwzh

发布于

2025-01-08

更新于

2025-02-15

许可协议

评论