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でbridgeかrouterモードを指定できます。デフォルトは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