さくらVPSでLXCを使う(dummynet+bridge+proxy arp)

さくらインターネットの提供するVPSサービスではDebianが利用できます。VPSのホストはKVMで提供されているようです。VPSのインスタンス一つで別の仮想的な環境が欲しくなったので、LXCを使ってみました。 ループバックインターフェースを持つだけのホストは簡単に作れるのですが、VPSに割り当てられているNICインターフェースをブリッジにするわけにもゆきません。そこで今回はdummynetを利用してホストオンリーネットワークを構築してみました。 dummynetは物理NICとは結びつかない、完全なダミーのネットワークインターフェースを提供します。インターフェース名はdummy0などとなります。使うには単純にmodprobe dummy等としてdummy.koをロードするだけです。Debianで起動時に有効にするためには、/etc/modulesに一行”dummy”と追加しておけばよいです。 次にdummy0をLXCから使えるよう、ブリッジを作ります。 apt-get install bridge-utilsを実行してネットワークブリッジデバイスを扱うためのツール一式を入れておきます。次に/etc/network/interfacesに以下のような記述を追加します。 IPアドレスやネットワークは、別途自分が普段使う範囲とバッティングしない、適当なプライベートネットワークを設定してください。 この状態でifup br0を実行すれば、dummy0デバイスに紐づいたブリッジデバイスbr0が作られます。auto br0を入れてあるので、再起動時にも自動的にbr0がifupします。 この状態で、lxc-create等を使ってLXCコンテナのインスタンスを作成します。ただ、Debian wheezyのlxcパッケージはかなりbuggyで、あんまり動作が信用なりません。私は個人的にsidのlxcをバックポートしたものを使っています。 以下は私の作ったlxcコンテナのconfigの一部です。 私は、コンテナ側の/etc/network/interfacesにeth0のネットワーク設定を書いて設定しています。 基本的にはこれでホストオンリーな環境ができます。しかし、メンテナンス上コンテナ側でも毎日apt-getはしたいので、私の環境ではNAT(masquerade)をできるようにしています。 この時に問題になるのがarpとfowardingです。何も設定しない状態では、br0から外に出ることができません。 まずbr0でproxy arpを有効化します。設定方法はsysctlを使うか、echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arpを実行するかして有効化します。これでbr0から他のインターフェース(eth0等)へ届くようになります。起動時に有効にするためには、interfacesにさらなる設定を追加します。 次はforwardingです。これもprocでも設定できますが、私は以下の内容を書いたファイルを/etc/sysctl.d/ip_forward.confとしています。 最期にNATの設定です。/etc/iptables/rules.v4に以下のような行を書いておきます。コマンドであれば、iptables -A POSTROUTING -s 172.23.186.0/24 -o eth0 -j MASQUERADEという具合です。 これで、VPS上でも外部ネットワークに到達可能なLXCインスタンスを持つことができます。もちろん、静的NATを組み合わせれば、一部のポートをインターネット側で受けることもできます。

Published
Categorized as その他