2020-05-01 05:57 PM
pxGridにはversion 1.0と2.0があり、1.0はXMPP(Extensible Messaging and Presence Protocol)ベースでしたが2.0はWebsocket,RESTベースに変わり汎用のライブラリが使えるようになったためSDK不要、Java以外にもPython,Golang等でも開発可能になりました。本稿では2.0の検証環境構築例を紹介します。
ISEとWindowsVMでpxGrid検証環境の構築(以下:1.0の記事)と重複する部分は省略しますので合わせてご覧ください。
本稿でもClientはJavaを使用します。
1.0の記事のUbuntu環境にさらにJava programのbuild toolであるmavenをinstallしてあります。
sudo apt install maven
で追加し、.bash_profileに
export MVN_HOME="/usr/share/maven"
export PATH="${MVN_HOME}/bin:${PATH}"
を追加します。
[20/04/24] ~$ which mvn
/usr/share/maven/bin/mvn
[20/04/24] ~$
のようにmvnにpathが通っていれば使用可能です。
1.0の記事の内容と変わりません。
1.0の記事の内容と変わりません。
RadiusSimulator.jarは1.0の記事で使用したものを使用します。
2.0ではSDKの代わりにJavaのsample codeを入手します。
https://github.com/cisco-pxgrid/pxgrid-rest-wsからClone or downloadで
Download ZIPをクリックするとzipファイルを入手できます。zip内pxgrid-rest-ws-master/java directoryの中を適当なdirectoryにcopyしておきます。
「適当」なdirectoryの構成は
[20/04/29] v2$ ls -al
total 128
drwxrwxrwx 1 hiyoko hiyoko 512 Apr 29 22:23 .
drwxrwxrwx 1 hiyoko hiyoko 512 Mar 29 20:13 ..
-rwxr--r-- 1 hiyoko hiyoko 43 Mar 24 23:56 .gitignore
-rwxr--r-- 1 hiyoko hiyoko 679 Mar 24 23:56 README.md
-rwxr--r-- 1 hiyoko hiyoko 101981 Apr 29 22:23 RadiusSimulator.jar
-rwxr--r-- 1 hiyoko hiyoko 2202 Mar 24 23:56 pom.xml
-rw-rw-rw- 1 hiyoko hiyoko 4344 Apr 29 22:23 root.jks
drwxr-xr-x 1 hiyoko hiyoko 512 Apr 5 12:04 src
drwxrwxrwx 1 hiyoko hiyoko 512 Apr 5 13:19 target
-rw-rw-rw- 1 hiyoko hiyoko 6862 Apr 29 22:23 win10man_isegiz_pxgrid.jks
[20/04/29] v2$
のようになります。RadiusSimulator.jar, root.jks, win10man_isegiz_pxgrid.jksは1.0の記事で使用したものをcopyしています。
sample codeは
[20/04/30] v2$ ls -al src/main/java/com/cisco/pxgrid/samples/ise/
total 80
drwxr-xr-x 1 hiyoko hiyoko 512 Apr 5 12:04 ./
drwxr-xr-x 1 hiyoko hiyoko 512 Apr 5 12:04 ../
-rwxr--r-- 1 hiyoko hiyoko 4031 Mar 24 23:56 CustomServiceConsumer.java*
-rwxr--r-- 1 hiyoko hiyoko 4703 Mar 24 23:56 CustomServiceProvider.java*
-rwxr--r-- 1 hiyoko hiyoko 6520 Mar 24 23:56 PxgridControl.java*
-rwxr--r-- 1 hiyoko hiyoko 4840 Mar 24 23:56 SampleConfiguration.java*
-rwxr--r-- 1 hiyoko hiyoko 3701 Mar 24 23:56 SampleHelper.java*
-rwxr--r-- 1 hiyoko hiyoko 13328 Mar 24 23:56 Session.java*
-rwxr--r-- 1 hiyoko hiyoko 4043 Mar 24 23:56 SessionQueryAll.java*
-rwxr--r-- 1 hiyoko hiyoko 2048 Mar 24 23:56 SessionQueryByIP.java*
-rwxr--r-- 1 hiyoko hiyoko 3544 Mar 24 23:56 SessionSubscribe.java*
-rwxr--r-- 1 hiyoko hiyoko 5013 Mar 24 23:56 StompFrame.java*
-rwxr--r-- 1 hiyoko hiyoko 4957 Mar 24 23:56 StompPubsubClientEndpoint.java*
-rwxr--r-- 1 hiyoko hiyoko 888 Mar 24 23:56 StompSubscription.java*
drwxr-xr-x 1 hiyoko hiyoko 512 Apr 5 12:04 model/
[20/05/01] v2$
のようになっており、上のjavaファイルの拡張子以外の部分が実行コマンドで使われます。
実行コマンドは
mvn exec:java -Dexec.mainClass= "com.cisco.pxgrid.samples.ise.<sample code nameから拡張子を除いたもの>"
-Dexec.args= "-a <ISEのIP/FQDN"> -u -k <identity keystore JKSファイル名> -p <keystoreのpassphrase> -t <truststre JKSファイル名> -q <truststoreのpassphrase>"
今回は例としてSessionSubscribeを使用します。
[20/05/01] v2$ mvn exec:java -Dexec.mainClass="com.cisco.pxgrid.samples.ise.SessionSubscribe" -Dexec.args="-a 1.150.0.196 -u pxgridv2clientwin10man -k ./win10man_
isegiz_pxgrid.jks -p Cisco123 -t ./root.jks -q Cisco123"
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] --------------< com.cisco.pxgrid:pxgrid-rest-ws-samples >---------------
[INFO] Building pxgrid-rest-ws-samples 2.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ pxgrid-rest-ws-samples ---
------ config ------
hostname = 1.150.0.196
nodename = pxgridv2clientwin10man
password = (not specified)
description = (not specified)
keystorefilename = ./win10man_isegiz_pxgrid.jks
keystorepassword = Cisco123
truststorefilename = ./root.jks
truststorepassword = Cisco123
--------------------
11:56:38.574 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate request={}
11:56:39.859 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate response={"accountState":"PENDING","version":"2.0.1.7"}
11:57:39.860 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate request={}
11:57:39.890 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate response={"accountState":"ENABLED","version":"2.0.1.7"}
11:57:39.890 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.SessionSubscribe - pxGrid controller version=2.0.1.7
11:57:40.039 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - ServiceLookup request={"name":"com.cisco.ise.session"}
11:57:40.083 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - ServiceLookup response={"services":[{"name":"com.cisco.ise.session","nodeName":"ise-mnt-isegiz","properties":{"sessionTopic":"/topic/com.cisco.ise.session","groupTopic":"/topic/com.cisco.ise.session.group","wsPubsubService":"com.cisco.ise.pubsub","restBaseURL":"https://isegiz.hiyokocisco.com:8910/pxgrid/mnt/sd","restBaseUrl":"https://isegiz.hiyokocisco.com:8910/pxgrid/mnt/sd"}},{"name":"com.cisco.ise.session","nodeName":"ise-mnt-ise24b","properties":{"sessionTopic":"/topic/com.cisco.ise.session","groupTopic":"/topic/com.cisco.ise.session.group","wsPubsubService":"com.cisco.ise.pubsub","restBaseURL":"https://ise24b.hiyokocisco.com:8910/pxgrid/mnt/sd","restBaseUrl":"https://ise24b.hiyokocisco.com:8910/pxgrid/mnt/sd"}}]}
11:57:40.083 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.SessionSubscribe - wsPubsubServiceName=com.cisco.ise.pubsub sessionTopic=/topic/com.cisco.ise.session
11:57:40.084 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - ServiceLookup request={"name":"com.cisco.ise.pubsub"}
11:57:40.111 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - ServiceLookup response={"services":[{"name":"com.cisco.ise.pubsub","nodeName":"ise-pubsub-isegiz","properties":{"wsUrl":"wss://isegiz.hiyokocisco.com:8910/pxgrid/ise/pubsub"}}]}
11:57:40.111 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.SessionSubscribe - wsUrl=wss://isegiz.hiyokocisco.com:8910/pxgrid/ise/pubsub
11:57:40.155 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccessSecret request={"peerNodeName":"ise-pubsub-isegiz"}
11:57:40.194 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccessSecret response={"secret":"vosL7bDsjOPs8j82"}
11:57:41.877 [Grizzly(1)] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - WS onOpen
11:57:41.926 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - STOMP CONNECT host=isegiz.hiyokocisco.com
11:57:42.029 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - STOMP SUBSCRIBE topic=/topic/com.cisco.ise.session
11:57:42.052 [Grizzly(2)] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - STOMP CONNECTED version=1.2
press <enter> to disconnect...
<待ち受け中>
12:00:10.567 [Grizzly(1)] INFO com.cisco.pxgrid.samples.ise.SessionSubscribe - Content={"sessions":[{"timestamp":"2020-04-30T21:00:57.391+09:00","state":"STARTED","userName":"user01","callingStationId":"00:11:22:33:44:55","auditSessionId":"1001","ipAddresses":["200.200.200.200"],"macAddress":"00:11:22:33:44:55","nasIpAddress":"1.150.0.185","endpointProfile":"Unknown","adNormalizedUser":"user01","providers":["None"],"endpointCheckResult":"none","identitySourcePortStart":0,"identitySourcePortEnd":0,"identitySourcePortFirst":0,"networkDeviceProfileName":"Cisco","mdmRegistered":false,"mdmCompliant":false,"mdmDiskEncrypted":false,"mdmJailBroken":false,"mdmPinLocked":false}]}
<RadiusSimulator.jarでAccounting Startを送信>
12:00:33.046 [Grizzly(2)] INFO com.cisco.pxgrid.samples.ise.SessionSubscribe - Content={"sessions":[{"timestamp":"2020-04-30T21:01:24.147+09:00","state":"DISCONNECTED","userName":"user01","callingStationId":"00:11:22:33:44:55","auditSessionId":"1001","ipAddresses":["200.200.200.200"],"macAddress":"00:11:22:33:44:55","nasIpAddress":"1.150.0.185","endpointProfile":"Unknown","adNormalizedUser":"user01","providers":["None"],"endpointCheckResult":"none","identitySourcePortStart":0,"identitySourcePortEnd":0,"identitySourcePortFirst":0,"networkDeviceProfileName":"Cisco","mdmRegistered":false,"mdmCompliant":false,"mdmDiskEncrypted":false,"mdmJailBroken":false,"mdmPinLocked":false}]}
<RadiusSimulator.jarでAccounting Stopを送信>
<snip>
12:24:25.466 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - STOMP DISCONNECT receipt=ID-123
12:24:25.471 [Grizzly(2)] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - STOMP RECEIPT id=ID-123
12:24:28.495 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.StompPubsubClientEndpoint - WS onClose closeReason code=NORMAL_CLOSURE phrase=
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 28:10 min
[INFO] Finished at: 2020-04-30T12:24:28Z
[INFO] ------------------------------------------------------------------------
[20/05/01] v2$
上記はpxGrid 2.0のSession subscriberを起動し、別terminalから作成したRadiusSimulator.jarによるsessionがRADIUS Accounting Start/Stopを受信した時のsession情報をpxGrid経由で受信したものになります。
2.0でも初接続時は
11:56:39.859 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate response={"accountState":"PENDING","version":"2.0.1.7"}
11:57:39.860 [com.cisco.pxgrid.samples.ise.SessionSubscribe.main()] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate request={}
となった場合、ISE側でのApproveが必要になります。また、
2.0でもClientがAll Clientsタブに表示されますが、StatusはOfflineになります。これは、2.0はWeb Clientsタブに改めて表示されるためで、
こちらはStatus:Onになっていることが確認できます。
1.0/2.0共にpxGrid連携での切り分けやISEでどのようなログを取得できるか簡単な確認に利用できます。
Testing and Configuration Guide for Cisco Platform Exchange Grid (pxGrid) 2.0
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします