ネットワークエンジニアから着物屋さんとして独立しました。ネットショップのIT面を中心にお伝えします

freeDiameterdのインストール記録 第3回

»

freeDiameterdのインストール記録 第2回の続きです。第2回では単体の設定まで行いましたが、今回はクライアント・サーバーのセットアップと、トラブルシューティングの方法です。

■クライアント・サーバーモデル■

 Diameterプロトコルではクライアントとサーバーの役割がそれぞれ分かれています。しかしfreeDiameterdにそのような設定項目はありません。そのまま起動するとサーバーとして動作して3868ポートで待ち受けますが、freeDiameter.confファイルのConnectPeer項目で対抗機を設定すると、クライアントとしても動作し自ら接続に行きます。

 それでは2台のホストを使ってクライアント・サーバーの通信を見てみましょう。

■まずはもう1台セットアップ■

 ハイパーバイザー上で動くバーチャルマシンであればそのままクローンします。物理ホストをもう1台用意するなら、「freeDiameterインストール」後の「SSL証明書・秘密鍵作成」前まで行っておきます。

 2台目のホスト名はcentos65ip126.hiro.localとしておきます。両ホストでhostsファイルに登録しておきます。

[root@centos65ip126 ~]# echo 192.168.10.126  centos65ip126.hiro.local >> /etc/hosts
[root@centos65ip124 ~]# echo 192.168.10.126  centos65ip126.hiro.local >> /etc/hosts

■もう1台のSSL証明書・秘密鍵作成■

 サーバー証明書・秘密鍵のペアをもう1つ作ります。ホスト名であるCommon Nameを「centos65ip126.hiro.local」とし、前回とは別である事に注意です。

[root@centos65ip124 ~]# cd /home/hiro/test/ssl/20140304/
[root@centos65ip124 20140304]# openssl req -new -newkey rsa:512 -keyout csr_key/serv02-pass.key -out csr_key/serv02.csr
Generating a 512 bit RSA private key
..++++++++++++
.............++++++++++++
writing new private key to 'csr_key/serv02-pass.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:a
Locality Name (eg, city) [Default City]:a
Organization Name (eg, company) [Default Company Ltd]:a
Organizational Unit Name (eg, section) []:a
Common Name (eg, your name or your server's hostname) []:centos65ip126.hiro.local
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@centos65ip124 20140304]# openssl rsa < csr_key/serv02-pass.key > csr_key/serv02.key
Enter pass phrase:
writing RSA key
[root@centos65ip124 20140304]# openssl ca -in csr_key/serv02.csr -out newcerts/serv02.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 3 (0x3)
        Validity
            Not Before: Mar  4 19:36:33 2014 GMT
            Not After : Mar  4 19:36:33 2015 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = a
            organizationName          = a
            organizationalUnitName    = a
            commonName                = centos128.hiro.local
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                E6:30:D2:0E:6B:A2:D9:04:63:D5:2D:42:36:17:2D:70:75:60:3F:C4
            X509v3 Authority Key Identifier:
                keyid:4A:44:DE:99:B9:7D:14:36:90:D6:09:0F:74:1A:A9:AD:FC:85:EB:13

Certificate is to be certified until Mar  4 19:36:33 2015 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

■もう1台のfreeDiameterd設定■

 /usr/local/etc/freeDiameter/freeDiameter.conf ファイルで、前項目で作ったSSL証明書と秘密鍵に書き換えておきます。

Identity = "centos65ip126.hiro.local";
TLS_Cred = "/home/hiro/test/ssl/20140304/newcerts/serv02.crt", "/home/hiro/test/ssl/20140304/csr_key/serv02.key";

 書き換えたらプロセス再起動です。

[root@centos65ip126 ~]# service freeDiameterd stop; service freeDiameterd start

■ConnectPeer設定■

 両ホストでお互いをクライアント・サーバーとして認識させる必要があります。/usr/local/etc/freeDiameter/freeDiameter.conf ファイルの最後の行にConnectPeer設定を追加します。

[root@centos65ip124 ~]# vi /usr/local/etc/freeDiameter/freeDiameter.conf
ConnectPeer = "centos65ip126.hiro.local" { TcTimer = 60; TLS_old_method; No_SCTP; Port=3868; } ;

[root@centos65ip126 ~]# vi /usr/local/etc/freeDiameter/freeDiameter.conf
ConnectPeer = "centos65ip124.hiro.local" { TcTimer = 60; TLS_old_method; No_SCTP; Port=3868; } ;

 設定変更後は両ホストでfreeDiameterdプロセスを再起動します。

[root@centos65ip124 ~]# service freeDiameterd stop; service freeDiameterd start
[root@centos65ip126 ~]# service freeDiameterd stop; service freeDiameterd start

 注:「Diameterプロトコルはクライアント・サーバーモデルだから、片方にだけConnectPeer設定をしておけば十分だろう」と考えるとハマります。ConnectPeer設定によりクライアントの動きを開始しますが、サーバー側にもクライアントの情報をConnectPeer設定に入れておかないと拒否されてしまいます。

■トラブルシューティングの方法1:ログ■

 前述したserviceスクリプトでfreeDiameterdのログを/var/log/freeDiameterd に出力するように設定しておきました。起動しない、接続できないといった問題が起こった場合にはこのログを参考にします。例えば接続に成功した場合、ホストcentos65ip124でのログは以下のようになります。

03/07/14,04:19:18.770723  NOTI   Connected to 'centos65ip126.hiro.local' (TCP,soc#16), remote capabilities:
03/07/14,04:19:18.770756  NOTI      'Capabilities-Exchange-Answer'
03/07/14,04:19:18.770776  NOTI        Version: 0x01
03/07/14,04:19:18.770786  NOTI        Length: 196
03/07/14,04:19:18.770793  NOTI        Flags: 0x00 (----)
03/07/14,04:19:18.770801  NOTI        Command Code: 257
03/07/14,04:19:18.770808  NOTI        ApplicationId: 0
03/07/14,04:19:18.770815  NOTI        Hop-by-Hop Identifier: 0x72754A9F
03/07/14,04:19:18.770822  NOTI        End-to-End Identifier: 0xA3588CB6
03/07/14,04:19:18.770829  NOTI         {internal data}: src:centos65ip126.hiro.local(24) rwb:(nil) rt:2 cb:(nil),(nil)((nil)) qry:0xb5601348 asso:0 sess:(nil)
03/07/14,04:19:18.770837  NOTI         AVP: 'Result-Code'(268) l=12 f=-M val='DIAMETER_SUCCESS' (2001 (0x7d1))
03/07/14,04:19:18.770844  NOTI         AVP: 'Origin-Host'(264) l=32 f=-M val="centos65ip126.hiro.local"
03/07/14,04:19:18.770851  NOTI         AVP: 'Origin-Realm'(296) l=18 f=-M val="hiro.local"
03/07/14,04:19:18.770858  NOTI         AVP: 'Origin-State-Id'(278) l=12 f=-M val=1394133354 (0x5318c96a)
03/07/14,04:19:18.770872  NOTI         AVP: 'Host-IP-Address'(257) l=14 f=-M val=192.168.10.126
03/07/14,04:19:18.770879  NOTI         AVP: 'Vendor-Id'(266) l=12 f=-M val=0 (0x0)
03/07/14,04:19:18.770886  NOTI         AVP: 'Product-Name'(269) l=20 f=-- val="freeDiameter"
03/07/14,04:19:18.770894  NOTI         AVP: 'Firmware-Revision'(267) l=12 f=-- val=10200 (0x27d8)
03/07/14,04:19:18.770901  NOTI         AVP: 'Inband-Security-Id'(299) l=12 f=-M val='TLS' (1 (0x1))
03/07/14,04:19:18.770908  NOTI         AVP: 'Auth-Application-Id'(258) l=12 f=-M val=4294967295 (0xffffffff)
03/07/14,04:19:18.900267  NOTI   'STATE_OPEN_HANDSHAKE' -> 'STATE_OPEN' 'centos65ip126.hiro.local'

■トラブルシューティングの方法2:再起動■

 何事もまずはプロセスを再起動したら奇跡が起こるかもしれません。そして起動時のログも確認できます。

# service freeDiameterd stop; service freeDiameterd start

■トラブルシューティングの方法3:パケットキャプチャ■

 接続できないといった事象の場合には、TCPの3ウェイハンドシェイクができているか、それに続くCER(Capabilities-Exchange Request)が出ているかといった確認をパケットキャプチャにより行えます。

[root@centos65ip126 freeDiameterd]# tcpdump -nni eth1 -s 0 port 3868 -w 20140307freeDiameterd01.cap
...
12    2014-03-07 04:25:56.032477    192.168.10.124    47513    192.168.10.126    3868    TCP    74    47513 > diameter [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=174169397 TSecr=0 WS=32
13    2014-03-07 04:25:56.032511    192.168.10.126    3868    192.168.10.124    47513    TCP    74    diameter > 47513 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=173344381 TSecr=174169397 WS=32
14    2014-03-07 04:25:56.032913    192.168.10.124    47513    192.168.10.126    3868    TCP    66    47513 > diameter [ACK] Seq=1 Ack=1 Win=14624 Len=0 TSval=174169398 TSecr=173344381
...
15    2014-03-07 04:25:56.033265    192.168.10.124    47513    192.168.10.126    3868    DIAMETER    250    cmd=Capabilities-ExchangeRequest(257) flags=R--- appl=Diameter Common Messages(0) h2h=74bd57d5 e2e=bc12c504
17    2014-03-07 04:25:56.033777    192.168.10.126    3868    192.168.10.124    47513    DIAMETER    262    cmd=Capabilities-ExchangeAnswer(257) flags=---- appl=Diameter Common Messages(0) h2h=74bd57d5 e2e=bc12c504

■トラブルシューティングの方法4:netstat■

 netstatコマンドにより、どちらのホストがクライアントになって接続できているのか、ESTABLISHED状態で安定しているかといった確認ができます。

[root@centos65ip126 freeDiameterd]# netstat -ant | grep 3868
tcp        0      0 0.0.0.0:3868                0.0.0.0:*                   LISTEN
tcp        0      0 192.168.10.126:3868         192.168.10.124:47513        ESTABLISHED
tcp        0      0 :::3868                     :::*                        LISTEN
Comment(0)

コメント

コメントを投稿する