1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Photon OS (systemd-networkd) における VLAN ネットワーク設定

Posted at

Photon OS は、クラウド環境に最適化された非常に軽量でミニマリストな Linux OS です。

簡単ですが、こちらの記事の冒頭で紹介をしております。

主に仮想環境向けの Linux OS なので、タイトルにあるような「Guest OS 側で、直接 VLAN 設定したい」というシーンは多くは無いと思います。
しかし、たま〜に必要になって、毎回調べるのも面倒なので、備忘として書き残しておきます。

設定ファイルの場所

systemd-networkd の設定ファイル1は、/etc/systemd/network に配置されていますので、まずは、このディレクトリまで移動します。

cd /etc/systemd/network

設定ファイルの種類

systemd-networkd には、複数種類の設定ファイルがありますが、今回は下記の2種類の設定ファイルを作成します。

  • .network
    • [Match] で指定した条件に合致するデバイスに、IP Address や Gateway、DNS などを設定。
  • .netdev
    • 指定された条件で仮想ネットワークデバイスを作成。

今回は、eth0 のサブインタフェースとして、VLAN 31 を振った eth0.31 という仮想ネットワークデバイスを作成し、この eth0.31 に IP Address や Gateway、DNS を設定していきます。
そのため、.network ファイルが eth0eth0.31 で2つ、.netdev ファイルが eth0.31 で1つ、合計3つのファイルを作成します。

一方で、VLAN を割り当てず、普通に IP Address を振るだけであれば、.network ファイルを1つ作成すれば良いです。

具体的な設定

まず、親のインタフェース eth0 に、VLAN のサブインタフェースがあることを教えるための .network ファイルを作成します。

cat << EOF > 10-eth0.network
[Match]
Name=eth0

[Network]
VLAN=eth0.31
EOF

次に、VLAN 31 を振った仮想ネットワークデバイス eth0.31 を作るための .netdev ファイルを作成します。

cat << EOF > 10-eth0.31.netdev
[NetDev]
Name=eth0.31
Kind=vlan

[VLAN]
Id=31
EOF

さらに、作成された eth0.31 の仮想ネットワークデバイスに IP Address や Gateway、DNS を設定するための .network ファイルを作成します。

cat << EOF > 10-eth0.31.network
[Match]
Name=eth0.31

[Network]
Address=172.19.31.80/24
Gateway=172.19.31.254
DNS=8.8.8.8
EOF

最後に!設定ファイルの権限に注意してください!
権限が 644 になっていないと、この後の手順で、設定を反映させようとしてエラーとなります。

chmod 644 10-eth0*.{network,netdev}

補足: 設定ファイル名について

設定ファイル名を 番号-デバイス名.拡張子 としておりますが、ルールが存在しております。
systemd-networkd では、同じディレクトリに複数の設定ファイルがある場合、ファイル名を A -> Z でソートした際に、より先に来るファイルの設定が優先されます。

そのため、同じディレクトリに、こんな感じでファイルがあった場合、

10-eth0.network
99-dhcp-en.network

10-eth0.network で、eth0 に固定 IP アドレスを振りつつ、それ以外のインタフェースについては、デフォルトで DHCP を有効化する、という設定が可能になります。

設定の反映

systemd-networkd を再起動させて、設定を反映させます。

systemctl restart systemd-networkd.service

ip コマンドで、設定が反映されていることを確認します。

# ip a
...(snip)...
3: eth0.31@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:56:93:98:1c brd ff:ff:ff:ff:ff:ff
    inet 172.19.31.80/24 brd 172.19.31.255 scope global eth0.31
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe93:981c/64 scope link
       valid_lft forever preferred_lft forever

補足: トラブルシュートの入口について

ip コマンドで確認しても、意図した設定が反映されていない場合、まずは、systemd-networkd のステータスを確認し、そこに表示されるログを見ることが糸口となります。

systemctl status systemd-networkd.service

参考

  1. 正確には、システムが提供する設定ファイルが格納されるディレクトリ /usr/lib/systemd/network、一時的な実行時の設定ファイルが格納されるディレクトリ /run/systemd/network、そして /etc/systemd/network の順で読み込まれます。後から読み込まれた設定が上書きしていく仕組みです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?