FreeBSD · 2 min read · Jan 24, 2026
FreeBSDでVNCサーバーを使用したジェイルの作成
FreeBSDでVNCサーバーを使用したジェイルの作成
この記事では、FreeBSDのジェイル内でVNCサーバーを実行する方法を説明します。
ソースからのジェイルの作成:
ジェイルを保存するディレクトリを作成します:
# mkdir -p /home/jailsまたは/usrディレクトリに:
# mkdir -p /usr/jails# mkdir /home/jails/testjail/usr/srcディレクトリに移動し、FreeBSDのソースコードがあるか確認します。
# cd /usr/src# lsそのようなものが表示されるはずです:
COPYRIGHT contrib release
LOCKS crypto rescue
MAINTAINERS etc sbin
Makefile games secure
Makefile.inc1 gnu share
ObsoleteFiles.inc include sys
README kerberos5 tools
UPDATING lib usr.bin
bin libexec usr.sbin空のディレクトリまたはsysディレクトリのみがある場合は、FreeBSDのソースコードをインストールする必要があります: sysinstallを実行するか、cvsからソースコードをダウンロードできます。
# sysinstall設定に移動し、ディストリビューションを選択して「src」を選択し、okを押します。その後、/usr/src/ディレクトリにすべてのソースコードがあるはずです。その後、cvsから最新バージョンでソースコードを更新する必要があります。ホームディレクトリまたは他の場所に「stable-supfile」というファイルを作成する必要があります。
# vi ~/stable-supfile以下のような行を追加します:
# Your closer mirror of freebsd source code, for me is from Poland
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# for version 7.2 of FreeBSD you put RELENG_7_2 7.1 - RELENG_7_1 7.0 - RELENG_7_0 6.4 RELENG_6_4
*default release=cvs tag=RELENG_7_2
*default delete use-rel-suffix
*default compress
src-all次に、ファイルを保存した後、csupでFreeBSDのソースコードを更新できます:
# csup /root/stable-supfileその後、ソースコードからジェイルをコンパイルできます:
# cd /usr/src# make world DESTDIR=/home/jails/testjail# make distribution DESTDIR=/home/jails/testjail一度Worldをコンパイルすると、もう一度Worldをコンパイルせずに2つのコマンドで新しいジェイルを作成できます:
# make installworld DESTDIR=/home/jails/otherjail# make distribution DESTDIR=/home/jails/otherjailジェイルが準備できたら、いくつかの設定ファイルに変更を加える必要があります。
# vi /home/jails/testjail/etc/rc.confそこに以下を追加します:
sendmail_enable="NONE"
sshd_enable="YES"# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstab初めてのジェイルの実行:
ジェイルを実行するには、devfsをジェイルにマウントする必要があります:
# mount -t devfs devfs /home/jails/testjail/dev次に、ネットワークインターフェースにエイリアスを設定する必要があります。私のFreeBSDではbge0インターフェースがあり、エイリアスは次のように作成します:
# ifconfig bge0 alias 192.168.2.2ジェイルを実行:
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcshジェイル内にいるときに、rootパスワードを設定できます:
# passwd次に、ssh経由でジェイルにアクセスできるように、1つの非rootアカウントを追加する必要があります。
# adduserジェイルを離れるには、exitコマンドを使用する必要があります。
# exitあなたのジェイルはほぼ準備が整いました。/etc/rc.confファイルにいくつかの行を追加する必要があり、その後、サーバーが起動するときにジェイルが起動します。
# alias to your network interface
ifconfig_bge0_alias0="192.168.2.2"
# line that enabling jails in freebsd
jail_enable="yes"
# list of your jails ex. “testjail otherjail httpjail sshjail”
jail_list="testjail"
jail_testjail_rootdir="/home/jails/testjail"
jail_testjail_hostname="testjail"
jail_testjail_ip="192.168.2.2"
jail_testjail_exec_start="/bin/sh /etc/rc"
jail_testjail_exec_stop="/bin/sh /etc/rc.shutdown"
jail_testjail_devfs_enable="YES"ジェイル内にポートツリーを持ちたいが、複製したくない場合は、/etc/fstabファイルに1行を追加して/usr/ports/ディレクトリをジェイルにマウントできます。次のような行:
/usr/ports /home/jails/testjail/usr/ports/ nullfs rw,auto 0 0システムを再起動せずにジェイルを起動および停止:
# /etc/rc.d/jail start testjail# /etc/rc.d/jail stop testjailジェイルのリストを取得したい場合は、次のコマンドで取得できます:
# jlsパッケージからジェイル内にxorgとvncをインストール:
# pkg_add –r xorg# pkg_add –r vncユーザーアカウントでvncを実行するには、次のように入力します:
$ vncserver初めてvncserverを実行するときは、vnc接続のためのパスワードを設定する必要があります。
デフォルトでは、vncに接続するとtwmが実行されます。~/.vnc/xstartupファイルを編集することで変更できます。最後の行を「twm &」から「wmaker &」などに変更する必要があります。
vncジェイルに接続するには、vncviewerでjail_ip_addressとvncポートを入力する必要があります。例: 192.168.2.2:1
ジェイル内のvncに関するいくつかのエラー: 色を認識しないというメッセージが表示された場合は、/usr/local/bin/vncserwerファイルを編集し、次の行を変更する必要があります:
$cmd .= " -co /usr/X11R6/lib/X11/rgb";「!!!!!!!!!!!!!!!!!!!!!!!!!! no free display on jailname」というメッセージが表示された場合は、/usr/local/bin/vncserverを編集し、CheckDisplayNumber関数内の2行のpack関数をsockaddr_inに変更する必要があります:
[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]コードは次のようになります:
sub CheckDisplayNumber
{
local ($n) = @_;
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(6000 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(5900 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);ジェイルのためのIPFWでのポートフォワーディング
ジェイルにポートを転送したい場合は、いくつかのオプションを有効にしたFreeBSDカーネルをコンパイルしている必要があります:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_FORWARD
options IPDIVERTポートフォワーディングルール:
ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
ex.
ipfw add fwd 192.168.2.2,21 tcp from any to me 21
ipfw add fwd 192.168.2.2,21 tcp from any to 72.46.154.23 21新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。