ドメイン名とDNS
ドメイン名とDNS
インターネットでの通信では、IPプロトコルでコンピュータを指定するが、IPアドレスは無機質で覚えるのが大変であり、コンピュータに名前をつけて利用する。この際に、コンピュータの所属などが分かるようにしたものをドメイン名と呼ぶ。
例えば、電子情報工学科のドメイン名 www.ei.fukui-nct.ac.jp は、ピリオド部分で区切られ、以下のような意味を持つ。
- .jp – 国ドメイン(.uk イギリス,.ch 中国,アメリカは無し)
- .ac – 種別ドメイン(.co.jp,.com:会社,.ne.jp,net:ネットワーク系)
- fukui-nct – 組織ドメイン
- .ei. – サブドメイン(組織内が細分化されている場合)
- www. – ホスト名※
このような省略されていない、対象となるコンピュータを指定するためのドメイン名は、FQDN(Fully Qualified Domain Name)と呼ばれる。FQDNでの名前を ホスト名※ と呼ぶことも多い。
ただしアメリカでは、国ドメインを一般的に使わない※。また最近では、世界的な企業では国ドメインが意味をなさないので、アメリカ以外でも .com や .net といった、汎用トップレベルドメイン(gTLD)が使われる。様々なサービスを展開している企業では、組織種別が意味をなさないため、toyota.jp といった種別ドメインがない.jpドメイン名も増えてきた。高専機構のドメイン名 kosen-ac.jp も、”kosen-ac” が高専機構の組織ドメイン名なので注意。”-ac”は種別ドメインではない。
以下に、主要な組織ドメイン・国ドメインをあげる。
|
※はgTLD |
DNSのしくみ
DNSは、Domain Name Service であり、コンピュータ名(ドメイン名)から、IPアドレスを調べるサービスで、ポート番号53,UDPを使っている。
インターネットに接続する際には、最も身近なDNS※の情報が与えられ、ユーザがコンピュータ名を問い合わせると、身近なDNSがコンピュータのIPアドレスを返してくれる。この際に、検索結果はキャッシュとして一定期間保存される。身近なDNSがそのコンピュータ名を知らない場合は、上位のDNSに問い合わせを行い、DNSルートサーバもコンピュータ名をキャッシュしていない場合は、管理元の組織のDNSに問い合わせが行われる。このようにすることで特定のDNSサーバに問い合わせが集中しないようになっている(負荷分散)。 DNSサーバの情報は DHCP サーバからIPアドレスなどと一緒に取得することができる。
以前の説明で DHCP(IPアドレス,サブネットマスク,ゲートウェイなどのネットワーク設定のサービス)を紹介しているが、IPアドレス以外にも、DHCPはそのネットワークで使える最寄りの DNS サーバの情報を得ることができる。

DNSと正引きと逆引き
DNSの使い方としては、一般的な使い方は、ドメイン名からIPアドレスを調べる正引きが多い。ブラウザは http://www.fukui-nct.ac.jp/ というURLが与えられたら、DNSに www.fukui-nct.ac.jp を問い合わせ、104.215.53.205 の結果が得られることで、http://104.215.53.205/ のコンピュータに接続を試みる。
これとは逆に、サーバ側では接続してきた相手のコンピュータが信頼できる相手か調べたい時がある。この時には IPアドレスからドメイン名を調べる逆引きを行う。これにより、IP アドレスをきちんと管理している組織であれば、ドメイン名が分かるのでどの組織から接続されているのか確認ができる。
DNSの情報を調べるためのコマンドは、nslookup を用いる。
DNSと様々な情報
DNS では、様々な情報が取得できる。IPアドレス以外にも、メールを送ってもらうサーバのIPアドレス(MXレコード)なども取得できる。
((( 正引きの例 ))) $ nslookup www.google.com Server: 172.31.208.1 Address: 172.31.208.1#53 Non-authoritative answer: Name: www.google.com Address: 142.250.206.228 # 調べる度に異なる値が返ってくるかも Name: www.google.com Address: 2404:6800:400a:804::2004 ((( 逆引きの例 ))) $ nslookup 142.250.206.228 228.206.250.142.in-addr.arpa name = kix06s10-in-f4.1e100.net. # 正引きと逆引きが一致していない例 Authoritative answers can be found from: ((( MX レコードを調べる例 ))) $ nslookup -query=MX fukui-nct.ac.jp # MXレコード = そのドメイン宛のメールはどのコンピュータに送ればいい? Non-authoritative answer: fukui-nct.ac.jp mail exchanger = 10 fukuinct-ac-jp01c.mail.protection.outlook.com. ((( AAAA レコードを調べる例 ))) $ nslookup -query=AAAA www.google.com # AAAAレコード = IPv6アドレスを指定した正引き Non-authoritative answer: Name: www.google.com Address: 2404:6800:400a:813::2004 ((( 正引きと逆引きの異なる例 ))) $ nslookup tsaitoh.net Name: tsaitoh.net Address: 64.33.3.150 $ nslookup 64.33.3.150 150.3.33.64.in-addr.arpa name = ttn64-33-3-150.ttn.ne.jp.
DNSとセキュリティ
DNSは、コンピュータ名とIPアドレスを対応付けるものであり、これには正引き(コンピュータ名からIPアドレスを求める)と、逆引き(IPアドレスからコンピュータ名を求める)がある。セキュリティ対策が厳しい場所では、
- 正引きを使うことで、特定の組織のドメイン名を持つコンピュータからのアクセスを許可/禁止する。(例:国ドメイン.xxからは接続拒否)
- 正引きで、コンピュータ名が登録されている所からのみ許可する。(例:組織ドメイン.fukui-nct.ac.jpからは接続許可)
- IPアドレスから逆引きして求めたコンピュータ名をさらに正引きして同じIPアドレスが求まるかを確認
といった対策を行う。
- DNSのドメイン名は、当初は最初に申請した人に割り当てられる。このため、nintendo.com といったドメイン名を、関係ない人が取得するといったトラブルがあった。(サイバースクワッティング)
- DNSを用いたクラッキングでは、ウィルスに感染させたパソコンに偽物のIPアドレスを教えることで、偽装した別コンピュータに誘導し個人情報を盗む手口がある。(DNSポイズニング/スプーフィング)
- 他にもウィルスに感染させた大量のパソコンから、同時にルートサーバに大量のDNSの問合せを送ることで、処理能力を低下させると、インターネット全体でDNS参照ができなくなる攻撃もある。(DNSルートサーバへの分散DoSアタック)
- DNSは、他のコンピュータに接続するための重要な情報だが、独裁国家などでは国にとって不都合な情報が得られるドメイン名のIPアドレスを改ざんしアクセスできないようにすることもある。このため、Google 社では 覚えやすい 8.8.8.8 という IPアドレスの DNS サーバを提供している。この 8.8.8.8 は、DNS の返答速度も速いことから、ブラウザの表示速度を高速化するために自分のPCに設定する人も多い。
- 暗号化されていない通信は、同一ネットワーク上の機器がパケット解析ソフトなどを実行すると、相手がどういうDNS参照をしているか見られてしまう。この対策として最近は DNS over HTTPS という方式も出てきている。
ドメイン名と罠
- “jcb.co” というドメイン名のリンク。クレジットカードのJCB?
“.co” はコロンビア、どうみても怪しい。(ウィルス対策ソフトが怪しいサイトとしてブロック) - 昔話 www.docomo.ne.jp にアクセスするつもりが www.docomo.co.jp とタイプミス。
アダルトサイトにつながった… - goog1e.com(lと1の違い)、аррӏе.com (ӏはキリル文字) – ホモグラフ攻撃
- メールアドレス …@gmai.com にメールを送ったら個人情報漏洩 – ドッペルゲンガードメイン
データべースの設計と正規形
テスト問題の返却および解答の説明を行い、その後、データベースの設計において、重要な正規形についての説明の導入。
正規形
データベースにおいて、様々な不整合を防ぐために正しい設計が必要であることを 改めて説明し、それには正規形としての条件を満たしている必要があることを説明する。一般的に不整合が発生しないためには、以下の第1正規形、第2正規形、第3正規形を満たすように表を分ければよい。
第一正規形は、すべての要素が原子値である条件を満たせばいい。 要素の中が複数の項目であったり表形式のデータがあると、 表構造のリレーショナルデータベースにはできない。
- 中央省庁のデータ表記を統一:河野太郎行政・規制改革担当相のTweet
データベースと直接関係しないけど、データは原子値じゃないと困るというお話。 - 雑談 正しいデータとして扱えるドキュメントとは…
キーの説明:超キー(スーパーキー)とは、データベースで1つのデータを 選び出すために必要なデータ項目であり、複数の項目で1データを指定 できる場合もある。
候補キーとは、必要最小限の項目となっているものを指す。 1項目が抜けても選別できなくなるようであれば、候補キーとは言わない。 主キーとは、候補キーのなかで管理の都合上便利なもの。
データ項目の値が決まると、他のデータ項目が自動的に決まるものは、 従属関係があるという。
![]() |
![]() |
第1正規化 | 第2正規化 |
第二正規形は、部分従属がなく、すべての非キーデータ項目が、候補キーに 完全従属する場合をいう。
- 完全従属とは、候補キーを構成する全てのデータ項目に、非キーデータ項目が従属していること。
- 部分従属とは、候補キーを構成するデータ項目の一部のデータ項目に、非キー項目が従属していること。
この例において、単価は商品が決まれば自動的に求まる情報。 (単価が日々変化することはないという条件で…) これは、部分従属となる。他に部分従属となっている属性は何か?
- 推移従属性とは、データ項目でA→B→Cと、次々と値が求められる関係を指す。
第三正規形とは、 候補キー以外の非キーデータ項目は、候補キーに完全従属し、 かつどの候補キーにも推移従属しない関係をいう。
![]() |
第3正規化 |
上記の例では、単価と個数が決まれば、金額が求まる推移従属の関係が含まれている。
おまけ:BC正規形,第4,5正規形
この他にも、 さらに「非キーからキーに関数従属性がある場合にそれを取り除く」、 ボイスコッド正規形(BC正規化)。 「対称性のある多値従属性(キーを決めると複数データが該当)を分解」して得られる第4正規形や、 「元になるテーブルの結合従属性を維持して分解」することにより得られる第5正規形などがある。
トップダウン設計・ボトムアップ設計
データベースの設計にあたって、実際の設計手順の説明を行う。
トップダウン設計では、対象業務を記述し、その中から名詞となっている実体を抽出する。 さらに動詞や形容詞のように記載されている関連を抽出する。 抽出した実体・関連では、あいまいであったり冗長であったりするので、整理したうえで、 その実体・関連をER図に表す。
ボトムアップ設計では、対象業務で実際に使われている入力帳票や結果の出力などを 見ながら、第1正規形を満たすように表を作っていく作業からおこなう。
トップダウン設計やボトムアップ設計で、 ER図や第一正規形を満たすような表が出来上がったら、 その属性の中で従属性を確認しながら、第2正規形・第3正規形へと整理していく。
データベース後半課題
データベース後半の課題は「卒業研究の対象をデータベースとして設計」とする。
情報系の卒研テーマであれば、処理対象のデータの中にはデータベースで管理するのがふさわしい対象について設計せよ。実験系の卒研テーマであれば、実験結果の表をデータベースで管理するとした場合の設計を行うこと。どちらでもない卒研で、卒研のテーマの中にデータベース化すべき対象が無い場合は、身の回りの帳票(例えばコンビニのレシートなど)をデータベース化することを検討すること。
レポートで記載する内容は、以下の通りとする。
- 卒業研究におけるデータベース化する対象の説明
- データベースをトップダウン設計する際の
- 実体と関連を抽出するまでの説明
- 正規化を行う経過の説明
- 上記を踏まえたトップダウン設計でのER図
- データベースをボトムアップ設計する際の
- 対象とする帳票に相当するデータの一例と説明
- レベル分けや正規化を行う経過の説明
- 上記を踏まえたボトムアップ設計でのER図
- 考察
- トップダウン設計とボトムアップ設計に違いがあれば、設計の見直しの過程の説明
- 両設計方法から分かったこと
Node-REDのインストール
卒研学生用に、古いPCに Ubuntu 24 をインストールし、Node-RED 環境を構築
Ubuntu のセットアップ後に以下の作業を行う。
nodejs のインストール
新しい nodejs 22 を入れたいので apt パッケージは使わない。
#--- nodejs 22 install $ sudo apt install curl $ curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - $ sudo apt install -y nodejs
Node-REDのインストール
#--- node-red install $ sudo npm install -g npm@10.9.1 $ sudo npm install -g -unsafe-perm node-red node-red-admin
Node-REDのsystemd登録
OS起動と共に Node-RED を起動したいので、Systemd に登録
Systemd のファイルを作成
#--- node-red systemd setup $ sudo vi /etc/systemd/system/node-red.service [Unit] After=syslog.target network.target Documentation=http://nodered.org/ [Service] Environment="NODE_OPTIONS=--max-old-space-size=128" Environment="NODE_RED_OPTIONS=-v" ExecStart=/usr/bin/node-red $NODE_OPTIONS $NODE_RED_OPTIONS WorkingDirectory=/root/ User=root Group=root Nice=10 SyslogIdentifier=Node-RED StandardOutput=syslog Restart=on-failure KillSignal=SIGINT [Install] WantedBy=multi-user.target
Systemd の有効化と起動と確認
$ sudo systemctl enable node-red $ sudo systemctl start node-red $ sudo systemctl status node-red ● node-red.service Loaded: loaded (/etc/systemd/system/node-red.service; enabled; preset: enabled) Active: active (running) since Wed 2024-12-04 14:25:50 JST; 10min ago Docs: http://nodered.org/ Main PID: 23602 (node-red) Tasks: 11 (limit: 9334) Memory: 58.2M (peak: 68.4M) CPU: 2.243s CGroup: /system.slice/node-red.service └─23602 node-red 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 復元することはできません。その場合、ファイルを削除してクレデンシャルを 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 再入力しなければなりません。 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 設定ファイル内で 'credentialSecret' オプションを使って独自キーを設定 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: します。変更を次にデプロイする際、Node-REDは選択したキーを用いてクレ 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: デンシャルを再暗号化します。 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: --------------------------------------------------------------------- 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 4 Dec 14:25:51 - [warn] 暗号化されたクレデンシャルが存在しません 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 4 Dec 14:25:51 - [info] サーバは http://127.0.0.1:1880/ で実行中です 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 4 Dec 14:25:51 - [info] フローを開始します 12月 04 14:25:51 tsaitoh-lab Node-RED[23602]: 4 Dec 14:25:51 - [info] フローを開始しました
後は、ブラウザを起動して、http://127.0.0.1:1880/ を開くだけ。