====== XigmaNASで別サーバのSMB共有をマウントしFTPで公開する(7年ぶり2度目) ======
===== まえがき =====
[[mount_cifs_and_publish_ftp|7年前に作ったNAS4FreeなFTPサーバ]]は、その後、自前のストレージを持つFTP用物理マシンへと移行し、真っ当なメンテをすることもなく長らく稼働していた。この度、ストレージ部分はそっくりそのまま、システム部分のみを仮想化する形で別のマシンに収容することになった。
その収容先はXigmaNASが動いてる物理PCなので、FTPシステムはVirtualBoxにぶち込み、FTPストレージはRDMでアタッチすれば余裕っしょ、と目論んでいたのだが、vboxuserの権限まわりならびに、XigmaNASは見つけたZFSプールを手あたり次第にマウントしてしまい仮想マシンにFTPストレージをアタッチできない問題を解決できず、早々に頓挫してしまった。
代替案として、FTPストレージはホストのXigmaNASでマウントしNFSでVMに公開すればいいんじゃね?と目論むも、XigmaNASはnfsclientを持っていないことが判明しこれまた頓挫。mount_nfsはあるのに、どうして…どうして……。
となれば残された道は7年前同様、SMB経由しかない。mount_smbfsは今なお含まれており、加えて当時はなかったsmbutilもいつの間にか含まれるようになったので、XigmaNASで作業が完結するようになったのも嬉しいところ。
===== 環境 =====
* ホスト(物理マシン)
* XigmaNAS 12.1.0.4 - Ingva (revision 7743) [embedded]
* 起動USBメモリの空き領域da0p4を/mnt/storageにマウントし、永続ストレージとして使う。
* ゲスト(仮想マシン/FTPサーバ)
* XigmaNAS 12.1.0.4 - Ingva (revision 7743) [embedded]
===== 設定 =====
Samba共有の自動パスワード入力&自動マウントを実現するには、''/etc/nsmb.conf''と''/etc/fstab''への設定追加が必要となる。ところが、embeddedインストールでは、原則「/」以下への変更はOS再起動で揮発してしまい具合がよろしくない。
したがって、XigmaNASのブートUSBメモリの空き領域を永続ストレージとして使い、そこに保存した設定用スクリプトを起動のたびに実行することで、要件を実現する。
==== nsmb.confの準備 ====
接続先のSambaサーバ情報を/mnt/storage/nsmb.confに書く。
[default]
workgroup=WORKGROUP
[SERVERNAME]
addr=192.168.xxx.yyy
charsets=UTF-8:UTF-8
[SERVERNAME:USERNAME]
password=$$CRYPTEDPASSWORD
設定値の意味。
| SERVERNAME | 接続先サーバの名称。サーバが公開しているNetBIOS名とは無関係で、任意の名前を付けられるが全て大文字で書くこと。 |
| USERNAME | 接続先Sambaのユーザー名。全て大文字で必要がある。さもないと認証が通らない。 |
| workgroup | ワークグループ名を指定。 |
| charsets | 接続先サーバの文字コードと自身の文字コードを指定する。iconv -lで出てくる文字コードが有効。ケースセンシティブなので注意! |
| addr | 接続先サーバのホスト名、またはIPアドレス |
| password | USERNAMEに対応するパスワード。「smbutil crypt パスワード」で得られた難読化パスワードを指定する。 |
ハマりポイント
charsetsに存在しないエンコーディングを書くと、mountコマンドが何のエラーもはかないのにマウントできない現象が発生するゾ。大文字・小文字も関係あるので、charsets=utf-8:utf-8と書いてもダメなんだゾ。
ぼくはこれで2日間なやみました。
==== fstabの準備 ====
マウント設定を準備する。/etc/fstabはXigmaNASの管理下のため、差分を準備し結合する方向で。よって、1行目は念のため改行代わりの空行にしておく。
//USERNAME@SERVERNAME/shared_folder_name /mnt/shared_folder smbfs rw,-d=777,-f=777 0 0
==== Sambaサーバ側の設定 ====
mount_smbfsはSMB v1プロトコルにしか対応していないため、対向のSambaのバージョンによってはNTLM認証を有効化する必要がある。
XigmaNASのSMB設定であれば、サービス>SMB>追加のパラメータに「ntlm auth = yes」を追加する。
{{ :nas4free:xigmanas_samba_ntlm_auth.png |}}
==== テスト ====
マウントできるか確認する。
# cp /mnt/storage/nsmb.conf /etc/
# cat /mnt/storage/fstab_samba >> /etc/fstab
# mkdir /mnt/shared_folder
# mount /mnt/shared_folder
# mount
(省略)
//USERNAME@SERVERNAME/shared_folder_name on /mnt/shared_folder (smbfs)
==== マウントスクリプトの準備 ====
手動でマウント出来ることが確認できたら、起動時に自動マウントするスクリプトを用意する。
#!/bin/sh
cp /mnt/storage/nsmb.conf /etc/
cat /mnt/storage/fstab_samba >> /etc/fstab
mkdir /mnt/shared_folder
mount /mnt/shared_folder
作成したスクリプトを、XigmaNASのシステム>高度な設定>コマンドスクリプトで起動時に実行するよう設定する。
{{ :nas4free:xigmanas_smfs_auto_mount_script.png |}}
^ 名前 | 適当につける |
^ コマンド | /mnt/storage/mount_smb.sh |
^ タイプ | 初期化後 |
再起動して設定したSamba共有がマウントされていれば成功。
===== 番外:ProFTPDとヤマハルータの設定 =====
XigmaNASのFTPサービスはProFTPDだが、どうにもヤマハのルータとの組み合わせと相性が良くないようで。FileZillaで接続すると、MLSDコマンドでファイル一覧を取得するところでタイムアウトする現象に見舞われる。
正しい解決策かどうかは分からないが、以下の設定をすると上手く動くようになる。
* ProFTPDの設定
* パッシブポートの範囲を固定する。例えば60000~65000。
* ヤマハルータの設定
* WANのファイヤウォール設定で次の通信を許可する。
* プロトコル:TCP
* 送信元IPアドレス:*
* 送信元ポート:*
* 受信先IPアドレス:FTPサーバ
* 受信先ポート:ProFTPDのパッシブポートの範囲(60000~65000)
===== 参考サイト =====
* [[mount_cifs_and_publish_ftp]]
* [[https://forums.freebsd.org/threads/freenas-load-libiconv-ko-with-utf-8-into-kernel.68186/|[FreeNAS] load libiconv.ko with utf-8 into kernel | The FreeBSD Forums]]
* [[https://www.xigmanas.com/forums/viewtopic.php?t=10446|Permanent edit to fstab - XigmaNAS]]
~~DISCUSSION~~