バスティーユ牢獄の運営

## 遅れた言い訳：
なんか「QIITAよくわかってない」ので、下書きに入れっぱで勝手に投稿してくれるんだと思っていた！！！
「自動で投稿します」とかイウナー！と叫んで、記事の更新もします。

## バスティーユ牢獄の長官ベルナール・ルネ・ジュールダン・ローネー曰く 「もうたくさんだ！＊＊＊」

まあ、ユーザ数の比率から申し上げて　今更　「攻めの FreeBSD」 というのは、ちょっと無理が有るかもしれませんが、最近 OSコンテナを毎日１個建てています。　ZFSで裏打ちされた FreeBSDコンテナはストレージを消費する代わりに、何時でもスナップショットを取りつつ、クローン、テスト、バックステップ思いのままにシステムを有るべき方向に修正していくことができます。　よってコンテナの数は資源が許す数作ることができます。すでに物理サーバの数も管理に苦労していたところに恐ろしいほどのOSコンテナを抱えています。

~~戦いは数だよ兄貴~~

## バスティーユ牢獄における VNET-JAIL の建て方

* VNETのブリッジ名について。 
bastille は非常に使い勝手がよく、私のような~~無能なかんりしゃ~~^H^H^H管理者でもさほど苦労せず VNET-JAIL を建てられます。素晴らしい！　とはいえ、VNET-JAILを一個だけ建てるということもありますまい。複数の牢獄建屋が同じVNET/Bridgeにぶら下がるのは、不都合を生じることがわかります。なぜなら

-- 牢獄の　起動時にブリッジを作る
-- なにかの都合で牢の設定を変えて再起動するとブリッジが作り直される

というような普段の管理業務で、ブリッジにぶら下がっている他の牢がブリッジから分離されてしまうことが容易にあります。　bastille の作成者もよくわかっているので、bastille0 が埋まっていれば bastille1 と、仮想ループバックデバイスを指定しますが、これもすでに非VNET牢獄が使っていることがあります。
ということで、以下の安全処置を行います（最近の更新でやらなくても大丈夫になっているかもだけど）
仮想ループバックデバイスの名前も "bastille0" なんて長いのは間違えるし、どうせわかっているので

lo2,lo3,lo4,lo5
　　　↓
 b2,b3,b4,b5

と一覧したとき見やすくします。

# /etc/rc.conf に 以下追記

<pre>
cloned_interfaces="lo1 lo2 lo3 lo4 lo5"
                           ~~~~~~~~~~~ 追加したトコ

ifconfig_lo1_name="bastille0" ←　setupでつけられる
ifconfig_lo2_name="b2"
ifconfig_lo3_name="b3"
ifconfig_lo4_name="b4"
ifconfig_lo5_name="b5"
</pre>


## VNETにはPFを設定する必要なし・・？

ネットワークの構成によって、ホスト側が external/internal のネットワークインターフェイスを持つ場合もあります。この場合は、PFの設定はJAILというよりは個別のFirewall的な形になるかと思います。　

しかし　VNET　を選んだ場合には、JAIL側にも内外のNICを持たせる手筈が整っています。次のように設定していけば、GatewayホストをJAIL化することができます。なるべくホスト側を外に晒したくない場合には有効ですね。

<pre>
 vnet;
  vnet.interface += e0b_b3;
  vnet.interface += e0b_b4;

  exec.prestart += "jib addm b3 igb0";
  exec.prestart += "jib addm b4 igb1";
  exec.prestart += "/sbin/ifconfig e0a_b3 description \"vnet host interface for
 Bastille jail gw\"";
  exec.prestart += "/sbin/ifconfig e0a_b4 description \"vnet host interface for
 Bastille jail gw\"";

  exec.poststop += "jib destroy b3";
  exec.poststop += "jib destroy b4";

</pre>

この場合は、目的に沿ってゲスト側でPFを設定していく必要があります。
基本的にVNETであれば、ネットワーク・経路などはJAIL個別になり、FIBを意識して使う必要もなくなります。　ホストに置くとPFパズルを解く必要が出てきますがすでにアドレスで分離されているので簡単になりますね。

## backup ZFS必須!!!!
オンラインバックアップをするなら、ZFS必須です。
この機能のお蔭で囚人を牢から出すことなく、監房丸ごと新しい刑務所に送りつけることができます。
警備や護送バスの
手間がかからずいいですね！

<pre>
# bastille export --xz jail2
Hot exporting 'jail2' to a compressed .xz image...
Creating temporary ZFS snapshot for export...
Sending ZFS data stream...
  --- %        65.7 MiB / 230.4 MiB = 0.285    29 MiB/s       0:08 
・・・・・
  100 %      739.0 MiB / 1865.1 MiB = 0.396    22 MiB/s       1:23             
Exported '/usr/local/bastille/backups/jail2_2024-11-xx-152515.xz' successfully.
  
</pre>
流石にVMotionのような離れ業を演じられるような仕掛けではありませんが、xz圧縮されたファイル,同じく同ファイルのshaハッシュファイルを別のFreeBSD（物理的なホスト）に送り込んで、元のホストと同じPATHの　”/usr/local/bastille/backups" に配置すれば、

<pre>
# bastille import jail2_2024-11-xx-152515.xz
Validating file: jail2_2024-11-xx-152515.xz...
File validation successful!
Importing 'jail2' from compressed .xz image.
Receiving ZFS data stream...
/usr/local/bastille/backups/jail2_2024-11-xx-152515.xz (1/1)
 16.7 %       123.8 MiB / 467.8 MiB = 0.265    45 MiB/s       0:10    1 min 0 s
...

  100 %      739.0 MiB / 1865.1 MiB = 0.396    57 MiB/s       0:32             
Container 'jail2' imported successfully.

</pre>

これだけでほぼ完了します・・・ほぼと言うのは、この監房はまだIPアドレスの設定やら、マウントする外部ストレージ設定が適切ではないかも知れないからですね・・・これは編集してやるだけですぐ走ってます。　構築の手間がかかったものはこれきりで完了となります・・・
無論、Ansibleで定義して冪等性に従って・・みたいなことは、正しく設定されたかを検証するには必要ですが、この方が実用的ではあります。

# 入れ子？牢獄

今まで作ってきた刑務所を統合する時、監房を再配置するのもありですが、刑務所そのものを監房に入れてしまうという手法があります。”Nested Jail" ですが、これは監房の機能制限をかなり緩める必要があります。無論見た目は入れ子ですが、ただ深いだけで "jls" コマンドでは、入れ子の監房も見えてしまいます。 


<pre>
Cocytus  {
  devfs_ruleset = 20;
  enforce_statfs = 1;
  exec.clean;
  exec.consolelog = /var/log/bastille/Cocytus_console.log;
  exec.start = '/bin/sh /etc/rc';
  exec.stop = '/bin/sh /etc/rc.shutdown';
  host.hostname = hazuki;
  mount.devfs;
  mount.fstab = /usr/local/bastille/jails/Cocytus/fstab;
  path = /usr/local/bastille/jails/Cocytus/root;
  securelevel = 2;
  allow.mount = 1;
  children.max = 256;
  allow.mount;
  allow.mount.devfs;
  allow.mount.procfs;
  allow.mount.fdescfs;
  allow.mount.linprocfs;
  allow.mount.zfs;
  allow.mount.nullfs;
  allow.mount.tmpfs;
  allow.raw_sockets;
  allow.socket_af;
  allow.sysvipc;
  allow.chflags;
  enforce_statfs=1;
  securelevel=0;


  osrelease = 14.1-RELEASE;

  vnet;
  vnet.interface = e0b_bastille1;
  exec.prestart += "jib addm bastille1 igb0";
  exec.prestart += "ifconfig e0a_bastille1 description \"vnet host interface for Bastille jail hazuki\"";
  exec.poststop += "jib destroy bastille1";
}
</pre>

# 諸雑事
* 毎朝03:00にやっている雑務・root宛のメールをどうするか？
-- /etc/dma/dma.conf の　テンプレート 
-- /etc/periodic.conf の　テンプレート
このあたりを整備していきましょう。

* Thick or Thin ？
pkg で済むサーバばかりなら、　Thick にする必要はありません。
が、jail化する対象が pkg のデフォルトのスクリプトエンジン環境とは限りません。
そもそもどれくらいの差があるのかというのを検証しました。

<pre>zroot/bastille/jails/mail2                   3.2T    116K    3.2T     0%    /usr/local/bastille/jails/mail2
zroot/bastille/jails/mail2/root              3.2T    5.7M    3.2T     0%    /usr/local/bastille/jails/mail2/root
/usr/local/bastille/releases/14.1-RELEASE    3.2T    451M    3.2T     0%    /usr/local/bastille/jails/mail2/root/.bastille
devfs                                        1.0K      0B    1.0K     0%    /usr/local/bastille/jails/mail2/root/dev
zroot/bastille/jails/mail3                   3.2T    116K    3.2T     0%    /usr/local/bastille/jails/mail3
zroot/bastille/jails/mail3/root              3.2T    451M    3.2T     0%    /usr/local/bastille/jails/mail3/root
devfs                                        1.0K      0B    1.0K     0%    /usr/local/bastille/jails/mail3/root/dev
</pre>

- mail2 は Thin-Jail で　5MBしか使いません。設定だけで、残りは releases/14.1-RELEASEにあります。
- mail3 は Thick-Jail で　要するに releases/14.1-RELEASE と同じファイルを全部持っています。

<pre>
[mail2]:
root@mail2:~ # cd /usr/bin
root@mail2:/usr/bin # mkdir test
mkdir: test: Read-only file system
<pre>

<pre>
[mail3]:
root@mail3:~ # cd /usr/bin
root@mail3:/usr/bin # mkdir mkdir test
root@mail3:/usr/bin # 
</pre>

- Thin-Jail はbaseコマンドが書き換えられないので、それだけ安全であるともいえます。というかそもそも書き換えられる状況になること事態があり得ないということで、安全性が担保できない由来不明なシステムから持ってきたバイナリなどを動かさざる得ない羽目になった場合には良いかもしれません。監房が壊れることはないのです。
逆にいえば、ソースコードから管理可能でパッチ当ても随時できるとわかっていて、細かな手直しをしているような昔からあるようなサーバ構成を監房に収める場合には Thickでないと対応しない場合もあります。　サポートが終わったような FreeBSD12以前のシステムを収めていく場合でも、Thin 構成をとってやることも出来ますが・・・


# 伝説の監獄

博物館的？運営を考えると、そもそも最新の刑務所の基礎にあるカーネルが対応するのか？ということもありますが、とりあえず動けばいいというレベルのものもあります。 pkg などは、古いOSの機材動いているうちに手を打っておく必要があるので、以下の作業は予め打っておきましょう。

準備 >> 古い機材の pkg(バイナリ)を取り出せるようにしておく

<pre>
# pkg create -a -f tgz -o ./ -n
</pre>

とりあえず動いているうちに、適当なdirに　*.pkgs （いわゆるバイナリ形態）ファイルを作って入れましょう。
ソースコード配布もさりながら、portsから監房内で全てをコンパイルするのは 古い ports-repository を
clone でもして保存していない限り distfiles の入手性も担保されていないので、5年くらいのシステム前ですら無理かもしれません。ましてや10年モノは無理でしょう。

- 過去のFreeBSD/base を入れる方法

1) bootstrap の確保。11.4-RELEASEの場合。

<pre>
# bastille bootstrap 11.4-RELEASE
Unable to fetch MANIFEST. See 'bootstrap urls'.
</pre>

って云われてしまいます。過去のものは現行システムがあるurlsからはダウンロードできないので、

/usr/local/etc/bastille/bastiile.conf で
<pre>
## bootstrap urls
bastille_url_freebsd="http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/"          ## default: "http://ftp.freebsd.org/pub/FreeBSD/releases/"
bastille_url_hardenedbsd="https://installers.hardenedbsd.org/pub/" ## default: "https://installer.hardenedbsd.org/pub/HardenedBSD/releases/"
bastille_url_midnightbsd="https://www.midnightbsd.org/ftp/MidnightBSD/releases/"          ## default: "https://www.midnightbsd.org/pub/MidnightBSD/releases/"

</pre>
などと変更を加えます。そうすれば、無事にbootstrap 出来て、11.4-RELEASE の base による監房が出来ます。

2) pkg をなんとかする。

準備段階で確保した pkgファイル群をどうにか監獄に持ってこれたとしましょう。しかし・・・

<pre>
# pkg add hogehoge.txz
Signature for pkg not available.
</pre>

これは、/etc/pkg/FreeBSD.conf を参照して Signature を探しているかららしいです。
レガシーOSは 署名検証のURLが閉じられていることもあってうまく行きません。なので
<pre>
# cat /etc/pkg/FreeBSD.conf 
# $FreeBSD: releng/11.4/etc/pkg/FreeBSD.conf 360804 2020-05-08 00:02:59Z gjb $
#
# To disable this repository, instead of modifying or removing this file,
# create a /usr/local/etc/pkg/repos/FreeBSD.conf file:
#
#   mkdir -p /usr/local/etc/pkg/repos
# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
#

FreeBSD: {
   enabled: no 
}
#  url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
#  mirror_type: "srv",
#  signature_type: "fingerprints",
#  fingerprints: "/usr/share/keys/pkg",
#  enabled: yes
#}


</pre>

これでとりあえず pkg を入れることも出来ます。

- lagecy システムでも FreeBSD-udate 出来るの？

🤞　2024年現在 11.4では、出来るのですが、このバージョンだけしか調べていません。
いつまで出来るか知る限りではありません・・・
<pre>
# bastille update 11.4-RELEASE
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 11.4-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata patches.. done.
Applying metadata patches... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 115 patches.....10....20....30....40....50....60....70....80....90....100....110.. done.
Applying patches... done.
The following files will be updated as part of updating to
11.4-RELEASE-p13:
/bin/freebsd-version
/lib/libc.so.7
/lib/libcasper.so.0
/lib/libcrypto.so.8
/lib/libgcc_s.so.1
/libexec/ld-elf.so.1
/rescue/[
/rescue/atmconfig
/rescue/badsect
/rescue/bectl
/rescue/bsdlabel
/rescue/bunzip2
/rescue/bzcat
/rescue/bzip2
/rescue/camcontrol
/rescue/cat
/rescue/ccdconfig
/rescue/chflags
/rescue/chgrp
/rescue/chio
/rescue/chmod
/rescue/chown
/rescue/chroot
/rescue/clri
/rescue/cp
/rescue/csh
/rescue/date
/rescue/dd
/rescue/devfs
/rescue/df
/rescue/dhclient
/rescue/disklabel
/rescue/dmesg
/rescue/dump
/rescue/dumpfs
/rescue/dumpon
/rescue/echo
/rescue/ed
/rescue/ex
/rescue/expr
/rescue/fastboot
/rescue/fasthalt
/rescue/fdisk
/rescue/fsck
/rescue/fsck_4.2bsd
/rescue/fsck_ffs
/rescue/fsck_msdosfs
/rescue/fsck_ufs
/rescue/fsdb
/rescue/fsirand
/rescue/gbde
/rescue/geom
/rescue/getfacl
/rescue/glabel
/rescue/gpart
/rescue/groups
/rescue/gunzip
/rescue/gzcat
/rescue/gzip
/rescue/halt
/rescue/head
/rescue/hostname
/rescue/id
/rescue/ifconfig
/rescue/init
/rescue/ipf
/rescue/iscsictl
/rescue/iscsid
/rescue/kenv
/rescue/kill
/rescue/kldconfig
/rescue/kldload
/rescue/kldstat
/rescue/kldunload
/rescue/ldconfig
/rescue/less
/rescue/link
/rescue/ln
/rescue/ls
/rescue/lzcat
/rescue/lzma
/rescue/md5
/rescue/mdconfig
/rescue/mdmfs
/rescue/mkdir
/rescue/mknod
/rescue/more
/rescue/mount
/rescue/mount_cd9660
/rescue/mount_msdosfs
/rescue/mount_nfs
/rescue/mount_nullfs
/rescue/mount_udf
/rescue/mount_unionfs
/rescue/mt
/rescue/mv
/rescue/nc
/rescue/newfs
/rescue/newfs_msdos
/rescue/nos-tun
/rescue/pgrep
/rescue/ping
/rescue/ping6
/rescue/pkill
/rescue/poweroff
/rescue/ps
/rescue/pwd
/rescue/rcorder
/rescue/rcp
/rescue/rdump
/rescue/realpath
/rescue/reboot
/rescue/red
/rescue/rescue
/rescue/restore
/rescue/rm
/rescue/rmdir
/rescue/route
/rescue/routed
/rescue/rrestore
/rescue/rtquery
/rescue/rtsol
/rescue/savecore
/rescue/sed
/rescue/setfacl
/rescue/sh
/rescue/shutdown
/rescue/sleep
/rescue/spppcontrol
/rescue/stty
/rescue/swapon
/rescue/sync
/rescue/sysctl
/rescue/tail
/rescue/tar
/rescue/tcsh
/rescue/tee
/rescue/test
/rescue/tunefs
/rescue/umount
/rescue/unlink
/rescue/unlzma
/rescue/unxz
/rescue/vi
/rescue/whoami
/rescue/xz
/rescue/xzcat
/rescue/zcat
/rescue/zdb
/rescue/zfs
/rescue/zpool
/sbin/devd
/sbin/dhclient
/sbin/ggatec
/sbin/init
/sbin/rtsol
/usr/bin/ar
/usr/bin/as
/usr/bin/c++
/usr/bin/cc
/usr/bin/clang
/usr/bin/clang++
/usr/bin/clang-cpp
/usr/bin/cpp
/usr/bin/ld
/usr/bin/ld.bfd
/usr/bin/ld.lld
/usr/bin/lldb
/usr/bin/make
/usr/bin/openssl
/usr/bin/ranlib
/usr/bin/svnlite
/usr/bin/svnliteadmin
/usr/bin/svnlitebench
/usr/bin/svnlitedumpfilter
/usr/bin/svnlitefsfs
/usr/bin/svnlitelook
/usr/bin/svnlitemucc
/usr/bin/svnliterdump
/usr/bin/svnliteserve
/usr/bin/svnlitesync
/usr/bin/svnliteversion
/usr/include/netinet/sctp_structs.h
/usr/include/netinet/sctputil.h
/usr/include/openssl/asn1.h
/usr/include/openssl/evp.h
/usr/include/sys/filedesc.h
/usr/include/sys/jail.h
/usr/lib/libbsnmp.so.6
/usr/lib/libc.a
/usr/lib/libc_p.a
/usr/lib/libc_pic.a
/usr/lib/libcasper.a
/usr/lib/libcasper_p.a
/usr/lib/libcompiler_rt.a
/usr/lib/libcompiler_rt_p.a
/usr/lib/libcrypto.a
/usr/lib/libcrypto_p.a
/usr/lib/libfetch.a
/usr/lib/libfetch.so.6
/usr/lib/libfetch_p.a
/usr/lib/libhdb.so.11
/usr/lib/libpam.a
/usr/lib/libprivatesqlite3.a
/usr/lib/libprivatesqlite3.so.0
/usr/lib/libprivatesqlite3_p.a
/usr/lib/libprivateunbound.a
/usr/lib/libprivateunbound.so.5
/usr/lib/libprivateunbound_p.a
/usr/lib/libradius.a
/usr/lib/libradius.so.4
/usr/lib/libradius_p.a
/usr/lib/libssl.so.8
/usr/lib/pam_login_access.so.6
/usr/lib/pam_radius.so.6
/usr/libexec/ftpd
/usr/sbin/bhyve
/usr/sbin/freebsd-update
/usr/sbin/hostapd
/usr/sbin/local-unbound
/usr/sbin/local-unbound-anchor
/usr/sbin/local-unbound-checkconf
/usr/sbin/local-unbound-control
/usr/sbin/nologin
/usr/sbin/ppp
/usr/sbin/rtsold
/usr/sbin/wpa_cli
/usr/sbin/wpa_supplicant
/usr/share/man/man2/jail.2.gz
/usr/share/man/man2/jail_attach.2.gz
/usr/share/man/man2/jail_get.2.gz
/usr/share/man/man2/jail_remove.2.gz
/usr/share/man/man2/jail_set.2.gz
/usr/share/zoneinfo/Africa/Accra
/usr/share/zoneinfo/Africa/Addis_Ababa
/usr/share/zoneinfo/Africa/Algiers
/usr/share/zoneinfo/Africa/Asmara
/usr/share/zoneinfo/Africa/Asmera
/usr/share/zoneinfo/Africa/Bangui
/usr/share/zoneinfo/Africa/Brazzaville
/usr/share/zoneinfo/Africa/Casablanca
/usr/share/zoneinfo/Africa/Dar_es_Salaam
/usr/share/zoneinfo/Africa/Djibouti
/usr/share/zoneinfo/Africa/Douala
/usr/share/zoneinfo/Africa/El_Aaiun
/usr/share/zoneinfo/Africa/Juba
/usr/share/zoneinfo/Africa/Kampala
/usr/share/zoneinfo/Africa/Kinshasa
/usr/share/zoneinfo/Africa/Lagos
/usr/share/zoneinfo/Africa/Libreville
/usr/share/zoneinfo/Africa/Luanda
/usr/share/zoneinfo/Africa/Malabo
/usr/share/zoneinfo/Africa/Mogadishu
/usr/share/zoneinfo/Africa/Nairobi
/usr/share/zoneinfo/Africa/Niamey
/usr/share/zoneinfo/Africa/Porto-Novo
/usr/share/zoneinfo/America/Belize
/usr/share/zoneinfo/America/Dawson
/usr/share/zoneinfo/America/Grand_Turk
/usr/share/zoneinfo/America/Nassau
/usr/share/zoneinfo/America/Whitehorse
/usr/share/zoneinfo/Antarctica/Casey
/usr/share/zoneinfo/Antarctica/Macquarie
/usr/share/zoneinfo/Asia/Gaza
/usr/share/zoneinfo/Asia/Hebron
/usr/share/zoneinfo/Asia/Jerusalem
/usr/share/zoneinfo/Asia/Tel_Aviv
/usr/share/zoneinfo/Atlantic/Bermuda
/usr/share/zoneinfo/Australia/ACT
/usr/share/zoneinfo/Australia/Adelaide
/usr/share/zoneinfo/Australia/Brisbane
/usr/share/zoneinfo/Australia/Broken_Hill
/usr/share/zoneinfo/Australia/Canberra
/usr/share/zoneinfo/Australia/Currie
/usr/share/zoneinfo/Australia/Darwin
/usr/share/zoneinfo/Australia/Eucla
/usr/share/zoneinfo/Australia/Hobart
/usr/share/zoneinfo/Australia/Lindeman
/usr/share/zoneinfo/Australia/Melbourne
/usr/share/zoneinfo/Australia/NSW
/usr/share/zoneinfo/Australia/North
/usr/share/zoneinfo/Australia/Perth
/usr/share/zoneinfo/Australia/Queensland
/usr/share/zoneinfo/Australia/South
/usr/share/zoneinfo/Australia/Sydney
/usr/share/zoneinfo/Australia/Tasmania
/usr/share/zoneinfo/Australia/Victoria
/usr/share/zoneinfo/Australia/West
/usr/share/zoneinfo/Australia/Yancowinna
/usr/share/zoneinfo/Canada/Yukon
/usr/share/zoneinfo/Europe/Budapest
/usr/share/zoneinfo/Europe/Monaco
/usr/share/zoneinfo/Europe/Paris
/usr/share/zoneinfo/Europe/Volgograd
/usr/share/zoneinfo/Indian/Antananarivo
/usr/share/zoneinfo/Indian/Comoro
/usr/share/zoneinfo/Indian/Mahe
/usr/share/zoneinfo/Indian/Mayotte
/usr/share/zoneinfo/Israel
/usr/share/zoneinfo/Pacific/Efate
/usr/share/zoneinfo/Pacific/Fiji
/usr/share/zoneinfo/zone.tab

WARNING: FreeBSD 11.4-RELEASE HAS PASSED ITS END-OF-LIFE DATE.
Any security issues discovered after Thu Sep 30 09:00:00 JST 2021
will not have been corrected.
src component not installed, skipped
Installing updates...Scanning /usr/local/bastille/releases/11.4-RELEASE/usr/share/certs/trusted for certificates...
 done.

</pre>

# VNET、なんか失敗する！　
→ ( "ブリッジは一個だけにしろ" https://forums.freebsd.org/threads/is-it-possible-to-set-up-vnet-for-multiple-jails-within-a-single-nic-host.91039/post-629326　）

- 何がどうなった？

pf.conf 設定パズルやら 127.0.0.1 ::1　が使えねえksg とか云わなくて済むVNETJailですが、FreeBSD-jail をやる前にすでに bhyveでbridgeが出来ていたりする機材に jail を作ったりしますと、

<pre>ifconfig: igb0 BRDGADD Device busy</pre>

とか弾かれます。 vm-public とか bridge IFと認識しにくい名前で並んでいてうっかり忘れたりすると、
bridge は出来るけど、物理NICは複数のブリッジに存在することが許されてないので、こんなエラーがでます。

- こういうときは？
<pre>
# bastille -B hoge 14.2-RELEASE xxx.xxx.xxx.xxx/yy {{既にあるブリッジの名前}}
</pre>
などとすれば良いようです。

# もっと仕事を減らしたい・・・
JAIL化で管理工数・監視ポイントが増えたせいか今まで以上に忙殺されると仕事が止まってしまうので、まもなく　ansibleを使った監獄管理にいくでしょう。
来年の春までには出来てると思います・・・