IBMiではNetServerのQNTCを使用することで、別ファイルサーバーの領域をマウントしてアクセスできるようになります。
また、QNTCの領域をWebサーバーのエイリアスとして設定することで、ファイルサーバーに配置したファイルをIBMiのWebサーバー領域のように扱うことができます。TipsではQNTCを利用して接続する際に注意する点についてまとめます。
QNTCとは?
QNTCは別ファイルサーバーへのアクセスを提供するIBMiの機能です。
◆IBM i NetClient ファイル・システム (QNTC)
https://www.ibm.com/docs/ja/i/7.5?topic=systems-i-netclient-file-system-qntc
QNTCの領域以下にCRTDIRコマンドでファイルサーバーのアドレスを設定することで作成できます。
QNTC以下にディレクトリを作成しているのではなく仮想的な共有を作成します。
例) ファイルサーバーが192.168.0.6の場合 (名前解決できる環境であれば、ホスト名も使用可能)
CRTDIR DIR('/QNTC/192.168.0.6') DTAAUT(*RWX) OBJAUT(*ALL)
※注意点
QNTCはIPLを実行すると共有がクリアされます。
IPL実行後には、再度CRTDIRコマンドで共有を再作成する必要があります。
Webサーバーのエイリアスとして使用する場合には、QSTRUPPGMで起動するスタートアップのCLプログラムにコマンドを追加しておくことをお勧めします。
例)QSTRUPPGMのCLプログラムへ追記
0079.00 MONMSG MSGID(CPF0000)
0080.00 CRTDIR DIR('/QNTC/192.168.0.6') DTAAUT(*RWX) +
0081.00 OBJAUT(*ALL)
QNTCの利用例

IBMiのQNTCを利用すると、ファイルサーバーのディレクトリを/QNTCディレクトリにマウントできます。
WebサーバーのエイリアスとしてQNTCのディレクトリを指定すると、ファイルサーバーのファイル類をWeb上で参照可能なディレクトリとして扱うことが可能となります。
例えば、ファイルサーバーにPDFファイルや画像ファイルを格納しておいて、IBMiのWebサーバーのエイリアスとして公開されているディレクトリとして使用できます。
Webサーバー側のエイリアス設定手順
IBM Web Administration for iからWebサーバーの設定ファイル(httpd.conf)を編集して設定します。
IBM Web Administration for i の起動
IBM Web Administration for i にアクセスします。
ブラウザのアドレスバーに以下URLを入力してアクセスしてください。
http://「IBMi IPアドレス」:2001/HTTPAdmin
※「IBMi IPアドレス」は環境に合わせて変更してください。
ログイン時にユーザープロファイルとパスワードの入力が要求されます。
特殊権限 *ALLOBJ および *SECADMを持つ管理者のユーザープロファイルでログインしてください。

サーバープルダウンで編集したいインスタンスを選択します。
インスタンスを選択後、左側のメニュー「ツール」 > 「構成ファイルの編集」を選択します。
httpd.conf への設定

例) httpd.conf へのALIAS設定例 (ファイルサーバー”\\192.168.0.6\test” をWebサーバーの/docとして扱う)
<Directory /QNTC/192.168.0.6/test/>
Order Allow,Deny
Allow From all
</Directory>
Alias /doc/ "/QNTC/192.168.0.6/test/"
QTMHHTTPユーザープロファイルの設定
IBMiのWebサーバーのジョブはQTMHHTTPユーザープロファイルで実行されます。
QTMHHTTPユーザープロファイルには、デフォルトではパスワードが設定されていません。
QNTCの領域をWebサーバーのエイリアスとして使用する場合にはQTMHHTTPユーザープロファイルにパスワードを設定してください。
例) QTMHHTTPユーザープロファイルにパスワードを設定
CHGUSRPRF USRPRF(QTMHHTTP) PASSWORD(パスワード) USREXPDATE(*SAME)
※パスワードに英小文字を含む場合にはパスワード設定時、実行中ジョブのCCSIDを5035等、英小文字を認識できるCCSIDに変更してください。
ファイルサーバー側の設定
ファイルサーバー側のユーザーにIBMiで登録したQTMHHTTPのユーザー/パスワードを登録してください。
※IBMiと同じユーザー/パスワードを指定する必要があります。
Webサーバーの再起動
Webサーバーを再起動(Valenceを再起動)するとhttpd.confの設定が反映されます。
Webサーバーのインスタンスがポート番号 7062で動作している場合、ファイルサーバー内の(\\192.168.0.6\test\Sample.jpg)へは、以下のアドレスでアクセスできるようになります。
http://「IBMi IPアドレス」:7062/doc/Sample.jpg
※「IBMi IPアドレス」は環境に合わせて変更してください。
QNTCに接続できない場合の確認事項
認証について
QNTCからのファイルサーバーへの認証は、「ケルベロス認証」 → 「ジョブのユーザープロファイル/パスワード」 の順序で行われます。
IBMiのWebサーバーのジョブはQTMHHTTPユーザープロファイルで実行されます。
※QNTCの領域をWebサーバーで公開しない場合には、実行ジョブのユーザープロファイルがファイルサーバーのユーザーとして登録されている必要があります。
IBMi側の設定 ユーザープロファイル ・ システム値 QPWDLVL
ファイルサーバー側のパスワードポリシー(パスワード12文字以上、記号、英大文字小文字含む等の条件)によっては、IBMi側のシステム値 QPWDLVLの設定を変更する必要があります。
IBMiのパスワード・レベルについては以下の記事を参考にしてください。
・パスワード・レベル (QPWDLVL)
https://www.ibm.com/docs/ja/i/7.3?topic=passwords-password-level-qpwdlvl
ファイルサーバー側設定
ファイルサーバー側のユーザーにIBMiで登録したユーザープロファイルのユーザー/パスワードを登録します。
ファイルサーバー側のディレクトリはユーザープロファイルに登録したユーザーがアクセスできるようにアクセス権を割り振ってください。
QNTCの領域では、IBMi側の所有権やアクセス権限の概念が適用されません。
ファイルサーバー側の設定(権限)が適用されます。
iNetServerのドメイン設定
iNetServerにはドメイン設定があります。
IBMiで設定されているiNetServerのドメイン設定は、IBMiがファイルサーバーにアクセスする際に使用されます。
IBMiのデフォルト設定では、iNetServerのドメイン設定はIBMiのシリアル番号が設定されているため、接続するファイルサーバーによっては変更の必要があります。
※注意点
ファイルサーバーがワークグループ環境にある場合等、 ファイルサーバーによっては接続時の認証でドメイン部分が無視されてファイルサーバーのユーザー/パスワードのみで認証されます。そのため、環境によってはiNetServerのドメイン設定は不要です。
IBM Navigator for i でのiNetServerのドメイン設定変更

http://[IBMi IP Address]:2001
ブラウザから上記アドレスにアクセスすると、リダイレクトされてIBM Navigator for i のログイン画面が表示されます。
※SSLを構成されている場合には、httpをhttpsに置き換えてください。

ログイン後、管理されているノードがタイル表示されます。
タイルが表示されていない場合は、左側メニューから新規ノードの追加 を選択することで、管理するノードを追加することができます。
タイルの右上にある3点アイコンをクリックするとメニューが表示されます。
「ノードの管理」を選択してください。

左側メニューの「ネットワーク」 > 「サーバー」 > 「TCP/IPサーバー」を選択するとサーバーの一覧が表示されます。

TCP/IPサーバーの一覧から、「IBMi ネットサーバー」のレコードを右クリックして表示されるメニューで「プロパティー」を選択してください。
「TCP/IPサーバー」の画面表示時のエラー

TCP/IPサーバー一覧表示時に上記のエラーが表示される場合があります。
これは、「IBM Navigator for i」 にログインしているユーザープロファイルのCCSIDが5026(65535)のため発生しています。
CCSIDが5035に設定したユーザープロファイルの場合にはエラーは発生しません。

IBMiネットサーバーのプロパティーでは、「一般」タブの「次回開始の展開」ボタンから設定を変更できます。

ドメイン・ネームをドメイン環境の名前を設定できます。
設定は、IBMiネットサーバーを再起動すると反映されます。

IBMiネットサーバーの再起動は同じ画面のGUIからも行えます。
「TCP/IPサーバー」の「停止」と「開始」にて再起動可能です。
認証時の通信内容例
QNTCでファイルサーバーにアクセスする際には、IBMiネットサーバーに設定した ドメイン名\ユーザープロファイル / パスワードで接続を試みている。
ドメイン環境下や、接続するファイルサーバー等によっては、iNetServerのドメイン設定が必要となります。
※以下は接続失敗で STATUS_LOGIN_FAILUREとなっている

IBMiでのネットワークトレース方法
IBMiからQNTCを通じてファイルサーバーへの接続が正常に完了できない場合、IBMiのエミュレータ側でWireSharkアプリ等で参照可能な(.pcap files)を出力して確認することができます。
・IBM : How to format IBM i TRCCNN and CMNTRC communication traces to .pcap files (Wireshark format)
https://www.ibm.com/support/pages/how-format-ibm-i-trccnn-and-cmntrc-communication-traces-pcap-files-wireshark-format
回線記述の確認
STRCMNTRCコマンドで.pcapファイルを出力する場合、パラメータ CFGOBJ にline_name(回線記述)を指定する必要があります。
回線記述は以下のコマンドで確認できます。
QSYS/WRKLIND

トレースの方法
トレースの状態確認
CHKCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN)

通信トレースが存在していない場合は、「通信トレースが存在していない」が表示されます。
終了済みの場合、「通信トレース ETHLINEタイプ*LINは状況 終了 である。」が表示されます。
この場合は、前回の通信トレースを削除してください。
DLTCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN)
実行中の場合は、「通信トレース ETHLINEタイプ*LINは状況 活動中 である。」が表示されます。
この場合は通信トレースを終了させてから、通信トレースを削除します。
ENDCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN)
DLTCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN)
通信トレースの開始
通信トレースを開始します。
STRCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN) MAXSTG(32M) USRDTA(*MAX)
開始後、IBMiからQNTCでの接続を試みます。
ENDCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN)
上記コマンドでトレースを終了後、以下のコマンドでトレース結果を.pcapファイルに出力できます。
以下の例では/tmpディレクトリにTESTPCAP.pcapを出力しています。
DMPCMNTRC CFGOBJ(ETHLINE) CFGTYPE(*LIN) TOSTMF('/tmp/TESTPCAP.pcap') REPLACE(*YES) FORMAT(*PCAP)
取得した.pcapファイルはWireSharkアプリ等で確認することができます。
WireSharkではsmb2のプロトコル(使用しているsmbのバージョンで絞りこむ)にて絞り込むことで、QNTCでの接続が失敗/成功している場合の通信内容を確認することができます。

Windows端末からファイルサーバーへの接続確認
net use \\[ファイルサーバー接続先] [パスワード] /user:[ドメイン名]\[ユーザー]
QNTCからファイルサーバーへのSMBでの接続はWindows端末で net use コマンドを使用しているのと類似しているため、接続の確認時にはコマンドプロンプトから以下のようにnet useを使用して、ファイルサーバーへの接続の確認の際に使用できます。
※以下は接続成功時の例

QNTCに書き込む際の注意点
ValenceのRPGプログラムからQNTCに書込みを行う場合、ログインしているIBMiユーザープロファイルにて書き込みを行います。
そのため、QNTC領域に対する書き込み権限が必要になる点にご注意ください。
※ファイルサーバーやドメインにユーザーが登録されている必要があります。
また、ValenceのRPGプログラムからQNTC領域へ直接ファイルをアップロードする場合、バイナリで扱われる画像ファイル類は問題ありませんが、CCSIDの概念が存在するテキストファイルは直接アップロードできません。
Valenceのtemp領域にファイルをアップロード後、 cpコマンド等でファイルをコピーする手順が必要となります。
例) /valence-6t/tempにアップロード後 コピーする
dcl-proc Process;
dcl-c QNTC '/QNTC/192.168.0.6/test/';
dcl-s cmd varchar(200);
vvIn.path = '/valence-6t/temp/';
// attempt to process the upload...
vvIn_file(vvIn:'*NULL');
// check for any error...
cmd = 'STRQSH CMD(''cp ' + %trim(vvIn.path) +
%trim(vvIn.fileName) + ' ' + QNTC+
%trim(vvIn.fileName) + ''')';
vvUtility_qcmd(cmd);
if vvIn.error <> *blanks;
SetResponse('success':'false');
SetResponse('msg':%trim(vvIn.error));
else;
SetResponse('success':'true');
SetResponse('info':%trim(vvIn.fileName) + 'アップロードに成功');
endif;
end-proc;
おわりに
Valence製品だけでなく、RPG/COBOLプログラムや各種プログラム言語からQNTCにアクセスしてデータを扱うことができます。また、QNTCはネットワーク環境にも依存するため、接続できない原因を調べる際には、Tipsに記載したIBMiの通信トレース等を是非ご活用ください。