VLAN - Arch Linux 中文维基

跳转到内容

# VLAN

来自 Arch Linux 中文维基

本文或本节内容已经过时。

原因： 请提供模板的第一个位置参数以概括原因。 (在Talk:VLAN讨论)

相关文章

- Network Configuration
- systemd-networkd
- Netctl

翻译状态：

- 本文（或部分内容）译自 VLAN，最近一次同步于 2015-04-28，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

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

附注： 请提供模板的第一个位置参数以更详细的指示。（在 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.

分类：​

- 使用“模板:过时”标记的页面或章节
- 网络

隐藏分类：​

- 使用“模板:Translateme”标记的页面或章节

VLAN
添加话题