萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 虛擬網卡配置完全指南:IP Alias、macvlan、ipvlan、VLAN、Bridge、TAP/TUN 六大模式

單一物理介面實現多 IP、多網段、容器網路隔離的完整方案

虛擬網卡技術讓單張物理網卡承載多個邏輯介面,支援多 IP 服務、容器網路、VLAN 隔離、VPN 穿透等場景。本文系統梳理六大主流模式原理、配置方法與適用場景。

一、IP Alias (eth0:0) — 最傳統、最簡單

臨時配置(重啟失效)

ip addr add 192.168.10.10/24 dev eth0 label eth0:0
# 或舊指令
ifconfig eth0:0 192.168.10.10 netmask 255.255.255.0 up

持久化配置

CentOS/RHEL (ifcfg):

# /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
IPADDR=192.168.10.10
NETMASK=255.255.255.0
ONBOOT=yes

Ubuntu Netplan:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
        - 192.168.10.10/24  # 直接多 IP,無需 alias 標籤

systemd-networkd:

[Network]
Address=192.168.1.100/24
Address=192.168.10.10/24

特點

  • ✅ 簡單、相容性極好、無效能損耗
  • ❌ 共用同一 MAC 位址,無法用於需要獨立 MAC 的場景(VRRP、DHCP 客戶端、容器網路)
  • ❌ 同屬同一廣播域,無隔離性

二、macvlan — 獨立 MAC、獨立廣播域

模式對照

模式特性適用場景
Private嚴格隔離,macvlan 間無法通訊,需經上層路由多租戶強隔離
VEPA流量送上游交換機,由交換機髮夾回傳(需交換機支援)交換機層面安全策略
Bridgemacvlan 間可直接通訊(預設、最常用)容器網路、虛擬機直通
Passthru單一 macvlan 直通物理介面單容器獨佔網卡

建立 macvlan(Bridge 模式)

# 臨時
ip link add link eth0 name macvlan0 type macvlan mode bridge
ip addr add 192.168.10.20/24 dev macvlan0
ip link set macvlan0 up

# 持久化 systemd-networkd
# /etc/systemd/network/20-macvlan0.netdev
[NetDev]
Name=macvlan0
Kind=macvlan
[MACVLAN]
Mode=bridge

# /etc/systemd/network/25-macvlan0.network
[Match]
Name=macvlan0
[Network]
Address=192.168.10.20/24

Docker macvlan 網路

docker network create -d macvlan \
  --subnet=192.168.10.0/24 \
  --gateway=192.168.10.1 \
  -o parent=eth0 \
  macvlan_net

docker run --net=macvlan_net --ip=192.168.10.50 -it ubuntu bash

⚠️ 限制:宿主機無法直接與 macvlan 容器通訊(需建立同模式 macvlan 或經路由)。

三、ipvlan — 共用 MAC、L3 隔離、效能更優

模式

  • L2 (預設):類似 macvlan bridge,但共用父介面 MAC
  • L3:純路由模式,無廣播域,最輕量,適合容器網路

建立 ipvlan L3

ip link add link eth0 name ipvlan0 type ipvlan mode l3
ip addr add 192.168.10.30/24 dev ipvlan0
ip link set ipvlan0 up
# 需在宿主機啟用路由轉發
echo 1 > /proc/sys/net/ipv4/ip_forward

優缺點

  • ✅ 無 MAC 衝突風險、支援更多虛擬介面、L3 模式無廣播風暴
  • ❌ 共用 MAC 可能觸發交換機 Port Security、部分舊驅動不支援

四、VLAN (802.1Q) — 二層邏輯隔離

建立 VLAN 子介面

# 臨時
ip link add link eth0 name eth0.100 type vlan id 100
ip addr add 192.168.100.10/24 dev eth0.100
ip link set eth0.100 up

# 持久化 ifcfg
# /etc/sysconfig/network-scripts/ifcfg-eth0.100
DEVICE=eth0.100
BOOTPROTO=static
IPADDR=192.168.100.10
NETMASK=255.255.255.0
VLAN=yes
ONBOOT=yes

# Netplan
network:
  version: 2
  vlans:
    eth0.100:
      id: 100
      link: eth0
      addresses: [192.168.100.10/24]

交換機端需配置 Trunk Port 允許對應 VLAN ID

五、Linux Bridge — 虛擬交換機、容器/虛擬機網路基石

建立 Bridge 並掛載物理介面

# 安裝工具
yum install -y bridge-utils
# 或 iproute2 (ip link)

# 臨時
ip link add name br0 type bridge
ip link set eth0 master br0
ip addr add 192.168.1.10/24 dev br0
ip link set br0 up
ip link set eth0 up

# 持久化 systemd-networkd
# /etc/systemd/network/10-br0.netdev
[NetDev]
Name=br0
Kind=bridge

# /etc/systemd/network/20-br0.network
[Match]
Name=br0
[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=114.114.114.114

# /etc/systemd/network/20-eth0.network
[Match]
Name=eth0
[Network]
Bridge=br0

掛載 TAP/TUN 裝置(虛擬機/容器)

# 建立 TAP 裝置
ip tuntap add dev tap0 mode tap user $(whoami)
ip link set tap0 master br0
ip link set tap0 up

# 或使用 tunctl (舊工具)
tunctl -t tap0 -u $(whoami)
brctl addif br0 tap0

六、TAP/TUN — 用戶空間網路程式介面

類型層級處理封包典型應用
TUNL3 (IP)IP 封包VPN (OpenVPN、WireGuard)、路由器
TAPL2 (Ethernet)乙太網幀虛擬機 (QEMU/KVM)、橋接 VPN、L2TP

程式化開啟 (Python 範例)

import os, fcntl, struct
TUNSETIFF = 0x400454ca
IFF_TUN = 0x0001
IFF_TAP = 0x0002
IFF_NO_PI = 0x1000

tun = os.open('/dev/net/tun', os.O_RDWR)
ifr = struct.pack('16sH', b'tun0', IFF_TUN | IFF_NO_PI)
fcntl.ioctl(tun, TUNSETIFF, ifr)
# 現在可從 tun 讀寫 IP 封包

七、方案選擇決策樹

需要獨立 MAC 位址?
├── 是 → 需要 L2 隔離/廣播域?
│   ├── 是 → macvlan (Bridge/VEPA 模式) / VLAN
│   └── 否 → ipvlan L3 / macvlan Private
└── 否 → 只是多 IP 服務?
    ├── 是 → IP Alias / Netplan 多 Address / systemd-networkd 多 Address
    └── 否 → 容器/虛擬機網路?
        ├── 虛擬機 (KVM/QEMU) → Bridge + TAP
        ├── 容器 (Docker/Podman) → macvlan / ipvlan / bridge (docker0) / host
        └── VPN → TUN (L3) / TAP (L2)

八、驗證與除錯指令

# 查看所有介面
ip -br link
ip -br addr

# 查看 Bridge 狀態
bridge link
bridge fdb show dev br0

# 查看 VLAN
cat /proc/net/vlan/eth0.100

# 查看 macvlan/ipvlan
ip -d link show macvlan0

# 抓取特定虛擬介面封包
tcpdump -i macvlan0 -nn
tcpdump -i br0 -nn
copyright © 萬盛學電腦網 all rights reserved