Linuxコンテナ(LXC)のネットワーク設定

カテゴリ:コンテナ仮想化

この記事ではLXCのネットワーク設定について解説いたします。

Note以降は CentOS 8 + LXC 3.0.4 環境での手順となります。

LXCではbridge-utilsを使用して仮想ネットワークを構築して使用します。以下のコマンドで bridge-utils をインストールしましょう。

# yum -y install bridge-utils

注意CentOS 8では bridge-utils パッケージは削除されています。
参考:A.4. 削除されたパッケージ

ホストとコンテナ間でファイルやディレクトリを同期するために、rsync もインストールしておきます。

# yum -y install rsync

ブリッジインターフェースの確認

nmcli device コマンドでネットワークデバイスを確認します。
# nmcli device
DEVICE      TYPE      STATE     CONNECTION
ens33       ethernet  接続済み  ens33
virbr0      bridge    接続済み  virbr0
lo          loopback  管理無し  --
virbr0-nic  tun       管理無し  --

virbr0は、CentOS 7/8でデフォルトで存在するlibvirtdが作成したブリッジインターフェースです。本記事ではこのvirbr0をLXCのブリッジインターフェースとして利用します。

virbr0にはデフォルトで192.168.122.1/24のIPアドレスが設定されています。veth(仮想ネットワークインターフェース)を使用する場合、コンテナにはこのネットワーク(192.168.122.0/24)のIPアドレスが割り振られます。

# ip addr show dev virbr0
3: virbr0:  mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:1c:ae:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

コンテナのネットワーク設定

lxc-createコマンドでコンテナを作成後、ネットワーク設定(/var/lib/lxc/コンテナ名/config)を確認します。通常、以下が自動で設定されているはずです。

例)centosという名前のコンテナを作成した場合

/var/lib/lxc/centos/config

# Network configuration
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:71:87:e5

virbr0からIPアドレスを割り振る場合

vethを使用する場合は、virbr0ブリッジインターフェースからIPアドレスを割り振るように、lxc.net.0.linkの値をvirbr0に変更します。

例)

# Network configuration
lxc.net.0.type = veth
# lxc.net.0.link = lxcbr0
lxc.net.0.link = virbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:71:87:e5

lxc-startコマンドでコンテナを起動後、virbr0のネットワークのIPアドレスが割り振られていることが確認できます。

# ip addr show dev eth0
20: eth0@if21:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:71:87:e5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.122.150/24 brd 192.168.122.255 scope global dynamic noprefixroute eth0
       valid_lft 3588sec preferred_lft 3588sec
    inet6 fe80::216:3eff:fe71:87e5/64 scope link
       valid_lft forever preferred_lft forever

ホストのネットワークを共有する場合

ホストのネットワークを共有する場合はlxc.net.0.typeの値をnoneに変更します。

例)

# Network configuration
# lxc.net.0.type = veth
lxc.net.0.type = none
# lxc.net.0.link = lxcbr0
lxc.net.0.link = virbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:71:87:e5

参考lxc.net.[i].typeのデフォルト値はvethですが、ホストのネットワーク名前空間を共有する場合はnoneを指定します。またループバックインターフェースだけを作成する場合は、emptyを指定します。vethを指定している場合は、lxc.net.[i].veth.modeでbridgerouterモードを指定できます。デフォルトはbridgeモードです。

lxc-startコマンドでコンテナを起動後、コンテナ側でホストのネットワークが共有されていることが確認できます。

# ip addr show dev ens33
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:62:f8:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.27/24 brd 192.168.11.255 scope global dynamic noprefixroute ens33
       valid_lft 172154sec preferred_lft 172154sec
    inet6 2408:210:c5c4:7e00:3fa1:3c1d:2c0a:edb5/64 scope global dynamic noprefixroute
       valid_lft 2591698sec preferred_lft 604498sec
    inet6 2408:210:c5c4:7e00:2c84:2819:29fc:463/64 scope global dynamic noprefixroute
       valid_lft 2591698sec preferred_lft 604498sec
    inet6 fe80::674b:d7ee:ee4e:dfd3/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

公開日時:2020年08月27日 12:16:52
最終更新日時:2022年03月13日 08:33:43

なお、VPS選びで迷ったらこちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

コンテナ仮想化に戻る

「コンテナ仮想化」に関する他の手順

このページのトップに戻る