14
14

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 5 years have passed since last update.

[FreeBSD jail]ホストと同じIPアドレスを持ったjailの作り方

Last updated at Posted at 2014-08-06

はじめに

IPアドレスがひとつしか貰えないVPSで、サービスごとのコンテナを作って運用したい。
しかもFreeBSDで。

...というわけで、さくらのVPSで実際にやってみました。

概要

ターゲットは、FreeBSD 10.0-RELEASEです。
コンテナは、FreeBSDに標準機能のjailを使用します。現段階ではezjail等のサポートツールは使用しません。

jail(監獄)になぞらえて以降は、ホストはJailer(看守)、コンテナはPrisoner(囚人)と書きます。

手順

FreeBSD 10.0 RELEASEがインストール済みであることを前提にします。

Prisonerのファイルを用意

Prisonerを置くディレクトリを作成します。
例として、/home/jailsとします。

# mkdir /home/jails

bsdinstallerを使ってファイルを用意します。
baseという名前でPrisonerを作成します。

# cd /home/jails
# bsdinstall jail base

ミラーサイトの選択の後、追加パッケージの選択になります。
ここでは、lib32があれば十分です。
ウィザードに従い、インストールを終わらせます。

jailの設定ファイルを作成

Jailerにjailの設定ファイルを作成します。

[/etc/jail.conf]
exec.start = "/bin/sh /etc/rc";
exec.stop  = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
path = "/home/jails/$name";
host.hostname = $name;

base {
        ip4.addr = <JailerのIPアドレス>;
        allow.chflags;
        allow.raw_sockets;
}

baseというPrisonerに対して、

  • Jailerと同じIPアドレスを割り当て
  • RAW SOCKETの使用許可(ping等が使用できるようにするため)
  • chflagsの使用許可(freebsd-updateが実行できるようにするため)

を与えています。

Prisonerの起動とコンソール立ち上げ

JailerでPrisonerを起動します。

# service jail onestart base

引き続き、シェルを起動しPrisonerの環境に入ります。

# jexec base /bin/csh

シェルが起動すれば、Prisonerの環境下でpkgコマンドでパッケージを追加することも可能です。
PrisonerのコンソールでexitすることでJailer環境のシェルに戻ります。

おわりに

公式のFreeBSDハンドブックを始めJailerとPrisonerは別のIPアドレスを使う説明がほとんどで、小飼さんのブログを読むまで同じIPアドレスが使用できることを知りませんでした。
VIMAGEでJailerとPrisonerでプロトコルスタックを分離してnaptとか考えてましたが、そんな難しいことをする必要はありませんでした。

Dockerがキッカケでコンテナ化が注目を集めていますが、FreeBSDにもずーっとjailという手段があるということ知っていただければと思います。

14
14
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
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?