VLAN

提供: ArchWiki
移動先: 案内検索

仮想 LAN を使うことで LAN を細分化することができます。Linux は VLAN のタグが付属したトラフィックを扱うことができ、VLAN ID で異なるネットワークインターフェイスを表します (例: VLAN ID 100 ならば eth0.100)。

この記事では iproute2systemd-networkd あるいは netctl を使用して VLAN を設定する方法を説明します。

設定

以前は VLAN を設定するときは Arch Linux では vconfig コマンドが使われていました。今では ip コマンドに置き換わっています。iproute2 がインストールされていることを確認してください。

以下の例では、インターフェイスeth0、割り当てる名前eth0.100vlan id100 とします。

VLAN デバイスの作成

以下のコマンドで VLAN を追加します:

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

ip link を実行して VLAN が作成されたことを確認してください。

作成したインターフェイスは通常のインターフェイスと同じように振る舞います。VLAN に転送されるトラフィックは全てマスターインターフェイス (上記の例では eth0) を通りますが VLAN タグが付属します。VLAN に対応するように正しく設定されたデバイスだけがトラフィックを受け取ることができ、それ以外の場合はトラフィックはドロップされます。

eth0.100 などの名前はあくまで慣習的な名前であり強制ではありません。eth0_100 などとしてもかまいませんし、あるいは分かりやすいように IPTV のように名前をつけることもできます。慣習的な名前を使わなかったときに、インターフェイスの VLAN ID を確認したいときは:

# ip -d link show eth0.100

-d フラグを使うことでインターフェイスに関する詳しい情報が表示されます:

# 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 を追加

作成した vlan リンクに IPv4 アドレスを追加して、リンクを有効化:

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

デバイスを落とす

リンクを削除する前に設定を安全にシャットダウンしたい場合、次を実行:

# ip link set dev eth0.100 down

デバイスを削除

VLAN インターフェイスの削除は簡単です:

# ip link delete eth0.100

ブート時に起動

systemd-networkd

以下の設定ファイルを使ってください:

/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

そして systemd-networkd.service有効化してください。詳しくは systemd-networkd を参照。

netctl

netctl を使うこともできます。サンプルプロファイルの /etc/netctl/examples/vlan-{dhcp,static} を見てください。

トラブルシューティング

udev が仮想デバイスの名前を変更してしまう

厄介なことに、仮想デバイスを追加すると、設定した名前 (上記の例なら eth0.100) を無視して udev が仮想デバイスの名前を変更しようとすることがあります。

例えば、以下のコマンドを実行した場合:

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

以下のような出力がされることがあります:

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 は設定された仮想インターフェイス名 eth0.100 を無視して自動的に rename1 に名前を変更しています。

/etc/udev/rules.d/network_persistent.rules を編集して物理インターフェイスの設定行の一番後ろに DRIVERS=="?*" を追加することで問題は解決します。

例えば、インターフェイスが 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=="?*"

再起動すれば VLAN が設定した名前に正しくなっているはずです。