カテゴリー「パソコン・インターネット」の12件の記事

2022年8月12日 (金)

電子処方せん対応 4Dプラグイン開発(その3かな?)

4Dのプラグインを開発する

OpenSSL、PKCS#11を使った4Dのプラグインを開発する時の備忘録

4D Plugin WizardでVisual Studioのプロジェクトを作る

4D Plugin Wizard.4DProjectを4D.exeで起動

Newボタンで新しいプロジェクトを追加、名前をつけて開く

49_20220812175001

Add Theme...で新しいテーマを追加

Add Command...で新しいコマンド(関数)を追加

48_20220812175301

コマンドの名前を決めて

Addボタンで引数を追加、タイプ、名前、方向を決める。戻り値のある無し、型も指定、OKで保存

コマンドは後でいくらでも追加、修正ができるので、とりあえず適当に一つ作っておけばいい

49_20220812175701

ここのチェックはデフォルトのまま。唯一、Xcodeのプロジェクトは今回は必要ないので、チェックを外しておく

Generateボタンを押してプロジェクトを生成、保存先フォルダを指定して保存

ランタイムエラーがでるが、無視して継続を選んで最後まで実行、プロジェクト名のフォルダができてその内容が表示される。

51_20220812180801

4D Plugin-VS.slnがプロジェクトファイルだ

プロジェクトの起動とビルド

4D Plugin-VS.slnをダブルクリックするとVisual Studioが起動する、4Dが生成したプロジェクトは古いので最新のバージョンになるようにOKボタンを押して自動的に変換してもらう。

52_20220812182101

起動した。ソリューションエクスプローラーからソースファイルの4DPlugin.cppを選択するとソースが表示される。

53

ソースは不完全なので、このままではコンパイルできない。試しにビルドするとエラーが吐き出されるのでソースを修正する。4Dのプラグインは4DのAPIを使って引数を取り出し、4DのAPIで引数にデータを戻す。文字列(ストリング)はUTF16なのでunsigned short*であるので、ストリング関係の関数は2バイト用のを使うこと。ストリングリテラルはL"abc"という感じ。ストリングの受け渡しは少々わかりづらいので注意。BLOBはハンドルで渡される。ハンドルのロック、アンロックに注意。そのあたりを注意しておけば大丈夫だ。

詳細は省くが、こんな感じのソースにするとビルドできる。

void HPKI_test( PA_PluginParameters params )
{
	PA_long32 Param1;
	PA_Unistring* Param2;
	PA_Unichar* Param2_uchars;
	PA_Handle Param3;

	Param1 = PA_GetLongParameter(params, 1);
	Param2 = PA_GetStringParameter( params, 2 );
	Param2_uchars = PA_GetUnistring(Param2);

	Param2_uchars = (PA_Unichar * )L"789";
	Param3 = PA_GetBlobHandleParameter(params, 3);


	// --- write the code of HPKI_test here...
	PA_SetLongParameter( params, 1, Param1 );
	PA_SetUnistring( Param2, Param2_uchars );
	PA_SetBlobHandleParameter( params, 3, Param3 );
}

 

ビルドするとsample.4Dbase→Pluginsフォルダの中に4D Plugin.bundleというプラグインができる。

sample.4Dbaseフォルダ中にはsample.4dbという4Dのデータベースが最初からあるので、これを起動すると作ったプラグインが表示されて利用可能になる。

56_20220812193301

あとは適当にテストメソッドを書いてテストする。

57_20220812193701

テスト→修正を繰り返す時は、必ず4Dを終了させること。動いているとプラグインが開いたままなので、VisualStudioからプラグインを書き換えられないのでリンクエラーとなる。

 

プラグインのコマンドの追加

 

コマンドの追加はResources¥manifest.jsonを修正する。ダブルクリックするとVSが開くので、追加するコマンドを表現したjsonオブジェクトをコレクションに追加する。

58

 

プラグインのソースの先頭のスイッチ文に新しいコマンドの関数への分岐を追加する。

59

 

関数を実装する。

61_20220812204601

 

4DPlugin.hヘッダーファイルで新しい関数を宣言する。

69_20220812210701

 

OpenSSL、PKCS#11の導入

次にOpenSSLとPKCS#11を使えるようにプロジェクトの設定を変更する。

 

ソースにインクルードファイルを記述、HPKIのサンプルコードのソースからコピペ

62_20220812213701

 

OpenSSLのインクルードファイルまでのパスを追加する。

63_20220812211101

 

pkcs11.hヘッダーファイルをHPKIのサンプルコードのフォルダからプラグインのフォルダにコピーする。

67_20220812211401

 

pkcs11.hヘッダーファイルは、置いただけでは認識されないので、プロジェクトにドラッグ&ドロップする。

70

 

プロジェクト→右クリック→プロパティで、リンカーの入力。追加の依存ファイルにlibcrypto.libを追加

71

 

同じくリンカーの全般の追加のライブラリディレクトリにC:¥Program Files¥OpenSSL-Win64¥libを追加

72

 

以上で終わりかな。漏れてたらあとで追記する。あとはひたすら書いて直す書いて直す...楽しい苦行のはじまりだ。

 


歯科電子カルテシステム・カルテメーカー は利用料月額16,500円(税込)
MacとWinの両方で利用可能な電子カルテです。介護保険にも対応してます。

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

 

| | コメント (0)

電子処方せん対応 4Dプラグイン開発

電子処方箋対応 4Dプラグイン開発 pkcs#11、OpenSSL、電子署名、HPKIカード 導入備忘録」の続き

 

サンプルコードのテスト

以下のページの「サンプルコード(ZIP形式)」をクリックしてzipファイルをダウンロード

やさしいHPKIMeDis

サンプルのコマンドを使ってみる

サンプルの中にビルド済みの実行ファイルがあるので、これを使ってみる。使い方は付属ドキュメントを参照

適当なところに「すべて展開..」で解凍する。

27_20220812155001

「HPKISignVerifySamoleP11」フォルダを開く

28_20220812155301

「HPKISignVerifySamoleP11.exe」を確認

HPKIカードをセットして、コマンドプロンプトを開いて実行

>HPKISignVerifySampleP11 sign <パスワード>
証明書取得処理 開始
Certificate:
30 82 05 7b 30 82 04 63 a0 03 02 01 02 02 02 01
81 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00
(略)
6b 61 31 1b 30 19 06 03 55 04 05 13 12 54 65 73
...
証明書取得処理 成功: HPKI END ENTITY CERTIFICATE

署名処理 開始
SHA256 HASH:
af a2 7b 44 d4 3b 02 a9 fe a4 1d 13 ce dc 2e 40
16 cf cf 87 c5 db f9 90 e5 93 66 9a a8 ce 28 6d

Signature:
3a e0 63 c6 24 5e 87 42 4b f3 02 7b e7 41 a9 23
7f be 63 c6 18 9b b8 8a 77 80 a2 6c d4 fd 13 b0
(略)
00 ba c8 c3 41 9a 5b bd de a4 7f f8 d0 95 e5 3d
署名処理 成功

検証処理 開始
検証処理 成功

ドライバやライブラリが正しくインストールされていれば、特に問題なく動作する。

 

サンプルのコンパイルとビルド

次に「HPKISignVerifySampleP11」のプロジェクトを開いて、ソースコードの確認とビルドまたはデバッグをしてみる

29_20220812161101

「HPKISignVerifySampleP11.sln」がVSのプロジェクトファイルだ。これをダブルクリックして開く、右のソリューションエクスプローラーで「HPKISignVerifySampleP11.c」をクリックするとソースが表示される。

32_20220812161701

ビルド」メニューから「HPKISignVerifySampleP11をビルド」を選ぶとコンパイルとビルドが開始される。

33_20220812162601

下のパネルに処理経過が表示され、ビルド:成功1と表示されたらOK

今のディレクトリからx64→Debugと開くとビルドしたHPKISignVerifySampleP11.exeができている。

41_20220812163101

コマンドプロンプトで作業ディレクトリをここに変更して、このHPKISignVerifySampleP11.exeを先ほどと同じように実行すると同じ結果が表示される。

ビルドに失敗する時

OpenSSLを標準的な場所のインストールしてあれば問題なくビルドできるはずだ、ダメな時は、ソリューションエクスプローラーでプロジェクト名(HPKISignVerifySampleP11)を右クリック、一番下のプロパティを選択

C/C++の全般の追加のインクルードディレクトリでOpenSSLへのパスを確認

42_20220812163901

リンカの全般の追加のライブラリディレクトリでOpenSSLへのパスを確認

43_20220812164301

同じくリンカのすべてのオプションの追加のライブラリディレクトリOpenSSLへのパスを確認

44_20220812164501

これらが問題なければ、正常にビルドできるはずである。再度ビルドするときは「リビルド」を選ぶ

 

デバッグして処理の追跡する

動作を逐次確認するのであればデバッグモードで動かす。

前準備として、コマンドに渡す引数を事前に設定しておく

ソリューションエクスプローラーでプロジェクト名(HPKISignVerifySampleP11)を右クリック、一番下のプロパティを選択

デバッグのコマンド引数を編集して引数を設定する。先頭のスペースはいらない

45_20220812165201

ソースコードの左端をクリックしてブレークポイントを設定

デバッグメニューからデバッグの開始を選択。

46_20220812165801

ブレークポイントに達すると止まる。変数など確認して動作を見ていく

47_20220812165901

 

以上

 


歯科電子カルテシステム・カルテメーカー は利用料月額16,500円(税込)
MacとWinの両方で利用可能な電子カルテです。介護保険にも対応してます。

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

 

| | コメント (0)

忘れないうちにOpenSSLでの暗号化と復号 (その2)

前回の続き、こちらのページを参考にした。

OpenSSL で RSA 公開鍵暗号を試してみようWEB ARCH LABO

公開鍵で暗号化→秘密鍵で復号(通信等)

最初はSSL(TSL)で使われ一般的に通信の暗号化で使われる公開鍵で暗号化→秘密鍵で復号する方法をやってみる

暗号化

openssl-rsautl」コマンドで、文章を暗号化する。「-encrypt」で暗号化を指示、「-pubin」で暗号化を公開鍵で行うように指定、「-inkey」で公開鍵ファイルを指定、「-out」で暗号化した文書の保存先を指定。

$ echo "Hello World" | openssl rsautl -encrypt -pubin -inkey pub.key -out message.dat
$

 

暗号化されたメッセージを見てみる。

$ hexdump message.dat
0000000 84 d2 5d 29 aa ff 3f ce 78 b7 33 6c 23 90 f1 9d
0000010 e4 f0 2f 9c 82 cc 31 02 00 12 48 4b 90 ef 0d f5
0000020 c0 06 bd 59 d4 ed 13 06 5c 2c 6c 04 96 d0 80 0a
0000030 e7 43 4d 0e e0 bc b4 59 a6 70 1a 3c 05 74 74 b4
0000040 2e 3a 35 51 4a 67 4d 62 ab 81 52 c9 12 1d cd 47
0000050 de ef a6 10 a2 f4 9c fe d7 51 86 cd 95 aa 79 a2
0000060 e8 13 5e 7b 13 d2 bf b8 3a 1f 7e 01 55 30 5f 71
0000070 b0 aa 07 cd 74 14 e2 d7 a5 8b 14 16 b5 e3 c3 37
0000080 73 4f 5e b3 0f 50 15 e6 6d 77 61 37 47 83 9c 4b
0000090 52 3b ca c8 09 b3 81 d7 e2 c1 d4 b3 e6 8a 62 db
00000a0 65 81 26 d2 7d 08 60 44 c8 fa e0 9d b3 02 77 56
00000b0 d2 65 f7 14 e4 f2 c2 45 49 ea b4 7d a3 56 78 5f
00000c0 62 f1 2b ab 3f 7d 66 9c de 1f 3a 56 98 76 05 dc
00000d0 4c 31 80 42 65 c0 d2 c7 43 3d b6 34 ba 04 0e 30
00000e0 65 51 f5 16 a5 4b 7d 86 73 30 e1 34 e8 59 b8 2e
00000f0 f8 24 72 9d 1e 5a 84 0e c1 76 d4 c2 62
00000fd

253バイトのバイナリーデータである。鍵長と同じであることに注目。実はこれも1個のでかい整数である。RSA公開鍵では、最終的に公開鍵の数値で割った時の余りが暗号文となるので、必ず桁数は同じになる。ちなみに暗号化前の前処理で平文はパディングという詰め物をして鍵長と同じ桁数の整数にしてから暗号化を行う。パディングについては後述。

また、桁数が決まっているため、一度に暗号化できるのは桁数以下(パディングあるのでもっと短い)の文字数(サイズ)でなければいけない。その上、RSA暗号鍵方式は暗号化、復号化にとても時間がかかるので通常の通信で本文を暗号化するのには向いていない。なので、RSA暗号鍵は、電子署名とか認証という用途(暗号化対象は短くてよい、公開鍵と秘密鍵という2つの鍵が必要)に使われる。

 

復号

復号も同じ「openssl-rsautl」コマンドで行う。「-decrypt」で復号を指示、「-in」で暗号化されたファイルを指定、「-inkey」で秘密鍵を指定、なおデフォルトで扱う鍵は秘密鍵なので、秘密鍵のオプションは必要ない。

$ openssl rsautl -decrypt -in message.dat -inkey server.key
Hello World

無事に復号できた。

 

どんな計算をしてるの?

暗号化、復号の計算は実はとてもシンプル

m:元メッセージ c:暗号文 e:公開指数 n:公開鍵 d:秘密鍵(秘密指数)正確には微妙に違うけどw

20220812-104759

計算式自体は暗号化も復号も全く同一、なので、正確には
秘密鍵で暗号化して、公開鍵でそれを暗号化すると、元の平文になる。
公開鍵で暗号化して、秘密鍵でそれを暗号化すると、元の平文になる。
というわけで、暗号化しかしていない。これは面白い。

ちなみにn=p x qでpとqはでかい素数。dはこのpとqのペアがわからないと計算できない。このnの素因数分解が異常に難しいので安全とされているが、段々難しくなっているようで最近は違う数学的な手法が使われることが多くなってる

なお計算式は簡単であるが、実際の処理は大変である、公開鍵での暗号化でも、公開指数は65537に固定されているけど、253バイト(10進で300桁以上の数値)の6537乗を求めるのもそこそこ大変(msまではかからないけど)秘密鍵に至っては10進300桁の数値の300桁の数値の乗数を計算するのであるから、まともに計算してたら秒単位(コンピュータの世界では永遠に近い時間w)かかってしまうかもしれない。でも、天才は世の中にいるので、数msで処理する計算法を編み出した人がいる。「中国の剰余定理」という方法の応用だ。そしてなんと、この定理の最初の記述は中国の南北朝時代の3~5世紀頃に書かれた「孫子算経」だ。古代中国恐るべし

RSA鍵の計算については前出のこのサイトを参照

RSA鍵の要素と暗号化Qiita

ちょっと脱線。SSL(TSL)のネゴシエーションの時など、サーバー側から適当な乱数をクライアントの公開鍵で暗号化してクライアントに送り、クライアントはそれを自身の秘密鍵で復号する。この平文をサーバーに送ることで、クライアントが正しく証明書の保有者であると確認するのだが、この時、悪意あるサーバーが、文書のハッシュの平文を、暗号化せずにクライアントに送るとどうなるだろう。

クライアントは「秘密鍵で復号する」わけであるが、これは上記のように「秘密鍵で暗号化する」のと同義である。そう、「ハッシュを秘密鍵で暗号化したのが電子署名」であるので、悪意あるサーバーはクライアントが気がつかないうちにクライアントの電子署名がついた文書を入手できてしまうのである。

これを防止するのも先程ちょと触れたパディングである。送る平文に特定のマークをつけてから暗号化する。復号した時にこのマーク(パディング)があれば暗号化されたものだし、なければ、送ってきたのは暗号がされてない平文であると区別できる。パディングについて詳しくは以下のサイトを参照

公開鍵暗号の概要シニアエンジニアの庵 RSA暗号wiki

 

秘密鍵で暗号化→公開鍵で復号(署名のはず)

反対方向も同じなんだから、同じようにOpenSSLを使えばできるんじゃね。ってことで試してみた。

$ echo "Hello World" | openssl rsautl -encrypt -inkey server.key -out messageB.dat
$

おっ、なんかできたっぽい。

 

暗号文の中身を見てみる

$ hexdump messageB.dat
0000000 59 04 86 6f 2e 21 cb e2 79 91 6a b4 f0 2f 49 94
0000010 7d 3a 2c 8c 1b 39 e2 7c a6 fb 8d 7d 52 a4 55 ad
0000020 95 51 5e 86 0c 3c 34 ff d7 53 8e 75 6c 6b f5 fa
0000030 05 a0 fa 78 25 76 0d a2 d2 93 cc 90 cf e6 e4 09
0000040 2a 5c 77 ea 2b cd 49 b3 ea f3 b8 31 85 4e e5 27
0000050 44 36 82 6f 93 9d 72 c1 bc dc 94 9e 5d e5 f6 b7
0000060 10 ad d2 17 09 03 72 24 45 06 39 8a 30 f7 ee 35
0000070 11 6f 5f 7a 56 3f fc 98 f3 5e fa fb 6c 6c 67 ab
0000080 b6 6c 21 50 e8 04 2b 57 d0 33 67 0f 97 f4 7c eb
0000090 0b 78 63 3f ab a2 03 be 2a 00 cd b9 e7 1a 50 af
00000a0 0b a7 a9 0b 00 ab 17 ee 4a 58 eb 78 86 c9 8a 9a
00000b0 62 b2 81 3a bc ec a4 9d 7f 90 0f 13 e1 ac f7 62
00000c0 b8 d3 9b 75 c6 3e cb 54 14 d5 8c 7d fc 28 db 71
00000d0 7f b1 c8 31 f0 a3 a7 88 41 61 36 84 d2 4c d5 db
00000e0 9d 67 b6 92 4e ba 2a 3f 9a 95 c9 46 08 99 4b ae
00000f0 bd 86 20 cb ad 75 ba af d1 7e 55 eb c6
00000fd

それっぽいのができてる

 

公開鍵で復号してみる

$ openssl rsautl -decrypt -in messageB.dat -pubin -inkey pub.key
A private key is needed for this operation

秘密鍵が必要だゴラァって怒られた。なんで?!

 

秘密鍵でやってみる

$ openssl rsautl -decrypt -in messageB.dat -inkey server.key
Hello World

今度はできた。でもこれじゃない(笑)
やりたいのは公開鍵で復号することだ!

 

う〜ん、何故だと探すこと小一時間、これだこれだ

opensslでの暗号化・復号操作@IT

フムフムなるほど、秘密鍵で暗号化→公開鍵で復号は電子署名なので、「-encrypt」と「-decrypt」じゃなくて「-sign」と「-verify」なのね。前出のパディングの関係かなにかで実装する場合は対称ってわけじゃないんだね

 

では、早速やってみよう!

「-sign」オプションをつけて署名を指示、出力ファイル名も変えてと、秘密鍵を使うのでオプションの指定はなしで実行

$ echo "Hello World" | openssl rsautl -sign -inkey server.key -out Esign.dat
$

できた。

 

中身をみる

$ hexdump Esign.dat
0000000 33 f2 5c 05 e0 ab 43 8c 15 47 ae ee cd ef 01 fb
0000010 5c c7 1f 07 bf 1a 7d 43 cf cd 7e 84 26 49 43 01
0000020 90 97 1b 7e 20 d2 9f 27 92 11 8b 80 71 8c 11 c9
0000030 11 1f 5b 2a 26 51 2e 2c ad 10 1e 3a b7 c3 bc aa
0000040 0d b1 f8 01 53 a5 ac 55 d2 e2 6f c1 14 c5 d5 8d
0000050 eb e4 2c f7 dd 03 a4 94 e5 22 8c 58 2d 5c ed c8
0000060 de 63 b1 f5 71 c2 ae 82 ae b3 65 d4 3b e1 6e bd
0000070 00 75 af f6 b0 5a 54 77 36 67 28 df c1 da 6f 5e
0000080 e2 da 30 1a 7c 05 7b 12 bd 47 8b af da f3 b5 f6
0000090 2c 8d c7 51 86 20 66 71 c4 10 7e 98 10 80 68 d8
00000a0 dd 01 fb 76 06 88 ec 20 08 05 6e 89 e9 9f 85 5e
00000b0 a7 2f d9 13 e2 62 83 fa f4 37 c2 76 b3 66 9d db
00000c0 04 b5 c3 7f 92 c8 9d dc bd 70 89 07 48 05 dd 72
00000d0 eb cd e1 2f ea 91 0c c7 ba cd bf 71 04 32 cd a2
00000e0 f4 52 cd b5 fa 25 73 9b 66 62 1b 89 84 23 cc b7
00000f0 b7 7c a7 a7 a1 52 5b 87 26 f3 2c c8 e7
00000fd

できた。あれ、さっきと違う、やっぱりパディングの関係かも。

 

公開鍵で検証(復号)。「-verify」オプションで検証を指示。「-pubin」で公開鍵を使うこと指定

$ openssl rsautl -verify -in Esign.dat -pubin -inkey pub.key
Hello World

正しく復号された!
verify(検証)といいつつ、ここは実際の処理は検証でなく復号なのね(笑)

 

ちなみに秘密鍵でも検証できる。

$ openssl rsautl -verify -in Esign.dat -inkey server.key
Hello World

こんな感じ。秘密鍵に公開鍵が隠れてるからできるのだろう。

 

じゃってことで、上記で-encrypt で暗号化したのを試してみる

$ openssl rsautl -verify -in messageB.dat -pubin -inkey pub.key
RSA operation error
4483001792:error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:crypto/rsa/rsa_pk1.c:67:
4483001792:error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed:crypto/rsa/rsa_ossl.c:588:

できなかったorz

あっ、でも、やっぱりパディングのエラーだね。暗号化と署名でパディングの形式が違うんだ。なんかスッキリ

 

OpenSSLライブラリではどうなってるのか

RSA暗号鍵での暗号化と復号は、 「RSA_public_encrypt()、RSA_private_decrypt()」で処理する。

 int RSA_public_encrypt(int flen, const unsigned char *from,
                        unsigned char *to, RSA *rsa, int padding);

 int RSA_private_decrypt(int flen, const unsigned char *from,
                         unsigned char *to, RSA *rsa, int padding);

関数名が示すように暗号化は公開鍵で、復号は秘密鍵でしかできない。

 

RSA暗号鍵での署名と検証は、 「RSA_sign()、RSA_verify()」で処理する。

 int RSA_sign(int type, const unsigned char *m, unsigned int m_len,
              unsigned char *sigret, unsigned int *siglen, RSA *rsa);

 int RSA_verify(int type, const unsigned char *m, unsigned int m_len,
                unsigned char *sigbuf, unsigned int siglen, RSA *rsa);

リンク先の説明のとおり、RSA_signは秘密鍵、RSA_verifyには公開鍵を渡す。

コマンドライン での実行と違って、検証は検証だ。RSA_verifyに署名と署名の元となったハッシュを渡すと、それが正しいかどうかを検証して結果をint(1なら検証成功)で返す。復号された平文(ハッシュ値)が返ってくるのではないことに注意

HPKIカードで署名を行う場合は、署名はカード内のアプリケーションが行うのでOpenSSLは使用しない。検証はカードから取り出した証明書とOpenSSLのRSA_verifyでおこなう

 

OpenSSLでの暗号化と復号の話は以上

 


歯科電子カルテシステム・カルテメーカー は利用料月額16,500円(税込)
MacとWinの両方で利用可能な電子カルテです。介護保険にも対応してます。

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

 

| | コメント (0)

2021年4月13日 (火)

オンライン資格確認につながらない、安定しない時の対処法

申し訳ありませんm(_ _)m

オンライン資格確認 院内ネットワーク構成例
その1カルテメーカー.番外編

の記事の中の「何故に不安定」の段で、不安定な原因をデフォルトゲートウェイの設定と書きましたが、それは間違いでした。

どうして不安定なのか、原因がやっと判明しましたので、その原因と正しい対処法を改めて記事にしました。
オンライン資格確認等システム接続ガイド(IP-VPN接続方式)1.2版に従って設定を済ませ、nslookup等でIPv6への接続を確認しているにもかかわらず、次のような症状がでる時の参考にしてください。

・オンライン資格確認等システムに時々あるいは常につながらない
・レセコンからの資格確認が度々、失敗する。
・電子証明書ダウンロードサイトにつながらない

 


上記の記事の中では、このような症状がでた場合の対処方として

(デフォルトゲートウェイを無効化するため)コントロールパネル→ネットワークと共有センター→アダプターの設定の変更→ネットワークを選択して右クリック・プロパティを選ぶ→インターネットプロトコルバージョン4(TCP/IPv4)を選択→プロパティを開いて
次のIPアドレスを使うを選択。IPアドレスとサブネットマスクを設定。デフォルトゲートウェイは空欄のまま Photo_20210413183701

という設定を紹介しました。

ところがですね、このようにデフォルトゲートウェイを設定してIPv4からインターネットに接続できるようにしても、通信が安定しちゃうんです。

2

winではIPv6が優先

というのもwindowsの基本設定では、IPv4とIPv6が同時に使える場合(デュアルスタック)、IPv6が優先的に通信先に選ばれるからです。
コマンドプロンプトでnetshを実行すると確認できます。

9

「::/0」がIPv6、「::ffff:0:0/96」がIPv4のことで、IPv6の方が優先順位が高いことがわかります。

自分自身にピンを打ってみるとはっきりわかります。

92

「::1」はIPv6のインターフェースのことですので、IPv6が優先して通信していることがわかります。

というわけで、IPv4のデフォルトゲートウェイを設定しても(しなくても)、常に通信先はIPv6なのです。

では、何故にデフォルトのIPv4の設定では接続が不安定なのでしょうか?

鍵を握るのはDNS

IPv4のデフォルトの設定では

4

のように、IPv4のDNSサーバーとして192.168.1.1が指定されています。これはHGW(ホームゲートウェイ)のアドレスで、実際にはNTTあるいはプロバイダが指定したDNSが指定されています。

一方、IPv6のDNSサーバーはオンライン資格確認が指定した「2404:1a8:f583:d00::53:1」です。

オンライン資格確認では、このIPv6のDNSを使って名前の解決をはかるはずなんですが、このDNSの応答速度が遅くて初回の応答がタイムアウトしてしまう傾向があります。そのためかIPv4のDNSを使った名前の解決が行われているようなのです。

この時、IPv4のDNSにオンライン資格確認システムや連携システムの名前が登録されていなければ、エラーがでて本来のIPv6のDNSで解決されたIPアドレスに接続しにいくはずなのですが、なんとIPv4のDNSにオンライン資格確認システムなどの名前が登録されていて、正常にIPv6のIPアドレスを返してしまうのです。それもIPv6のDNSより早く...そして、悪いことに本来のIPアドレスとは異なるアドレスが返されるのです。

返されたIPアドレスにはサイトが存在しませんorz

当然、接続できない...

解決策

根本的な解決策はオンライン資格確認等システム接続ガイド(IP-VPN接続方式)1.2版の7ページ「2−1ルータ設定(接続先DNS設定)」のようにドメインごとにDNSを選択するように設定することなのですが、NTTのHGWではそのような設定ができません。

代わりにIPv4のDNSを無効化します。DNSを無効化する方法は

コントロールパネル→ネットワークと共有センター→アダプターの設定の変更→ネットワークを選択して右クリック・プロパティを選ぶ→インターネットプロトコルバージョン4(TCP/IPv4)を選択→プロパティを開いて
「次のDNSサーバーのアドレスを使う」を選び、DNSサーバーのアドレス欄は空欄にします。

2_20210413200301

あれっ、最初と同じだ(笑)

というわけで、安定化したのはデフォルトゲートウェイの無効化ではなく、DNSサーバーの無効化が理由でした。まぁ結果オーライということで😃

 

ちなみに、IPアドレスを自動取得にした場合で、「次のDNSサーバーのアドレスを使う」を選びDNSサーバーのアドレス欄は空欄にしても、保存すると「DNSサーバーのアドレスを自動取得する」に戻ってしまいDNSを無効化できません。

15

この場合、「次のDNSサーバーのアドレスを使う」を選びDNSサーバーのアドレス欄に適当な存在しないアドレス(192.168.1.100とか)をいれると実質的に無効化され正常に繋がるようになります。

 

 


 

歯科電子カルテシステム・カルテメーカーは月額16,500円(税込み)
MacとWinの両方で利用可能、介護保険対応にも対応してます。

 

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

 

 

 

 

 

| | コメント (7)

2021年1月13日 (水)

ルーターのお勉強

オンライン資格確認のためのネットワークの構築を解説してきましたが、どうも知識があやふやで本当のところ理解してきれていないって事だけは理解しました。(笑)
ということで、いろいろ実験した結果を備忘録ということで残します。

 

ネットワークを繋ぐ

ネットワークを分割する、別々のネットワークを繋ぐ、この目的でルーターを使うことは前回の記事で解説しました。

オンライン資格確認 院内ネットワーク構成例
その2カルテメーカー.番外編

今回やりたいことは実際に繋いで通信ができるようにすることです。それもおもいっきり単純に2台のコンピュータを接続することが目標です。これすぐにできると思ったら、とんでもない。丸1日かかってしまいました。(^^;

こんな感じに2つのネットワークを繋ぐだけのことだったのですが...

Untitled-17

 

結論から言いますと、とても単純な設定で繋がります。

ルーターの設定

WAN(internet)側(ネットワークB)

設定方法:手動設定
IPアドレス:192.168.20.1
サブネットマスク:255.255.255.0
デフォルトゲートウェイ:空欄

LAN側(ネットワークA)

IPアドレス:192.168.10.1
サブネットマスク:255.255.255.0

ネットワークBのコンピュータ

設定方法:手動設定
IPアドレス:192.168.20.2
サブネットマスク:255.255.255.0
デフォルトゲートウェイ:192.168.20.1

ネットワークAのコンピュータ

設定方法:手動設定
IPアドレス:192.168.10.2
サブネットマスク:255.255.255.0
デフォルトゲートウェイ:192.168.10.1


わかってみれば非常に単純な理屈で動作します。同じサブネット内のコンピュータ(装置)向けのパケットはそのサブネット内に送られるが、それ以外はデフォルトゲートウェイに送られる。デフォルトゲートウェイに送られたパケットは、もう一方のインターフェースから違うネットワークに送られて、そのアドレスの装置に到達するわけです。

なまじブローバンドルーターを使っているので、WANとLANの区別とかあるので、複雑に考えてしまうのですがルーターにとってはどっちも同じ(対等な)インターフェースなので、同じように設定するだけで動作はするんですねぇ

 

繋がらない

でも、これ、実際にやると繋がんないですよ、ping打っても返ってこないし

まずはマニュアルとにらめっこ、いろいろ設定を変えてみてもうまくいかない

WSR-1166DHPL2シリーズ ユーザーマニュアルBUFFALO

ルーターの基本を調べようとしたのですが、CiscoやYAMAHAの本格的なルーターの設定方法がヒットするだけで、アマチュアレベルでブロードバンドルーターを使ったなんちゃってルーティングみたいな記事はなかなかないし

ルーティングテーブルの作り方ネットワークのおべんきょしませんか?

このあたりの記事はそこそこ参考になったけど、まだまだ難しすぎる

デフォルトゲートウェイの限界を乗り越えろ!
ルーティングの基礎「静的ルーティング」を試してみようASCII x TECH

そもそもpingコマンドのオプションの問題かもって思ってこんな記事で確認したり

Macでping送信してネットワークの正常性を確認する方法ハジプロ!

で、コンピュータに静的ルーティングを追加すると上手くいったりしてきて、なんとなく仕組みがわかってきました。静的ルーティングを追加する方法はwinとmacで違いますので、そのあたりも調べました。

mac のコマンドで ルーティングテーブルの追加(add)と削除(del)と確認(show)それマグで! 【route add/delete/print】コマンドでWindowsルーティング設定 〜Default Gateway/Static Route〜SEの道標

Macの場合、これらのコマンドは入力すると管理者のパスワードを要求されるのですが、Winの場合、管理者特権が必要って怒られるので、コマンドプロンプトを実行する時に右クリックで管理者権限で実行します。

【解決】管理者なのに管理者権限が必要?管理者として実行も選べない場合の対処方法Orange Antenna

この静的ルーティングを追加する方法は、結果的には今回は必要なかったのですが、外への出口が複数ある場合(他のサブネットとインターネットとか)はこれを正しく設定する必要があるので勉強になりました。

例えば、192.168.10.xxから192.168.20.xxにパケットを送る場合(192.168.10.1が192.168.20へ繋がるルーターの場合)

sudo route add -net 192.168.20 192.168.10.1

パケットがどのように渡されていったかは、次のコマンドで調べることができます。

traceroute(tracert) ~ネットワークの経路を調査する@IT

この静的ルーティングの設定は、再起動すると消えてしまうのですが、次の記事のようにすると永続的に残るようになります。

Macに永続的なスタティックルートを設定するSaba note

いろいろと試しているとWinからMacへはpingが通るのに、逆はダメという状態。特にエラーはないのに届かない。う〜んと唸ること小一時間やっとわかりました。ファイヤーウォールでした(笑)

Winのファイヤーウォールは基本、他のネットワークからのパケットはデフォルトで弾くようです。穴をあけたりすれば通信できるのでしょうけど、結構面倒なのでとりあえずFWを切れば繋がることを確認してスルーです。

Windows10のping応答の設定(別ネットワークからの応答設定)Windows10サポート Windows10にRDP接続できるクライアントのIP制限素人IT研究所

いろいろやって、静的ルーティングを追加するよりデフォルトゲートウェイを正しく設定するばいいんだという結論に達したのですが、あるMacだけがデフォルトゲートウェイ経由ではどうしても繋がらない。いろいろググると出てきました必要な記事が

ゲートウェイを設定しても外に出られない電脳世界のケーキ屋さん

まさにこの症状。デフォルトゲートウェイ経由で外に繋がらないんですねぇ。無線LANで手動でIPアドレスを設定すると必ずこの状況になります。Macだけの症状です。これ無線LANで繋がったMacを試しに同じアドレスで手動にするとインターネットへの接続もできなくなります。有線LANなら大丈夫なんですけどね。

まぁ1日格闘してしまいましたが、お陰でいろいろ勉強にはなりました。これを元にオンライン資格確認の構成をさらに試してみます。

| | コメント (0)

2020年11月20日 (金)

オンライン資格確認 院内ネットワーク構成例 その2

紙の保険証を廃止するという話、かなり本気な感じですねぇ。現在の法律だと保険者は紙の保険証を発行する義務があります。政府は、この「義務」を撤廃しようというのです。上手いです。消極的な改正ですけど、効果はかなりあるでしょう、保険者はどこも苦しいですから紙での保険証の発行、回収、更新業務が消えて、資格ミスでの一部負担金の回収業務もなくなりますので、一気にマイナンバーに移行する可能性があります。

なんて言ってたら、今度はマインバー対策費の全額補助のニュース。まさに飴と鞭です(笑)でも3/4の助成と全額じゃ、腰の入れ方がかわりますね。医療機関側からも早期の対応が始まりそうです。でもヒトもモノも足りるのかしらん(^^;

閑話休題

さて、前回、iPadもiPhoneにも無駄にIPv6アドレスが振られちゃったとこで終わりになりましたが、今回はこれへの対応で、セキュリティを考慮した構成です。

 

セキュリティを考慮した構成

iPadやiPhoneは個別にIPv6を無効化できません。そのため院内LANのWiFiにつながったiPadやiPhoneのIPv6を無効にするにはネットワーク自体の設定をIPv6を通さないようするしかありません。でも同じネットワーク上のオンライン資格確認はIPv6に対応しないといけません。

こういった時の対策がネットワークの分割です。ネットワークを2つに分けて、一つはIPv6に対応させ、もう一つはIPv6を無効化します。
ネットワークを2つに分けて、そして、この2つのネットワークを接続させるのがルーターです。

Untitled-9

こんな感じにルーターを途中にいれるとネットワークが分割できます。

でも配線で分離しただけでは動作しません。IPアドレスを変更して論理的にも分割する必要があります。
同一のネットワーク(直接通信ができるネットワーク)とは、IPアドレスの上の3つの数字が同じもの同士のネットワークです。3つの数字が違うと物理的にケーブルで繋いでいても違うネットワークとなり通信できなくなります。ですので、分離する場合はこの3つの数字を変更します。ただ最初の2つの数字は特殊な番号ですので通常は変更しません。3つ目の数字を変更します。

  192.168.1.2192.168.1.4192.168.1.8 同じネットワーク
  192.168.1.2 と 192.168.10.2192.168.10.3 は違うネットワーク
*4番目の数字は同じネットワーク内では重複してはいけません。違うネットワークなら同じ数字でもいいです。

このIPアドレスの変更はルーターの設定の変更で行います。また、上記のように違うネットワークは直接通信できません。この違うネットワーク同士を繋いで通信を仲介するのもルーターの大事な機能です。

今回はオンライン資格確認端末だけがIPv6の通信をして、それ以外は通信しないようにするので、このようにオンライン資格確認端末とそれ以外の機器の間にルーターをいれてネットワークを分けます。

Untitled-8

 

実際の接続状態を図示した方がわかりやすいでしょう。

分割前の接続状態
Untitled-10

このようにHGW(ホームゲートウェイ)のLAN端子に全ての端末がつながってます。WiFi接続もLAN側の接続と同じです。

 

ネットワークを分割後
Untitled-11

新しく追加したルーターのWAN側端子とHGWのLAN側端子をケーブルで接続します。HGWに接続していた資格確認端末以外のPCやiPadは新しく追加したルーターのLAN側端子か、このルーターのWiFiにつなぎ直します。

 

ルーター(WSR-1166)の設定

ルーターの設定画面をブラウザで開いて設定します。今回は実際にテストに使用してるBUFFALOWSR1166DHPL2の設定画面で解説していきます。

まずはLAN側のIPアドレスの設定です。
LAN→LAN で LAN側IPアドレス を 192.168.20.1 にサブネットマスクは 255.255.255.0 です。
3番目の20の数字は他の数字でもかまいません。4番目は必ず 1 です。
DHCPサーバー機能は 使用する をチェック
割り当てIPアドレス はLAN側IPアドレスの次の番号 192.168.20.2 から64台にします。

20201119-151234

設定ボタンを押すとルーターが再起動します。設定画面のアドレスが192.168.20.1に変更になりますので、改めてそのアドレスで設定画面を開き直します。

このルーターのLAN側の接続した機器にはDHCPサーバーを有効にしているので、192.168.20.2から順番に新しいIPv4アドレスが自動的に振られていきます。

 

次はWAN側のIPアドレスの設定です。


ここから2021.1.21加筆

Internet→Internet で IPアドレス取得方法 を DHCPサーバーからIPアドレスを自動取得 にします。

拡張設定 の デフォルトゲートウェイ、DNSサーバーアドレスは空欄のままです。

20210121-162554

設定ボタンを押して設定を反映させます。

ここまで2021.1.21加筆


ここから2021.1.21訂正

なんらかの理由でこのルーターのIPを固定したい場合は、次のように手動でIPアドレスを設定します。

Internet→Internet で IPアドレス取得方法 を 手動設定 にします。
IPアドレスは 192.168.1.99 にサブネットマスクは 255.255.255.0 です。
3つ目までの数値はHGWのLAN側のIPアドレスと一致させます。4つ目はHGWに接続した機器のIPアドレスと被らない数値にします。

この設定で、192.168.1.xx と 192.168.20.xx が通信できるようになります。

さらに、このルーターに接続した機器(192.168.20.xx)がインターネットに繋がるように
拡張設定 の デフォルトゲートウェイを HGWにします。HGWのアドレス 192.168.1.1 を設定します。
DNSサーバーアドレスは、プライマリデフォルトゲートウェイと同じアドレスを設定します。
これで、192.168.1.xx、192.168.20.xx ではないIPアドレス、すなわちインターネットへの通信はHGWを経由してインターネットへつながります。
設定ボタンを押して設定を反映させます。

20210121-162501

ここまで2021.1.21訂正


 

いよいよ本題 IPv6を阻止する

長々とネットワークの分離方法を解説してきましたが、本題はIPv6の無効化です。といってもここまでくればとっても簡単。次のように設定します。

Internet→IPv6 で IPv6接続方法 を IPv6を使用しない にします。
設定ボタンを押して反映します。

20201119-151306

これだけでOK、しばらく待つか、接続した機器を再起動等をするとIPv6のアドレスが消えます。

 

さらにセキュリティを強化する

実はこのルーターを使ってネットワークを資格確認端末と分離する方法は、厚労省のマニュアルに指定されて方法です。マニュアルには説明のところに

レセプトコンピュータ等から資格確認端末への通信を許可し、資格確認端末からレセプトコンピュータ等への通信を拒否するためのステートフルインスペクション機能の有効化をする。

と記載されていて、分離するだけでなく資格確認端末からレセプトコンピュータへの通信を拒否するように設定せよとの指示があります。

コンピュータの通信はお互いに情報を送り合うので双方向なのですが、どちらが通信を始めるかが重要になります。一般的な利用者であれば、自分のところ、すなわちLAN側から通信をはじめて、WAN(インターネット)側のコンピュータ(サーバー)が返信するという形になります。
逆にWAN(インターネット)側のコンピュータが通信をはじめて、LAN側のコンピュータが返信するという場合はほとんどなく、あるとすると悪意のある攻撃といえます。

Untitled-12

資格確認端末からレセプトコンピュータ等への通信を拒否することで、外部に常時接続する資格確認端末経由で外部からの攻撃、あるいは資格確認端末が乗っ取られて院内の電子カルテシステムを攻撃する事から守ることができるのです。

そのために推奨している方法が

ステートフルインスペクション機能  別名 ステートフル・パケット・インスペクション機能(SPI)です。

SPIはパケット(通信)の動作を監視して、LAN側から発信したパケットとそのパケットに対する応答のパケットだけを通過させるように通信を制御します。これによりWAN側からの通信を遮断するように動作します。

仕組みと目的は全然違うのですが、同じような結果をもたらす

IPマスカレード(動的IPマスカレード、アドレス変換、NAT、NAPT)

というのがあります。この機能はLAN側の複数のアドレスを変換して、WAN側の1つのアドレスに代表させてしまうもので、通常はWAN側のグローバルアドレスとLAN側のローカルアドレスを相互に変換するのに使います。今回の場合は、どっちもLANですが、仕組みは同じで、192.168.20.xxの複数の機器は、資格確認側からみると、全部が192.168.1.99の単一のコンピュータからの通信に見えます。それでも192.168.20.xxの中の個々の機器を区別できるようになっているのはポート変換というのを使って巧妙に通信を振り分ける仕組みが働いているからです。

この見た目は192.168.1.99のコンピュータに見えるのに、中身は違うというところから、この機能は仮面舞踏会(マスカレード)と呼ばれるようになりました。この変換は通常はLAN側から通信を始めないと正しく変換されません。(外からでも有効な静的IPマスカレードというのもあるのですが、それは使いません。)このため、目的は違うのですが、結果として外からの通信を遮断する機能として働きます。

Untitled-16

ということで、これを早速、設定しましょう。
ところが今回使ってるWSR-1166にはSPIの設定項目がありません。カタログ等にはSPI機能付きとあるのですが設定がないのです。そこでメーカーに確認したところ アドレス変換を有効にするとそれに連動してSPIが有効になる との回答を得ました。では改めて設定していきましょう。

Internet→アドレス変換 で アドレス変換を使用する にチェックをいれて、 設定ボタンで設定します。

20201119-151253

この設定が有効になると、資格確認端末から他のコンピュータは見えなくなりファイル共有をすることができなくなります。逆に資格確認端末以外のコンピュータからは資格確認端末が見えて資格確認端末の中の共有フォルダをマウントしてファイルの読み書きが可能です。実際にSPIが動作しているのかどうかは確認できないものの通信の方向を限定することができていますので、良しとしましょう。

 

以上で必要な対処は済んでいるのですが念のためファイアウォールの設定も確認しておきましょう。

セキュリティー→ファイアウォール で 図のようにIPv6関係は全てチェックして拒否するようにします。

20201119-151358

 

以上でネットワークの構築はひとまず完了です。なお資格確認端末、HGWの設定は前回の「オンライン資格確認 院内ネットワーク構成例 その1」と同じですので、そちらをお読みください。

 

 


歯科電子カルテシステム・カルテメーカーは月額15,000円
MacとWinの両方で利用可能、介護保険対応にも対応してます。

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

| | コメント (7)

2020年11月16日 (月)

オンライン資格確認 院内ネットワーク構成例 その1

来年3月からはじまるオンライン資格確認、保険証全面廃止なんていう物騒なニュースも飛び交っていますが、とりあえず便利になるのは確かです。現時点では一般には詳細は開示されていないようですが、開発ベンダー向けには来年への対応に向けて着々と準備が進んでいます。

このようなサービス、今時ならアプリをダウンロードしてアカウント作って、即稼働って感じになるのでしょうけど、マイナンバーカードを使う、最高レベルの個人情報を取り扱う、既存の医療システムとの連携するといういろんな意味で結構ハードルが高い対応を迫られているので、簡単に導入ってわけにはいきません。

それに加えてサービスがIPv6ベースであること、これが意外に手強いです。IPv4で十分なので、なんとなく避けていたPv6、必要に迫られて調べるとIPv4とはまったく、それこそ天地が逆に世界で、驚きに世界でした。今、関係ないと思ってる人も知っておかないといけないことがあります。そういったことも追々解説していきます。

 

今回は院内ネットワークの構成例です。

ベンダー向けのマニュアル等でも概念的な記載しかないし具体的な設定方法はないので実際にいろいろ試してみました。テストした私の環境は以下のとおりです。

回線
NTT東日本フレッツ光ネクスト・ファミリータイプ 光電話有り
HGW(ホームゲートウェイ)
RT-400(ブロードバンドルーター)
資格確認端末
i7 16GB win10 Home
連携電子カルテ
カルテメーカー

 

とりあえず通信できるようにした構成

セキュリティもなんにも考えないで、とりあえず資格確認サーバーと通信ができて資格確認アプリケーションが動作することを確認するために、既存の院内LANの空いてるPCにインストールした状態です。

Untitled-4

院内LANの各PCからは、IPv4でHGWを経由してインターネットに接続してます。資格確認端末も同様です。

カルテメーカー(電子カルテ)と資格確認端末はファイル共有で通信用のフォルダを共有してます。院内LANは従来通りのIPv4ベースのネットワークです。ファイル共有自体はMacとWinが混在した環境ですので、SMBプロトコルのファイル共有ですね。カルテメーカーと資格確認端末はこの共有フォルダにファイルを書き込むことで通信します。通常はカルテメーカー側から要求(コマンド)ファイルを書き込み、それを端末側が見て処理をして、結果ファイルが出力されます。共有フォルダは資格確認端末側にありますので、常に、カルテメーカーから資格確認端末の共有フォルダを見にいきます。逆に資格確認端末からカルテメーカー側のフォルダにはアクセスしません。(ここ重要)

資格確認端末とサービスを提供する資格確認システムのサーバーとは、IPv6のIPoEで接続します。

IPv6ね、ふ〜んIPv4の上位互換みたいなもんだよね。簡単簡単

IPv6舐めてました。m(_ _)m

ぜんぜ〜ん、もう、全く、完全に別物です。

IPv4ではISP(インターネットプロバイダ)まではPPPoEという仮想の専用線で1対1で接続してます。途中にあるNTTの回線とかは意識する必要はありません。オンライン請求でも同じで、基金や国保まではPPPoEで接続されていますので、途中の経路を気にしないでつながっています。

でもIPv6はそうではありません。IPv6で繋がってる先は広大なコンピュータネットワークです。NTT東(西)が運営するNGNという日本の半分を覆う巨大なネットワークに直接つながり院内LANはシームレスにそのネットワークの一部になります。繋がる先も実は単一のサーバーではなく資格確認ネットワークというネットワークにつながります。IPv6では院内LANの個々の端末のPCにもグローバルなIPアドレスが振られて、原則的にはこの広大なネットワークに参加している全ての端末(PCでも、プリンタでも、ネットワークカメラでも、エアコンでも、冷蔵庫でも)に(から)アクセス可能になります。さらに、このNGNから繋がったインターネットも同じ扱いになりますので、全世界の端末と自由に通信できるのです。

すばらしい!!

でも、セキュリティとかプライバシーとか、ガバガバだよねw

IPv4では、グローバルIPはHGWにしか割り振らず、HGWの内側はローカルのIPですので、直接繋ぐってことが原理的にできませんでした。逆に、外からの侵入はそれなりに難しくとりあえず何もしなくても比較的安全です。

ところがIPv6では上記のように原則開放されていますので、安全を確保するには対策が必要です。その対策はHGWがまず担います。HGWにはIPv6FW(ファイアーウォール)とIPv6パケットフィルター機能がありますので、これで対策します。

ところがところが、このNTTのHGW、初期設定だとちょっと不味い状態になってます。IPv6で通信するために加入する「v6オプション」に加入した場合、外からの侵入が可能な状態になってます。この件はまた改めて記事にしますが、とりあえずは次のように操作して穴を埋めておきましょう。

HGWの管理画面に入り→詳細設定→IPv6パケットフィルタ設定(IPoE)→IPv6セキュリティのレベルを「高度」に変更→設定→保存

次に本命の資格確認端末の設定ですが、セットアップマニュアルによると大きく分けて「ルーターがある」場合と「ルーターがない」場合とにわかれています。

HGWってルーターだから「ルーターがある」場合だよね?

ブッブー!

NTTが設置したHGWは「IPv6パススルー」モードで動作してるので、ルーターとしては動作してないんです。なので、ここは「ルーターがない」場合にしたがって設定します。

これがわからなくてねぇ、マニュアルにでてくるRAだとかDHCP-DPだとかIPv6の用語が分からなくて苦労しました。専門書を久しぶりに買って勉強しちゃいました。いい機会でしたけど、IPv4だと、HGWがルーターで、DHCPサーバーで、DNSの設定もここで、FWも、GWも、セキュリティもほぼ全部HGWだけど、IPv6ではそうではないんですよねぇ。IPv6だとHGWはそもそもルーターじゃないけど、FW機能があったり、でもGWじゃないし。実際、未だによくわかってません。

で、資格確認端末の設定ですが、これ自体はとっても簡単です。ここがIPv6の良い点で特別なソフトや装置を使わなくてもネットに参加できてしまいます。詳細はマニュアルに任せますが、大まかな手順としては。

コントロールパネル→ネットワークと共有センター→アダプターの設定の変更→ネットワークを選択して右クリック・プロパティを選ぶ→インターネットプロトコルバージョン6(TCP/IPv6)をチェック→プロパティを開いて

  • IPv6アドレスを自動的に取得するをチェック
  • 次のDNSサーバーのアドレスを使うをチェック、アドレスに指定されたオンライン資格確認ネットワーク用のDNSアドレスを設定

IPv6の回線への設定はこれだけです。あとは証明書のインストール、関連ソフトのインストール、Edgeのインストールと設定、プラグインの導入などをマニュアルにしたがって行います。

資格確認端末には要求ファイルを書き込むフォルダ(reqという名前にしました。名前はなんでもいいです。)と結果ファイルが書き込まれるフォルダ(res)を作り、その2つを共有フォルダとして公開します。カルテメーカーのサーバーで、この2つのフォルダをマウントして読み書きできるようにします。これらの設定はIPv4ベースで行います。

これで無事に動き出すはず。確かに動作は確認できました。でも、なんだかとても不安定。オンライン資格確認のネットワークに繋がったり切れたり安定しません。

何故に不安定?

数日悩んで閃きました!デフォルトゲートウェイだ!!

デフォルトゲートウェイとは、インターネットやオンライン資格確認とかの外への通信をするための玄関みたいなものです。外への通信経路は今設定したIPv6のはずです。IPv6のデフォルトゲートウェイは自動的に設定されています。

と同時にIPv4はファイル共有のため院内LANの通信経路と利用していますが、こちらもインターネットに接続しているので、IPv4用のデフォルトゲートウェイが自動的に設定されています。

そうです、この資格確認端末には外への玄関が2つ同時に存在していて、優先順位が同じなので、資格確認のアプリケーションはその時々に応じてランダムに通信経路を選択していたのです。たまたまIPv6側が選ばれれば正常に動作し、IPv4が繋がると送信先がなくてエラーになるというわけです。

というわけで、IPv4のデフォルトゲートウェイを無効化します。ただIPv4アドレスの取得を自動にしたままデフォルトゲートウェイを無効化できないので、手動設定にして無効化します。

コントロールパネル→ネットワークと共有センター→アダプターの設定の変更→ネットワークを選択して右クリック・プロパティを選ぶ→インターネットプロトコルバージョン4(TCP/IPv4)を選択→プロパティを開いて

次のIPアドレスを使うを選択。IPアドレスとサブネットマスクを設定。デフォルトゲートウェイは空欄のまま

これで安定して通信できるようになりました。

げっ、他のPCにもIPv6のアドレスが割り振られてる!

安定して気持ちよく接続試験をしていて、ふと気になって関係ないPCのIPアドレスを確認してみると、IPv6アドレスが振られてる!!!

考えてみたら当たり前ですよねぇ。IPv6が有効なら、自動的に割り振られるのがIPv6です。IPv4もそうですけど、でもIPv4と違ってIPv6はグローバルアドレス。使ってないのに割り振られるのはなんとも気持ち悪い、HGWで阻止しているとはいえ必要ないなら振ってほしくはない。というわけで次のように設定して無効化します。

PC:
コントロールパネル→ネットワークと共有センター→アダプターの設定の変更→ネットワークを選択して右クリック・プロパティを選ぶ→インターネットプロトコルバージョン6(TCP/IPv6)のチェックを外す。

Mac:
システム環境設定→ネットワーク→ネットワークを選択して詳細...→TCP/IPのタブを選択→IPv6の設定を「リンクローカルのみ」にする。

これでPCもMacも安全。と思ってiPadとiPhoneをみると...こっちにもorz

続く...

 

 


 

歯科電子カルテシステム・カルテメーカーは月額15,000円
MacとWinの両方で利用可能、介護保険対応にも対応してます。

 

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

 

 

 

 

 

| | コメント (2)

2009年10月28日 (水)

ニコ生

Photo
ニコ生。

昨日、nasaのアレスロケットの打ち上げで初めてニコ生をみました。

そして、今日は「富士山見に行こう!の巻」というニコ生を流しています。

なんか、面白い。
基本は実況なんだけど、視聴者が書き込むコメントと放送主がリアルタイムで会話するというのが、新しい。

富士山見に行こうは、車載カメラで富士山へのドライブを実況しているだけなのですが、視聴者はなんと1500人。

コメントは「棒読みちゃん」というソフトで女性の声で読み上げていくので、本当に会話しているようでこれがなんとも、面白い。うp主の声の上手さもあるんだろうけど、飽きないです。

こういった楽しみってこれからいろいろ発明されるんでしょうね。


| | コメント (0) | トラックバック (0)

2009年9月 2日 (水)

憧れのHP41C

Hp41c
 あの憧れのHP41Cをついに、つ・い・に・入手しました。嬉しい〜〜。
 ASCIIの表紙で見て、デパートの陳列棚にうやうやしくディスプレイされている姿に見とれていたのが、ちょうど30年前。月日の経つのは早いです。

 HP41Cといっても、ご存知の方は少ないでしょうね。これはヒューレットパッカードが79年頃に販売を始めたプログラム関数電卓です。

 シンプルでスタイリッシュなデザイン、HPならではピラミッド型キー、4つの拡張スロットを備え、プリンタ、メモリ、カセットテープ、磁気カード、バーコードリーダーなど様々な周辺機器が用意されていました。でもとてもとても高価な電卓でした。

 当時私は高校生で、まだマイコンは買えず、このようなプログラム電卓で遊んでいました。愛機はカシオfx502pやシャープの電卓です。当時でも国産のは低価格、高機能、コンパクトで本当のところ、このHP41シリーズより総合的な性能は間違い無く国産の方が優れていました。その上値段はHP41cの1/5くらいですから。

 でも、それだからこそ、HP41cは憧れの対象でした。アメ車への憧れに近いものがあります。

 本国アメリカでも、今もってこのHP41cの人気は高く、様々なユーザーグループが活動しており、今でも新しいプログラムが発表されたりしています。オークションや中古での売買もまだあるのですが、なかなか手頃な価格で完動品というものは少ない状態です。

 日本でもヤクオフで時折出品されるのですが、すぐに価格が高騰してしまい手に入れることはできませんでした。でも、昨日たまたまチェックしたら、出ていたんですね。

 いやー、嬉しかったです。本体以外にもマニュアルや当時の箱までついていて状態も非常に良くて、買ってよかったとしみじみ思いました。


| | コメント (6) | トラックバック (0)

2009年7月 3日 (金)

4ビットマイコン

20090703005401
大人の科学マガジンの4ビットマイコンを買ってしまいました。
GMC-4、なかなか良いネーミングです。当時のにおいが匂ってきます。

手に取って動かしてみると30年以上前の記憶が一気によみがえってきます。

オペランド、オペコード、ニーモニック、アキュムレータ、アセンブラ、
相対アドレッシング、プログラムカウンタ。。。

いつからか使わなくなったターム達。

さて、このマイコンのスペックですが、

命令長はもちろん4bit(ニブル)、1〜3ニブルの可変長命令です。命令数は32
ニーモニックはあまり好みじゃないですね。
やっぱザイログ系の感じにしてほしかったです。LD A,(Y)って感じかな。

メインメモリは48バイト!!
96ニブルですね。
内上位16ニブルはデータ領域となっており、この部分はYレジスタによる間接アドレッシングでアクセスします。
ということで実際にプログラムに使えるのは80ニブル(ステップ)ということですね。

す、少ない。。。

でも、4ビットじゃしょうがないですね。プログラムカウンタは7ビットだし。レジスタもメインメモリ上にあるという仕様ですし、ホント、ミニマムなマイコンです。

入力は16進キーボード
出力は1桁の16進LED、7bit分の2進表示LED(主にプログラムカウンタ表示)、圧電スピーカー
それ以外の外部入出力はありませんが、改造例ではLEDのドライバから出力をとって同じく大人の科学のおまけのアナログシンセサイザーのコントロールをしていました。

うーん、かつてのマイコン少年の心をわしづかみです。(^^;

| | コメント (3) | トラックバック (0)

より以前の記事一覧