jail環境をpfのNATの下で動かす。

  • FreeBSD 8.2 Release
    • re0(192.168.100.220): 外につながるI/F
    • re0 alias(192.168.100.221): jail用alias
    • lo0 alias(192.168.200.1): jail用alias

 EUCJPのファイル名を持つエリア(更新あり)をjail内のsambaを使ってUTF-8に出力し、それをホスト環境側でmount_smbfsでUTF-8のエリアとしてマウントし、さらにそれをFTPやsambaでUTF-8によるアクセスが可能な形にしたいと思っています。
 はじめ、jail内samba環境のアドレスをre0 aliasの192.168.100.221/24として動かしていました。しかし、これだとWindowsからホスト環境のNetBIOS名にpingを打ったとき、221で返ってきてしまうことがあります。困った。ちなみに/32とすると、mount_smbfsを受け付けてくれなくなります。困った。
 そこで、jail内samba環境をre0のaliasからlo0のaliasに変更して、外部に公開されるのはホスト環境のsambaだけに絞ってみようと思いました。
 しかし、これではjail内samba環境から外部へのアクセス(portsのアップデートなど)ができないので、ちと不便です。そこで、lo0経由でpfを使ったNATをすることにより、VMwareの仮想NATインターフェースのような振る舞いをlo0 aliasで実現させてみたいというところです。
 まず、jail環境用のサブネットとして192.168.200.0/24を使うことにします。/etc/rc.confにてlo0のaliasを作っておきます。

# vi /etc/rc.conf
ifconfig_lo0_alias0="inet 192.168.200.1 netmask 255.255.255.0"
gateway_enable="YES" 

 pf.confを編集し、外部インターフェースがre0となるNAT用の設定を書きます。

# vi /etc/pf.conf
ext_if="re0"
jails_subnet="192.168.200.0/24"
nat on $ext_if from $jails_subnet to ! $jails_subnet -> ($ext_if)

rc.confでpfを有効にします。

# vi /etc/rc.conf
pf_enable=YES"
pf_rules="/etc/pf.conf"
# vi /boot/loader.conf
pf_load="YES"

参考:
モバイル環境でのjail利用 - dora-monの日記