2026年7月10日
2026年7月10日
VLAN を設定する方法|Linuxサーバーと仮想化ホストでタグ付きVLANを使う手順
1本のケーブルで複数のVLANに参加させたいサーバーや仮想化ホストでは、スイッチ側のポートをトランクにし、Linux側でVLANインターフェース(802.1Q のタグを扱うインターフェース)を作ります。この記事では、サーバー側でVLANを設定する手順を、NetworkManager(nmcli)での設定、ボンディングとの組み合わせ、仮想マシンに複数のVLANを渡すためのLinuxブリッジ、確認方法と、複数のVLANにIPを持たせたときに起きやすい経路の問題まで順に説明します。スイッチ側でVLANを設計する話や、サーバーを1つのVLANにだけつなぐアクセスポートの設定は扱わず、サーバー・ホストの側に絞ります。
設定の前提を確認する
サーバー側でVLANインターフェースを作るのは、サーバーがタグ付きのフレームを送受信する場合です。次の点を先に確認します。
- スイッチ側のポートがトランクか:つなぐポートがトランクで、使うVLANが許可されている必要があります。アクセスポートのままだと、サーバーが付けたタグ付きフレームは通りません。逆に、サーバーを1つのVLANにだけ参加させるなら、スイッチ側をアクセスポートにして、サーバーには通常のインターフェースとしてIPを設定するほうが単純です。
- ネイティブVLAN:トランクでタグなしで流れるVLANのことです。サーバーの親インターフェース(
ens192など)に直接IPを付けると、このVLANに参加することになります。意図していない場合は、親インターフェースにはIPを付けません。 - VLANごとのアドレス:VLAN ID、サブネット、ゲートウェイ、DNSを一覧にしておきます。
- 作業経路:VLANの設定ミスで管理用の接続が切れることがあります。リモートで作業する場合は、IPMI などのコンソールや別のNICで入れる経路を用意しておきます。
手順1:一時的な設定で動作を確かめる
まず ip コマンドで、タグ付きの通信ができるかを確かめます。この設定は再起動で消えます。
sudo ip link add link ens192 name ens192.20 type vlan id 20
sudo ip addr add 192.168.20.10/24 dev ens192.20
sudo ip link set ens192.20 up
# VLAN ID が付いているか確認
ip -d link show ens192.20
# 同じVLANのゲートウェイに届くか
ping -c 3 192.168.20.1
ゲートウェイに届かない場合は、恒久設定に進む前にスイッチ側の許可VLANを見直します。確認が済んだら sudo ip link del ens192.20 で削除しておきます。
手順2:NetworkManager で恒久設定にする
RHEL、AlmaLinux、Rocky Linux など、NetworkManager でネットワークを管理している環境では nmcli で設定します。
sudo nmcli connection add type vlan con-name vlan20 ifname ens192.20 \
dev ens192 id 20 \
ipv4.method manual ipv4.addresses 192.168.20.10/24 \
ipv4.gateway 192.168.20.1 ipv4.dns 192.168.20.1
sudo nmcli connection up vlan20
# 設定内容と状態を確認
nmcli connection show vlan20 | grep -E 'vlan\.|ipv4\.'
nmcli device status
インターフェース名(ifname)は15文字までという制限があります。親インターフェースの名前が長い場合は、vlan20 のような短い名前にします。
Ubuntu など netplan を使う環境では、vlans: の項目で同じ内容を書き、sudo netplan try で適用します。netplan try は、確認の操作をしないまま一定時間が過ぎると元の設定に戻るため、リモートでの作業に向いています。nmcli にはこの仕組みがないため、別経路のコンソールを用意してから適用してください。
手順3:ボンディングの上にVLANを作る
2本のNICを束ねて冗長化する場合は、先にボンディングのインターフェース(例:bond0)を作り、その上にVLANを作ります。順番を逆にすると、VLANごとに別々のボンディングが必要になり、管理が煩雑になります。
# bond0 が作成済みの前提で、その上に VLAN 20 を作る
sudo nmcli connection add type vlan con-name bond0.20 ifname bond0.20 \
dev bond0 id 20 \
ipv4.method manual ipv4.addresses 192.168.20.10/24 ipv4.gateway 192.168.20.1
ボンディングのモードを LACP(802.3ad)にする場合は、スイッチ側にもポートチャネル(リンクアグリゲーション)を設定し、そのポートチャネルをトランクにします。スイッチ側の対応や設定方法は機種によって異なります。
手順4:仮想マシンに複数のVLANを渡す
KVM などの仮想化ホストで、仮想マシンごとに異なるVLANへつなぎたい場合は、Linuxブリッジを使います。方法は2つあります。
VLANごとにブリッジを作る方法
ens192.20 を親にした br20、ens192.30 を親にした br30 のように、VLANごとにブリッジを作り、仮想マシンのNICをつなぐブリッジで所属を決めます。仕組みが単純で、どのVLANに何がつながっているかを把握しやすい方法です。VLANの数が少ないうちはこちらで十分です。
VLAN対応ブリッジ(vlan_filtering)を使う方法
1つのブリッジでVLANを扱う方法です。ブリッジのポートごとに、通すVLANとタグの扱いを設定します。
sudo ip link add br0 type bridge vlan_filtering 1
sudo ip link set ens192 master br0
sudo ip link set br0 up
# 物理NIC側(スイッチへのトランク)で VLAN 20 と 30 をタグ付きで通す
sudo bridge vlan add dev ens192 vid 20
sudo bridge vlan add dev ens192 vid 30
# 仮想マシンのインターフェース(例: vnet0)を VLAN 20 のタグなしポートにする
sudo bridge vlan add dev vnet0 vid 20 pvid untagged
sudo bridge vlan del dev vnet0 vid 1
# 設定を確認
bridge vlan show
ブリッジに参加したポートには、既定で VLAN 1 がタグなしで割り当てられます。残しておくと意図しないVLANに参加することがあるため、上の例では削除しています。物理NICの ip addr は、ブリッジに参加させるとそのままでは使えなくなります。ホスト自身の管理用IPをどこに持たせるかを、作業の前に決めておいてください。
Proxmox VE などの仮想化製品では、ブリッジのVLAN対応や仮想NICのVLANタグを管理画面から設定できます。画面の表記は版によって異なります(2026年10月現在)。
手順5:複数のVLANにIPを持たせるときの経路
サーバーが VLAN 20 と VLAN 30 の両方にIPを持つと、デフォルトゲートウェイの扱いが問題になります。両方に設定するとどちらが使われるかが分かりにくくなり、片方だけに設定すると、もう片方のVLANの外から届いた通信への応答が、別のVLANのゲートウェイから出ていきます。この「行きと帰りで経路が違う」状態は、カーネルの rp_filter(送信元の経路を確かめる機能)や、経路上のファイアウォールに落とされる原因になります。
対処は用途で選びます。
- 2つ目のVLANは同じサブネット内の通信だけに使う:2つ目にはゲートウェイを設定しません。nmcli では
ipv4.never-default yesを指定すると、その接続がデフォルト経路にならなくなります。 - 両方のVLANの外部と通信する:送信元のアドレスごとに経路表を分けるポリシールーティングを設定します。設定は複雑になるため、検証環境で動作を確かめてから本番に入れます。
確認方法とつまずきやすい点
- タグが届いているか:
sudo tcpdump -e -n -i ens192 vlan 20で、VLAN 20 のタグ付きフレームが見えるかを確認します。何も出なければ、スイッチ側の許可VLANの不足を疑います。 - VLAN IDの一覧:
ip -d link show type vlanで、作成したVLANインターフェースとIDを確認できます。 - ゲートウェイに届かない:同じVLANの別の機器から到達できるかを確かめ、サーバー側かスイッチ側かを切り分けます。
- MTU:通常のスイッチはタグ付きフレームを扱えるため、VLANインターフェースのMTUは親と同じ1500のままで問題ないことがほとんどです。VXLAN などのトンネルを重ねる場合は、その分を考慮します。
まとめ
- サーバー側でVLANを設定するのは、タグ付きで複数のVLANに参加させる場合。スイッチ側のポートはトランクにし、使うVLANを許可しておく
- まず
ip linkで一時的に試し、届くことを確認してから nmcli や netplan で恒久設定にする - ボンディングと組み合わせる場合は、ボンディングの上にVLANを作る
- 仮想マシンにVLANを渡す方法は、VLANごとのブリッジとVLAN対応ブリッジの2つ。VLAN対応ブリッジでは既定の VLAN 1 の扱いに注意する
- 複数のVLANにIPを持たせるときは、デフォルトゲートウェイを1つにするか、ポリシールーティングで経路を分ける