
创建
#创建veth接口对(一条命令创建1个接口对,也就是2个接口,可以理解为2个接口中间连着根线)
ip link add veth-A type veth peer name veth-B
#设置IP
ip addr add 10.1.1.100/24 dev veth-A
ip addr add 10.1.1.101/24 dev veth-B
#拉起来
ip link set veth-A up
ip link set veth-B up
#down掉
ip link set veth-A down
ip link set veth-B down TUN/TAP 设备一端连着操作系统协议栈,另一端连着用户空间的程序:用户空间程序
--- tap0&tun0 --- TCP/IP 协议栈 --- ping
TUN 工作在三层,无 MAC 地址,无法加入网桥;TAP 工作在二层,更接近物理网卡;
TUN 设备常用于 VPN 场景;TAP 设备常用于虚拟机网卡;
简言之,通过对/dev/tap0或者/dev/tun/tun0,也就是socket文件,读写,就相当于在读写网卡。
添加并启动虚拟网卡tap设备
ip tuntap add dev tap0 mode tap
ip tuntap add dev tap1 mode tap
ip link set tap0 up
ip link set tap1 up配置IP
ip addr add 10.0.0.1/24 dev tap0
ip addr add 10.0.0.2/24 dev tap1 # 创建网卡并配置IP
ip tuntap add dev tun0 mode tun
ip link set dev tun0 up
ip addr add 10.0.0.1/24 dev tun0
ip route add 10.0.0.0/24 via 10.0.0.1
# 清除网卡
ip link set dev tun0 down
ip tuntap del dev tun0 mode tunLinux bridge本身是桥接设置,桥配置IP,桥上的接口,不管是虚拟接口,还是物理接口,都不需要配置IP。是靠桥来桥接起来的。
当数据包进入bridge后,会根据目标MAC从不同的接口转发出去。
将物理网卡添加到bridge的场景中,物理网卡上联交换机,之前在物理网卡上的IP,需要设置到bridge地址取代物理网卡。
bridge、物理网卡、veth、tap,这几个之间,使用时其实比较费解。
veth是个link,我理解是网线加2个设备,这2个设备可以分别设置IP,就可以互相ping。
veth在和bridge一起使用时,只设置1端IP,另1端连接到bridge上的不设置IP。
tap是个设备我认为,addif添加到bridge时,tap需要设置IP,这样就能和其他tap通信。
tun是三层,不连bridge。
对应的操作系统路径
旧系统:/var/run/netns
新系统:/run/network
每个命名空间拥有独立的网络栈(路由表、防火墙规则、/proc/net目录等)
默认创建时仅包含lo回环接口(DOWN状态)
命名空间生命周期由内核管理,删除时自动释放所有资源。
创建
ip netns add netns-01删除
ip netns delete netns-01查看
ip netns list将接口加入某个netns
ip link set veth-A netns netns-01设置接口IP
采用持久化的方式设置,跟普通网口一样。
采用ip命令设置也行,如下:
ip addr add X.X.X.X/Y dev <网卡名称>进入网络命名空间执行命令或者启动进程
方法1:使用ip netns exec
ip netns exec netns-01 ip link show方法2:使用nsenter(-t参数表示对应netns中的进程,譬如docker里的进程)
nsenter -t <pid> -n <要执行的命令>(1) 创建vm
ip link set $1 up
ovs-vsctl add-port ${switch} $1(2) 逆向操作
ip addr flush dev $1
ip link set $1 down
ovs-vsctl del-port ${switch} $1创建1个netns,创建1个bridge,创建1个veth接口对,连接netns和bridge。然后再删除清理掉这些。
(1) 创建netns
ip netns add netns-01(2) 创建bridge
#创建bridge
brctl addbr bridge-01
#给bridge设置IP,这个不用命令,直接修改配置文件
ip addr add 10.0.0.1/24 dev veth-A(3) 创建veth接口对(一条命令创建1个接口对,也就是2个接口,可以理解为2个接口中间连着根线)
ip link add veth-A type veth peer name veth-B(4) 将veth-A添加到netns
ip link set veth-A netns netns-01(5) 为veth-A设置IP等
#进入到netns-01网络命名空间设置IP
ip netns exec netns-01 ip addr add 10.0.0.1/24 dev veth-A
#也可以在默认网络命名空间直接设置
#晚点测试
#将接口up起来
ip link set veth-A up(6) 将veth-B接入bridge(bridge添加端口)
#bridge添加if
brctl addif bridge-01 veth-B
#将接口up起来
ip link set veth-B up
#veth-B不需要设置IP, IP在bridge上设置的。(7) 逆向操作
#从网桥上删除接口
brctl delif bridge-01 veth-B
#删除veth端口对
ip link del veth-A
#删除netns
ip netns del netns-01
#删除bridge
brctl delbr bridge-01(1) 创建bridge
brctl addbr br-01bridge持久化配置文件
/etc/sysconfig/network-scripts/ifcfg-br-01
TYPE=Bridge #注意,这个地方一点要大写
DEVICE=br-01 #指定设备名称,一定要与文件名中ifcfg-br-01后的"br-01"相同
ONBOOT=yes #开机启动
IPADDR=X.X.X.X #配置网桥的地址
NETMASK=X.X.X.X
GATEWAY=X.X.X.X #指定网关(2) 创建模拟容器1的netns和veth对
veth-1-A
veth-1-B
ip netns add netns-1
ip link add veth-1-A type veth peer name veth-1-B
ip link set veth-1-A netns netns-1
ip netns exec netns-1 ip addr add X.X.X.X/Y dev veth-1-A
brctl addif br-01 veth-1-B(3) 创建模拟容器2的netns和veth对
veth-2-A
veth-2-B
ip netns add netns-2
ip link add veth-2-A type veth peer name veth-2-B
ip link set veth-2-A netns netns-2
ip netns exec netns-2 ip addr add X.X.X.X/Y dev veth-2-A
brctl addif br-01 veth-2-B(4) 测试
ip netns exec netns-2 ping <veth-1-A的IP>与上面配置完全相同,在模拟容器的netns中,增加路由配置。
其中,默认路由设置成物理网络的网关,不是bridge的IP。
ip netns exec netns-1 ip route add default via X.X.X.1 dev veth0
ip netns exec netns-1 route -rn首先,你需要创建一个bridge设备。你可以使用ip命令或brctl命令来创建bridge。
使用ip命令:
sudo ip link add name br0 type bridge
sudo ip addr add 192.168.1.1/24 dev br0
sudo ip link set dev br0 up或者
使用brctl命令(如果你安装了bridge-utils包):
sudo brctl addbr br0
sudo brctl setfd br0 0 # 设置bridge转发延迟为0
sudo ip addr add 192.168.1.1/24 dev br0
sudo ip link set dev br0 up接下来,创建一个tap设备,并将其设置为启用状态。
sudo ip tuntap add mode tap name tap0
sudo ip link set dev tap0 up现在,将创建的tap设备添加到bridge中。
使用ip命令:
sudo ip link set dev tap0 master br0使用brctl命令:
sudo brctl addif br0 tap0为了验证配置是否成功,你可以查看bridge的状态和连接的接口。
使用ip命令:
ip addr show br0
ip link show br0使用brctl命令:
brctl show br0这些命令将显示bridge的详细信息,包括它连接的接口。你应该能看到你的tap设备(例如tap0)已经成功添加到bridge中。
根据需要,你还可以为tap设备分配IP地址,使其能够通过网络与其他设备通信。例如:
sudo ip addr add 192.168.1.2/24 dev tap0这样,你的tap设备就可以通过bridge与其他网络设备通信了。确保你的网络环境(如路由器或防火墙设置)允许这样的桥接和IP路由。如果你在一个虚拟化环境中(如VMware, VirtualBox等),可能还需要配置虚拟机的网络设置以允许桥接模式。在VirtualBox中,你可以在虚拟机设置里选择“桥接适配器”。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。