# VLAN (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- Network Configuration
- systemd-networkd
- Netctl

翻译状态：本文是 VLAN 的翻译。上次翻译日期：2015-04-28。如果英文版本有所更改，则您可以帮助同步翻译。

本文或本节需要翻译。要贡献翻译，请访问简体中文翻译团队。

附注： 请使用模板的第一个参数进行更详细的指示。（在 Talk:VLAN (简体中文)# 中讨论）

Virtual LANs give you the ability to sub-divide a LAN. Linux can accept VLAN tagged traffic and presents each VLAN ID as a different network interface (eg: `eth0.100` for VLAN ID `100`)

本文介绍如何通过 iproute2 和 systemd-networkd 或 netctl 配置 VLAN 。

## 配置

此前 Arch Linux 用 `vconfig` 命令设置 VLANs ，该命令已被 `ip` 命令取代。请确认 iproute2 已安装。

下面的范例假定 网口 是 `eth0`，名字 是 `eth0.100` ，vlan id 是 `100`。

### 创建 VLAN 设备

用下列命令添加 VLAN 网口：

    # ip link add link eth0 name eth0.100 type vlan id 100

执行 `ip link` 命令确认 VLAN 已创建。

这个 VLAN 网口就像一个普通的物理网口，所有流经这个网口的数据包将被加上 VLAN tag 并流经它关联的物理网口（本例中的 `eth0`）。仅配置为相同 VLAN 的设备可接收这些数据包，否则将被丢弃。 Using a name like `eth0.100` is just convention and not enforced; you can alternatively use `eth0_100` or something descriptive like `IPTV`. To see the VLAN ID on an interface, in case you used an unconventional name:

    # ip -d link show eth0.100

The `-d` flag shows full details on an interface:

    # ip -d addr show
    4: eno1.100@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
       link/ether 96:4a:9c:84:36:51 brd ff:ff:ff:ff:ff:ff promiscuity 0
       vlan protocol 802.1Q id 100 <REORDER_HDR>
       inet6 fe80::944a:9cff:fe84:3651/64 scope link
          valid_lft forever preferred_lft forever

### 添加 IP

Now add an IPv4 address to the just created vlan link, and activate the link:

    # ip addr add 192.168.100.1/24 brd 192.168.100.255 dev eth0.100
    # ip link set dev eth0.100 up

### 关闭设备

To cleanly shutdown the setting before you remove the link, you can do:

    # ip link set dev eth0.100 down

### 移除设备

ex Removing a VLAN interface is significantly less convoluted

    # ip link delete eth0.100

### 开机启动

#### systemd-networkd

Use the following configuration files:

    /etc/systemd/network/eno1.network

    [Match]
    Name=eno1

    [Network]
    DHCP=v4
    VLAN=eno1.100
    VLAN=eno1.200

    /etc/systemd/network/'eno1.100.netdev

    [Netdev]
    Name=eno1.100
    Kind=vlan

    [VLAN]
    Id=100

    /etc/systemd/network/'eno1.200.netdev

    [Netdev]
    Name=eno1.200
    Kind=vlan

    [VLAN]
    Id=200

Then enable `systemd-networkd.service`. See systemd-networkd for details.

#### netctl

You can use netctl for this purpose, see the self-explanatory example profiles in {{ic|/etc/netctl/examples/vlan-{dhcp,static} }}.

## 排错

### udev 重命名虚拟设备

An annoyance is that udev may try to rename virtual devices as they are added, thus ignoring the name configured for them (in this case `eth0.100`).

For instance, if the following commands are issued:

    # ip link add link eth0 name eth0.100 type vlan id 100
    # ip link show

This could generate the following output:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
        link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
    3: rename1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN
        link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff

udev has ignored the configured virtual interface name `eth0.100` and autonamed it rename1.

The solution is to edit `/etc/udev/rules.d/network_persistent.rules` and append DRIVERS=="?*" to the end of the physical interface's configuration line.

For example, for the interface aa:bb:cc:dd:ee:ff (eth0):

    /etc/udev/rules.d/network_persistent.rules

    SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="eth0", DRIVERS=="?*"

A reboot should mean that VLANs configure correctly with the names assigned to them.

Category:

- Networking (简体中文)

Hidden category:

- Pages or sections flagged with Template:Translateme (简体中文)