Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


IBMi QNTCで別のファイルサーバーにアクセスする方法

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 Webサーバーでエイリアスを設定することで、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を持つ管理者のユーザープロファイルでログインしてください。

IBM Web Administration for i での設定

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

httpd.conf への設定

IBM Web Administration for i で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のドメイン設定変更
IBM Navigator for iのログイン画面
http://[IBMi IP Address]:2001

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

IBM Navigator for i ノードの管理

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

TCP/IPサーバー設定

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

IBMiネットサーバー設定

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

「TCP/IPサーバー」の画面表示時のエラー
TCP/IPサーバー表示時のエラー表示について

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

IBMi ネットサーバーのプロパティー

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

ドメイン名の設定

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

IBMi ネットサーバーの再起動

IBMiネットサーバーの再起動は同じ画面のGUIからも行えます。
「TCP/IPサーバー」の「停止」と「開始」にて再起動可能です。

認証時の通信内容例

QNTCでファイルサーバーにアクセスする際には、IBMiネットサーバーに設定した ドメイン名\ユーザープロファイル / パスワードで接続を試みている。
ドメイン環境下や、接続するファイルサーバー等によっては、iNetServerのドメイン設定が必要となります。
 ※以下は接続失敗で STATUS_LOGIN_FAILUREとなっている

QNTCへアクセスする際の通信内容

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での接続が失敗/成功している場合の通信内容を確認することができます。

QNTCでの通信内容

Windows端末からファイルサーバーへの接続確認

net use \\[ファイルサーバー接続先] [パスワード] /user:[ドメイン名]\[ユーザー]

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

Windowsからファイルサーバーへのアクセス確認手順

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の通信トレース等を是非ご活用ください。