複数のユーザによるコンテナの作成とネットワーク構成
ここでは,
Plamo Linuxでは,cgroup-mount
というinitスクリプトと,lxc-net
というinitスクリプトは,
~$ sudo chmod +x /etc/rc.d/init.d/cgroups-mount ~$ sudo chmod +x /etc/rc.d/init.d/lxc-net
なお,libcgroup
パッケージをインストールしていて,cgconfig
を起動させている場合は,cgroup-mount
を起動させる必要はありません。
また,
~$ cat /etc/rc.d/init.d/cgroups-mount-user #!/bin/sh # mount cgroup filesystems per subsystem for user name space USERNS="taro hanako" start() { echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy for c in /sys/fs/cgroup/* ; do echo 1 > $c/cgroup.clone_children for u in $USERNS ; do mkdir -p $c/$u chown -R $u $c/$u if [ ${c##*/} == cpuset ] ; then echo 0 > $c/$u/cpuset.cpus echo 0 > $c/$u/cpuset.mems fi done done } stop() { : } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0
新たなユーザでのコンテナの作成に先立ち,/etc/{subuid,subgid}
の設定を行ってください。200000から65536個のUID/hanako
というユーザに割り当てます。
~$ sudo usermod -v 200000-265535 -w 200000-265535 hanako ~$ cat /etc/subuid taro:100000:65536 hanako:200000:65536 ~$ cat /etc/subgid taro:100000:65536 hanako:200000:65536
また,lxc-create
コマンド実行時に読み込まれるhanako
ユーザ用のデフォルトファイル~/.config/
)/etc/{subuid,subgid}
の設定と合うように設定してください。
~$ cat ~/.config/lxc/default.conf lxc.id_map = u 0 200000 65536 lxc.id_map = g 0 200000 65536 lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up
hanako
ユーザのコンテナを作成します。
~$ lxc-create -n ct01 -t download -- -d plamo -r 5.x -a amd64
次に,/etc/
を編集します。各ユーザがveth
タイプのインタフェースをlxcbr0
にアタッチする形で,
~$ cat /etc/lxc/lxc-usernet taro veth lxcbr0 2 hanako veth lxcbr0 2
これで,
~$ for c in /sys/fs/cgroup/* ; do echo $$ > $c/$USER/tasks ; done
いよいよコンテナを起動します。Plamo Linuxのデフォルト設定では,/etc/
を適切に設定するのを忘れないでください。
iptablesのNAT(IPマスカレード)機能を利用する方法
Plamo LinuxのLXCパッケージで,
ホストOSの物理NICが有線/無線にかかわらず,
外部と通信する際は,
物理NIC(有線)を仮想ブリッジに接続する方法
外部のサーバからコンテナに接続する必要がある場合は,
ホストOSでのネットワークの設定は,br0
という仮想ブリッジを作成し,/etc/
)
~$ sudo ip link set dev eth0 up promisc on ~$ sudo brctl addbr br0 ~$ sudo brctl addif br0 eth0 ~$ sudo dhclient br0
各ユーザのLXCのネットワーク設定を以下のように変更します。
~$ cat ~/.config/lxc/default.conf | grep network lxc.network.type = veth lxc.network.link = br0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx
lxc.
の"xx:xx:xx
"の部分は,lxc-create
コマンドを実行するとランダムな値に変換して,~/.local/
)
LXCでは,00:16:3e
"として使うように,54:52:00
"として使うように,
この接続方法は,
物理NIC(無線)を仮想ブリッジに接続する方法
仮想ブリッジは,
そこで,tunctl
uml_
パッケージ),parprouted
parprouted
パッケージ),bcrelay
pptpd
パッケージ)
ホストOSでのネットワークの設定は,tap0
というtapデバイスを作成,br0
とtap0
をブリッジし,br0
にDHCPレンジ外のスタティックIPアドレスを付与して起動します。そして,parprouted
でwlan0
に飛んできたARPリクエストをbr0
にも転送,bcrelay
でブロードキャストparprouted
は,/etc/
)
~$ sudo ip link set dev wlan0 up ~$ sudo brctl addbr br0 ~$ sudo tunctl -t tap0 ~$ sudo brctl addif br0 tap0 ~$ sudo ip addr add 192.168.1.100/24 dev br0 ~$ sudo ip link set dev br0 up ~$ sudo parprouted wlan0 br0 ~$ sudo bcrelay -d -i br0 -o wlan0 ~$ sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0 ~$ sudo dhclient wlan0
各ユーザのLXCのネットワーク設定は,
まとめ
今回は,lxc-create
コマンドを使ってコンテナを作成するときの,
次回は,