1.MQTT(Message Queuing Telemetry Transport)
MQTT(Message Queuing Telemetry Transport)について
■1.概要
・今の時代、PCとPCやサーバを通信するプロトコルはHTTP(HTTPS)が中心。FTPやSMTP、telnet、SNMP、SMBなど、本当はいくつかあるけどね。
・MQTTは、PCやスマホなどはなく、工場の機械やセンサーなどのIoT機器の通信に適したプロトコル。
・メッセージ(Message)を、送信者と受信者の溝を埋めるためにキューに蓄積(Queuing)しながら、 Telemetry(遠隔測定)をTransport(運搬)する。だが、実際にはQueueはしていない。IBM時代の名前の名残のようです。
・http://mqtt.org/ にいろいろ書いてある。たとえば、MQTTは、M2MやIoTの接続に利用する軽量なプロトコルですと。
・HTTP(HTTPS)に比べてヘッダサイズが小さい(2バイトしかない)。でも、他のヘッダは同じだよ。
[イーサ][IP][TCP][HTTP][データ]
[イーサ][IP][TCP][MQTT][データ]
※HTTPヘッダが結構大きい。
・軽量(つまり、データ量が少なくてすむ)プロトコルなので、電池で動くIoTのセンサーなどにとって、電源容量が少ないのは望ましい。
・MQTTはセキュリティ機能(認証や暗号)もある→TLSを使う。
・Publisher(送信者)もSubscriber(受信者)もトピック名を設定してメッセージを送ったり、受け取ったりする。
・間にブローカが入ることで、1対1ではなく、1対多の通信が簡単に行える。
・仕組みはメルマガに似ている。該当のメルマガに登録した人だけがそのメルマガを読める
・MQTTの詳細な仕様は以下が参考になります。http://public.dhe.ibm.com/software/dw/jp/websphere/wmq/mqtt31_spec/mqtt-v3r1_ja.pdf
■2.登場人物
・ブローカー(サーバ)
・Publisher(送信者)
・Subscriber(受信者)
■3.通信の流れ
・送信者は受信者を意識することなく、好きな時にデータを送ることができる。受信者との仲介をするのがブローカー。
・MQTTの通信をする前段として、送信者と受信者はブローカーにアクセスする必要があります。
・以下に流れをまとめます。
(1)送信者
①ブローカに接続します(CONNECT)
②トピック名を指定して、ブローカに対してメッセージを送信します(PUBLISH)
(2)受信者
①ブローカに接続します(CONNECT)
②購読したいトピックに関して、ブローカに対してメッセージを送信します。(SUBSCRIBE)
③送信者のPUBLISHメッセージが届くようになる。
■4、実際にやってみよう。
Windowsでも簡単にできます。
(1)ソフトのダウンロード
ソフトは以下からダウンロードします。ブローカーとクライアントソフトの両方が使えます。
https://mosquitto.org/
ダウンロードページは以下です。私は、Windowsの64bit版
mosquitto-1.6.2-install-windows-x64.exe をダウンロートしてインストール
https://mosquitto.org/download/
(2)コマンドプロンプトから実行
コマンドプロンプトで、インストールされたフォルダに移動します。
c:\Program Files\mosquitto>
(3)ブローカーの起動
>mosquitto -v
で起動。-vは詳細という意味なので、省略可能
ただ、今回は、ネット上のブローカ(test.mosquitto.org)を使うので、起動は不要。
(4)クライアント(購読者)を起動
もう一つコマンドプロンプトを立ち上げる
購読要求の(SUBSCRIBE)を実行する。
>mosquitto_sub -h test.mosquitto.org -d -t msg/network
-h:ブローカーのサーバを指定
-d:デバックメッセージの表示
-t:購読するトピック名
--------結果はこんな感じ
c:\Program Files\mosquitto>mosquitto_sub -h test.mosquitto.org -d -t msg/network Client mosq/KydpkSJ1xV8n7irO7H sending CONNECT Client mosq/KydpkSJ1xV8n7irO7H received CONNACK (0) Client mosq/KydpkSJ1xV8n7irO7H sending SUBSCRIBE (Mid: 1, Topic: msg/network, Qo S: 0, Options: 0x00) Client mosq/KydpkSJ1xV8n7irO7H received SUBACK Subscribed (mid: 1): 0
----------
このように、CONNECTとCONNACKによる接続と、msg/networkのTopiCを購読要求しています。 |
(5)クライアント(配信者)を起動
もう一つコマンドプロンプトを立ち上げる
メッセージの送信の(PUBLISH)を実行する。
mosquitto_pub -h test.mosquitto.org -d -t msg/network -m "I am a networkspecialist!"
-m:メッセージの内容
------------結果はこんな感じ
c:\Program Files\mosquitto>mosquitto_pub -h test.mosquitto.org -d -t msg/network -m "I am a networkspecialist!" Client mosq/DQwypOw3cVO3Cstcfi sending CONNECT Client mosq/DQwypOw3cVO3Cstcfi received CONNACK (0) Client mosq/DQwypOw3cVO3Cstcfi sending PUBLISH (d0, q0, r0, m1, 'msg/network', . .. (25 bytes)) Client mosq/DQwypOw3cVO3Cstcfi sending DISCONNECT
----------
また、さきほどの購読したプロンプトには、以下が表示される。 |
----------
Client mosq/KydpkSJ1xV8n7irO7H received PUBLISH (d0, q0, r0, m0, 'msg/network', ... (25 bytes)) I am a networkspecialist!
----------
ここまでで、6384bitでした。とても小さいですね。
■6.上記のパケットのキャプチャ
(1)CONNECT
(2)PUBLISH Messeage
2.NTP
1.NTPとは
NTP(Network Time Protocol)は、言葉の通り、ネットワーク(Network)上の機器の時刻(Time)を正確に維持するためのプロトコル(Protocol)です。 また、TCP/IPのプロトコルを使って、端末(NTPクライアント)に時刻を配信するサーバをNTPサーバと言います。
余談ですが、東京都小金井市にあるNICT(国立研究開発法人 情報通信研究機構)では、日本標準時を決定・維持しているとともに、NTPサーバ(ntp.nict.jp)にて標準時を配信しています。
余談ですが、企業でもNICTのNTPサーバを指定していいようです。申請などは不要ですが、少しだけ条件があるみたいですが・・・
http://jjy.nict.go.jp/tsp/PubNtp/qa.html#q0-1
まずは過去問(H25春SC午後Ⅱ問2)を見てみよう。
過去問(H25春SC午後Ⅱ問2) |
---|
外部DNSサーバは,インターネット上の時刻サーバとの間で,[ a ]を用いて時刻同期を行っている。FW及び情報システムの各サーバは,外部DNSサーバとの間で,[ a ]を用いて時刻同期を行っている。 |
↓
↓
↓
↓
↓
空欄に当てはまるのがNTPである。
NTPに関しては、ネットワークスペシャリスト試験の過去問(H19NW午後1問3)で詳しく問われた。その問題を見てみよう。
NTPに関して(H19NW午後1問3より) |
---|
〔NTPの仕組み〕 ネットワーク上の機器の時刻を正確に維持するために,NTP(Network TimeProtocol)を使用する。NTPは,次の2点を前提に設計されている。 ・ネットワーク上に正確な時刻情報を保持する機器がある。 ・時刻を同期させる機器間の通信で,要求電文と応答電文がネットワーク内で遅延する時間が等しい。 NTPは,stratumと呼ばれる階層構造をもち,最上位の機器が,原子時計や標準電波,[ a ]用人工衛星などの正確な時刻源から時刻を取得し,下位の機器に提供する。遅延時間にばらつきがあると,時刻の精度に影響するので,時刻を同期させる機器は①ネットワーク的に近い方がよい。 (中略) 〔タイムサーバ〕 インターネット上にはタイムサーバが公開されているので,そこから時刻を取得することが可能である。その場合,②時刻を取得する機器を限定し,その取得した時刻を組織内に展開する構成が推奨されている。このように,インターネット上のタイムサーバを利用したとしても,社内にタイムサーバを設置したり,FWの設定を変更したりしなければならないので,正確な時刻源と同期するタイムサーバを社内に設置した方がよい。この形態は,③可用性の面でも,インターネット上のタイムサーバを利用するより優れている。 設問1 本文中の[ a ]に入れる適切な字句を答えよ。 設問2 NTPで使用される標準時を解答群の中から選び,記号で答えよ。 解答群 ア DST イ GMT ウ JST エ TAI オ UTC 設問3 NTPの動作について,(1)~(3)に答えよ。 (1)本文中の下線①に示す”ネットワーク的に近い”とは,どのような状態を意味するか。20字以内で具体的に述べよ。 (2)本文中の下線②に示す構成をとることで,どのような問題の発生を回避できるか。40字以内で述べよ。 (3)インターネット上のタイムサーバを利用する場合,本文中の下線③に示す可用性の面で,劣ってしまう点は何か。25字以内で述べよ。 |
この問題の採点講評を読むと,NTPの目的などが簡単に理解できるので引用する。
様々なアプリケーションでタイムスタンプが利用されているが,時刻がずれてしまうと,ファイルやデータベースを共有した場合に不具合が発生したり,システム管理で重要なログが活用できなくなったりする。そうしたことから,正確な時刻設定への要求が高まっている。 本問では,正確な時刻を維持するための仕組みであるNTP(Network Time Protocol)を題材として,ネットワークエンジニアに知っておいてほしい基本的な知識と,タイムサーバ導入を通じてネットワークを構築する能力について問う。 |
↓
↓
↓
↓
↓
試験センターの解答例は以下である。
設問1 a:GPS
設問2 オ
設問3
(1) ・経由するネットワーク機器が少ない状態
・伝送遅延時間が小さい状態
(2) 特定のサーバに負荷が集中し,確実に時刻を取得することが困難になってしまう問題
(3) タイムサーバヘの接続性が保証されない点
もう一つ、過去問(R3春SC午後2問1)をみてみよう。
過去問(R3春SC午後2問1) |
---|
N社が提供したログの大半は,記録されていた時刻情報の【 a 】が日本標準時であり,協定世界時に対し時刻情報が【 b 】時間進んだ値で記録されていた。しかし,協定世界時で記録されていたログ,【 a 】を示す情報が記録されていなかったログも存在した。 |
2.GMTとUTC
GMT(Greenwich Mean Time)は、グリニッジ標準時ですので、経度0であるイギリスのグリニッジ天文台の時刻を指します。
UTC(Coordinated universal time)は協定世界時と言われ、GMTの世界標準版です。GMTとはコンマ何秒のズレしかなく、ほぼ同じ時刻を指します。同じものとして考えてもいいでしょう。
3.Ciscoスイッチにおける、NTPによる時刻同期の設定
Ciscoスイッチにおける、NTPによる時刻同期の設定を紹介します。
(1)現在の時刻を見てみましょう。
Switch#sh clock
*00:08:26.235 UTC Mon Mar 1 1993
1993年って、いつの時代でしょうか。全然違う日付になっています。
(2)NTPプロトコルを用い、NTPサーバと時刻同期をします。
接続先は、社内のNTPサーバがあれば、そこを指定しましょう。
指定するNTPサーバが機器ごとに異なると、時刻がずれる
危険があります。
今回は、公のNTPサーバとして、情報通信研究機構(NICT)のNTPサーバ(ntp.nict.jp)に接続してみましょう。
※http://jjy.nict.go.jp/ntp/
(3)その前に、IPアドレスの設定
NTPサーバと通信するので、IPアドレスを設定します。
デフォルトゲートウェイと、名前解決のためにDNSも設定しておきましょう。
Switch(config)#int vlan 1 Switch(config-if)#ip address 100.64.1.33 255.255.255.0 Switch(config-if)#no shutdown Switch(config-if)#exit Switch(config)#ip default-gateway 100.64.1.1 Switch(config)#ip name-server 8.8.8.8
(4)NTPサーバの指定
NTPサーバとして、NICTのサーバを指定します。
Switch(config)#ntp server ntp.nict.jp Switch(config)#end
しばらくして、時刻を確認すると、正しい時間に設定されています。
Switch#sh clock 00:04:31: %SYS-5-CONFIG_I: Configured from console by console 00:04:41.571 UTC Sun Jul 14 2019
3.RADIUSやLDAP
1.認証サーバで利用するプロトコル
認証サーバで利用するプロトコルには、RadiusとLDAP、ActiveDirectoryで使うプロトコルなどが主である。
RadiusサーバもADサーバも、どちらもユーザ情報を持った認証サーバですよね。
LDAPも同じですか?
はい、そう考えてください。Radiusにしてもそうですが、Radiusはプロトコルであり、認証サーバはRadiusサーバと呼ばれます。LDAPも同じで、LDAPはプロトコルですが、LDAPサーバというと、ユーザ情報を持った認証サーバを指します。
※ADに関しては、プロトコルはNTLMv2などを使います。
RADIUSサーバとLDAPサーバの使い分けはどうするのですか?
外部からのリモートアクセスや無線LANの認証などのユーザ認証ではRADIUSが利用されます。一方、LDAPサーバは、ディレクトリサービスで利用されます。ディレクトリサービスですから、階層構造で管理される社員の情報および部署やアクセス権など、多くの情報を管理できます。それらの複雑な社員の属性情報を管理する場合に、LDAPサーバおよびLDAPのプロトコルが利用されます。
以下、簡単に図にした。ADだけはプロトコルが異なるが、試験に出るのはネットワークスペシャリストではRadiusがメイン(とはいってもほとんど出ない)、情報処理安全確保支援士であればLDAPであろう。
2.RADIUS
RADIUS(Remote Authentication Dial In User Service)とは、認証サーバに認証情報を問い合わせるときに利用するプロトコルです。利用シーンとしては、Remote Authentication Dial Inというフルスペルにあるように、ダイヤルアップの認証、無線LANの認証サーバ、SSL-VPN装置、などがあります。
(1)構成例
登場人物は以下の3つである。
❶利用者
❷RADIUSクライアント
❸RADIUSサーバ
例として、以下のようになる
PC ----→ SSLVPN装置 ----→ RADIUSサーバ
PC ----→ AP -----→ RADIUSサーバ
SSL-VPN装置やAPはNAS(Network Access Server)と呼ばれる。
また、RADIUSサーバに対してRADIUSクライアントとして働く。
つまり、RADIUSサーバに対して、IDやパスワード情報を送信する。
(2)そもそも、なぜRADIUSが必要なのか
たとえば、SSL-VPN装置において、RADIUSを使わなくても認証はできる。SSL-VPN装置にユーザ情報を登録すればいからです。
なぜRADIUSが必要なんですか?
目的は以下である。
①ユーザの一元管理のため。複数の認証をする場合、それぞれの装置でユーザを管理する必要がある。
②上記に関連するが、管理の容易性。一元管理なのでログの集約、利用状況の管理などが行いやすい。
③高度な機能を持つことが多い。たとえば、EAP-TLS対応など
(3)過去問(H25SC春午前2問7)を解いてみよう
過去問(H25SC春午前2問7) |
---|
問7 無線LAN環境に複数台のPC,複数のアクセスポイント及び利用者認証情報を管理する1台のサーバがある。利用者認証とアクセス制御にIEEE 802.1XとRADIUSを利用する場合の実装方法はどれか。 |
ア PCにはIEEE 802.1Xのサプリカントを実装し, RADIUSクライアントの機能をもたせる。
イ アクセスポイントにはIEEE 802.1Xのオーセンティケータを実装し,RADIUSクライアントの機能をもたせる。
ウ アクセスポイントにはIEEE 802.1Xのサプリカントを実装し,RADIUSサーバの機能をもたせる。
エ サーバにはIEEE 802.1Xのオーセンティケータを実装し, RADIUSサーバの機能をもたせる。|
↓
↓
↓
↓
↓
正解はイである。
3.LDAP
LDAP(Lightweight Directory Access Protocol)は、すでに述べた通り、ディレクトリサービスである。階層構造で管理される社員の情報および部署やアクセス権など、多くの情報を管理できる。
過去問(R2SC午後1問2)に、ディレクトリサーバの機能例があるので紹介する。空欄も答えてほしい。
ディレクトリサーバの機能例(R2SC午後1問2より) |
---|
↓
↓
↓
↓
↓
正解はもちろんLDAPである。
別の過去問(H22秋SC午後Ⅱ問2)をみてみましょう。
過去問(H22秋SC午後Ⅱ問2) |
---|
LDAPのアカウント情報では, inetOrgPersonといったオブジエクトクラスによって組織の利用者の情報を管理する標準的な[ b ]を用いている。例えば,製品開発部のスズキタロウ氏が社内で利用するLDAP用のアカウント情報を[ c ]によってテキスト形式で示すと,図7となる。 ---------- 図7 ここから ---------- dn: uid=suzuki,ou=seihin-kaihatsu,dc=a-companyen: Taro Suzuki sn: Suzuki objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson ou:製品開発部 teleDhonenumber:03-XXXX-5555 c=com 図7 LDAPにおけるスズキタロウ氏のアカウント情報(抜粋) ---------- 図7 ここまで ---------- |
↓
↓
↓
↓
↓
さて、空欄ですが、以下が入ります。
b スキーマ
c LDIF
LDAPの通信は暗号化されていますか?
いえ、は暗号化されていないので、暗号化するにはLDAP over TLSを使います。
過去問(H21春SC午前Ⅱ)をみてみましょう。
過去問(H21春SC午前Ⅱ) |
---|
問10 通信の暗号化に関する記述のうち,適切なものはどれか。 ア IPsecのトランスポートモードでは,ゲートウェイ間の通信経路上だけではなく,発信ホストと受信ホストとの間の全経路上でメッセージが暗号化される。 イ LDAP クライアントがLDAPサーバに接統するとき,その通信内容は暗号化することができない。 ウ S/MMEで暗号化した電子メールは,受信側のメールサーバ内に格納されている間は,メール管理者が平文として見ることができる。 エ SSLを使用すると,暗号化されたHTML文書はブラウザでキャッシュの有無が設定できず,ディスク内に必ず保存される。 |
↓
↓
↓
↓
↓
⇒正解はア
イに関しては、LDAP over TLSを使うことで通信内容を暗号化することができます。
4.STUN
H28年秋NW午後Ⅱ問1では、STUN(Session Traversal Utilities for NAT) の仕組みについて問われました。
STUNはビデオチャットなどのWebRTC(Web Real-Time Communication)などで利用される技術です。
インターネットに出るときはグローバルIPアドレスを使いますが、通信をしようとするPCは、自分のグローバルIPアドレスが何かを知らないものです。でも、通信相手と通信をするためにはプライベートIPアドレスでは通信できません。そこで、自分のグローバルIPアドレスを知る仕組みが必要で、それがSTUNの仕組みです。具体的には、STUNサーバに、教えてもらいます。
以下は、過去問です。これをいきなり読むと、難しいですよね。
図4の例では,ブラウザ2上のAPがSTUNプロトコルを用いてSTUNサーバ1,2から〈g2〉を得て,それをブラウザ1上のAPに通知する。 STUNプロトコルの概要は次のとおりである。 ・STUNクライアントは, STUNサーバヘBindingリクエストを送る。 ・ STUNサーバは,受け取ったIPパケットのヘッダから送信元のIPアドレスとポート番号を取り出し,Bindingレスポンス中のデータに格納して返す。 |