インターネットを支えるドメインネームシステム

はじめに

ドメインネームシステム略してDNS。
なんとかシステムが多すぎて、ますます複雑化しているような気がします。

ドメインネームシステムとは

インターネット上のホスト名電子メールのアドレスに使われるドメイン名と、IPアドレスとの対応づけ(正引き逆引き)を管理するために使用されているシステム

ウィキペディアさんから抜粋

理解している人にとっては、わかりやすい説明だと思います。私にはむずかしいです。下記のインターネット通信の前提知識が必要です。

インターネットでWEBページを見る仕組み

インターネット通信は、IPアドレスを使って通信しています。また、インターネットに接続されているコンピュータは、すべて重複しないIPアドレスをもっています。

例、ワレワレとインターネットの世界観の対比

世界やりたいこと(通信内容)必要な情報
ワレワレの世界結婚したので友人に招待状を送りたい
年賀状を親戚に送りたい
住所
インターネットの世界ショッピングページを見たい
メールを送りたい
IPアドレス

ドメインネームシステムがない世界(IPアドレスを伝える)

「このWEBサイト、ちょーおもしろいから見てね。リンク先は、xxx.xxx.xxx.xxx 」

ドメインネームシステムがある世界(ドメインを伝える)

「このWEBサイト、ちょーおもしろいから見てね。リンク先は、google.co.jp 」

IPアドレスは、人間にはわかりにくいんです。

そこで、ある天才たち(ポール・モカペトリスさんとジョン・ポステルさん)がドメインネームシステム(DNS)をつくりました。

DNSは、人間にやさしい

IPアドレスで通信するんだと、変態チックなので、名前をつけてあげて名前からIPアドレスに変換して通信すれば良いと、ある天才たち(ポール・モカペトリスさんとジョン・ポステルさん)がひらめきました。ひらめいたと思います。

例、Google.co.jpにアクセスすると、172.217.161.195 に変換して通信します。

> ping google.co.jp
google.co.jp [172.217.161.195]に ping を送信しています 32 バイトのデータ:
-- 省略 --

ブラウザでURLに、172.217.161.195 を渾身の力で打ち込むと、Google検索がひらきます。

もう少し詳細の動き

ブラウザを使って、yahoo.co.jpを開くと

問い合わせの順番問い合わせ先返答内容
1ルートサーバjpのTLDサーバは、xxxを見てねと返す
2jpのTLDサーバco.jpのDNSサーバは、xxx2を見てねと返す
3co.jpのDNSサーバyahoo.co.jpのDNSサーバは、xxx3を見てねと返す
4yahoo.co.jpのDNSサーバIPアドレスは、xxx.xxx.xxx.xxxと教えてもらう

教えてもらった、xxx.xxx.xxx.xxxに通信する。yahoo.co.jpのページが見れる。

参考URL

https://ja.wikipedia.org/wiki/Domain_Name_System

https://www.nic.ad.jp/ja/newsletter/No22/080.html

レンタルサーバの引っ越し

背景

現在使用しているレンタルサーバが遅い!

現在使用しているレンタルサーバが対応していない機能を使いたい!

などの理由で、レンタルサーバを引っ越しする場合があるかと思います。

環境

ドメインは、取得済みでそのまま使用する。

ホームページ、メールは、新しいレンタルサーバを使用する。

ドメインネームシステムの理解がないと、何をおこなっているかわからないと思います。ドメインネームシステムについてはこちらをクリック

やること

ネームサーバの変更をおこないます。

手順

順番設定内容備考
新しいレンタルサーバで、公開フォルダの設定をおこなうレンタルサーバごとに設定方法が異なるため、各レンタルサーバのヘルプページを確認すればよい
ドメイン管理会社のネームサーバを変更するドメインが浸透するのに2週間ぐらいかかる

CAKEPHP4(ロリポップ)

参考リンク

https://book.cakephp.org/4/ja/installation.html

バージョン確認

$ php -v
PHP 5.5.35 (cli) (built: Jun 7 2017 17:38:06)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.19, Copyright (c) 2002-2015, by ionCube Ltd.
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

PHPは、7.2以上ということなのでダメみたい。。ロリポップは、WEBの管理画面からPHPのバージョン設定はできますが、cliのバージョン変更できません。とりあえず、phpがなにものか調査してみます。

$ which php
/usr/bin/php
$ ls -l /usr/bin/php
lrwxrwxrwx 1 root root 26 2017-08-24 18:01 /usr/bin/php -> /usr/local/php/5.5/bin/php

/usr/local/配下を参照すると、phpのバージョンがいっぱいありました。

やっとcomposerのインストール

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

composerを使ってCAKEPHP4をインストール

$ /usr/local/php7.4/bin/php composer.phar create-project --prefer-dist cakephp/app:4.* 
Creating a "cakephp/app:4.*" project at "./app"
Installing cakephp/app (4.0.4)
Installing cakephp/app (4.0.4): Downloading (100%) 
-- 省略 -- 
-- パーミッションの設定はYでOK -- 
Set Folder Permissions ? (Default to Y) [Y,n]? Y Permissions set on /****/web/work/crawler/app/tmp/cache

※↑プロジェクト名を指定してません。
プロジェクト名を指定する場合

/usr/local/php7.4/bin/php composer.phar create-project –prefer-dist cakephp/app:4.* 【プロジェクト名】になります。

確認

ブラウザから、CAKEPHPのデフォルト画面が見れればOKです。

ワフ(WAF)、ウフ

WAF(ワフ)・・Web Application Firewall

ウフみたいでかわいい。

アプリケーションレベルのFirewallです。悪意のあるユーザが、Webサイトを参照してWebサイト上の脆弱性から守る機能です。

主に

脆弱性概要対策
SQLインジェクションデータベース問い合わせ時に、意図しないSQL文が発行されてしまうこと。データベースを操作するライブラリが提供しているバインド機能を使えばよい。
クロスサイトスクリプティング(XSS)変数、GET、POSTパラメータに攻撃者のスクリプトなどが埋め込まれてしまうこと。HTMLエスケープすればよい。
ディレクトリトラバーサルドットドットスラッシュ攻撃。ファイルリクエスト時に、意図しないファイルパスが埋め込まれてしまうこと。ファイルリクエストさせない。
ファイルリクエストの場合、正規化をおこなう
HTTPヘッダインジェクションHTTPはヘッダとボディを空行で識別している。攻撃者が、なんらかの方法で空行を埋め込み、意図しないボディを生成されてしまうこと。ヘッダを生成する必要がある場合、ライブラリが提供している機能を使用する。直接ヘッダを生成しなければならない場合は、エスケープする。

などから、守ってくれます。

Webサイト上の脆弱性なので、プログラマーがイケてないだけ・・。プログラマーにとっては、ワフはありがたい存在です。

レンタルサーバ比較してみた

世の中には、山ほどのレンタルサーバがあります。はっきり言って、どこを選べばいいか良くわかりません。なので、比較してみました。

選定条件は、値段と速さ(SSD使用しているか)に絞りました。

会社さんプラン値段(月額)SSD有無容量
さくらライト131円×10GB
スタンダード524円×100GB
プレミアム1,571円×200GB
ビジネス2,619円×300GB
ビジネスプロ4,714円×500GB
マネージド13,200円
一部SSD
700GB
ロリポップエコノミー100円×10GB
ライト250円×50GB
スタンダード500円×120GB
ハイスピード1,000円200GB
エンタープライズ2,000円1TB
エックスサーバX10900円200GB
X201,800円300GB
X303,600円400GB
ConoHaベーシック900円250GB
スタンダード1,950円350GB
プレミアム3,900円450GB

1日の転送量が決まっている場合があるので、アクセスが多いサイトは気をつける必要があります。

値段は、契約期間により変わってくるため、だいたいの目安になります。別途、初期費用がかかります。

結論

値段は、相場が決まっているのか同等のプランを見るとだいたい同じでした。何が必要かによって選択すれば良いかなという感じです。例えば、WordPressが必須であれば使用できるサーバを必須条件として選べばよいです。

curl コマンドラインでインターネット

概要

コマンドラインで、URLを使ってファイルを受信または送信することできる。。。難しい。

使用例

実際にやってみると(WindowsのPowerShellの場合)

$ curl www.bit-link.co.jp
StatusCode : 200
StatusDescription : OK
Content :
<!-- 言語設定 --> <html lang="ja"> <head> <title>名古屋のiOSアプリ開発会社 ビットリンク</title> <!-- 説明 --> <meta name="description" content="株式会社ビットリンクは、名古屋でiOSアプリ開発をしている会社で す. 共同開発、自社開発したアプリあります!興味があ...
RawContent : HTTP/1.1 200 OK
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Range,Accept-Encoding
Accept-Ranges: none
Content-Type: text/html; charset=UTF-8
Date: Tue, 05 May 2020 09:49:02 GMT
Serv…
Forms : {}
Headers : {[Transfer-Encoding, chunked], [Connection, keep-alive], [Vary, Range,Accept-Encoding], [Accept-Ran
ges, none]…}
Images : {@{innerHTML=; innerText=; outerHTML=ビットリンクのロゴ; outerText=; tagName=IMG; alt=ビットリンクのロゴ; src=companyHome/images/comm
on/header/companyName.png}, @{innerHTML=; innerText=; outerHTML=ホームへ; outerText=; tagName=IMG; id=idHomeImage;
alt=ホームへ; src=companyHome/images/common/header/homeNavigation.png}, @{innerHTML=; innerText=; o
uterHTML=開発実績へ; outerText=; tagName=IMG; id=idDevelopImage; class=clsHeaderImag
e; alt=開発実績へ; src=companyHome/images/common/header/developmentNavigation.png}, @{innerHTML=; i
nnerText=; outerHTML=問い合わせへ; outerText=; tagName=IMG; id=idContactImage; class=cls
HeaderImage; alt=問い合わせへ; src=companyHome/images/common/header/contactNavigation.png}…}
InputFields : {}
Links : {@{innerHTML=ToyVideoの詳細ページへ ; innerText= ; outerHTML= ; outerText= ; tagName=A; class=clsImageAnchor; href=http
://www.digitalray.co.jp/service/smart/toyvideo/index.html}, @{innerHTML=exhaustSoundCheckerの詳細ページへ ; inner
Text= ; outerHTML= ; outerText= ; tagName=A; class=clsImageAnchor; href=companyHome/iphone/extChecker
/support.html}, @{innerHTML=カーメンテの詳細ページへ ; innerText= ; outerHTML= ; outerText= ; tagName=A; class=clsImageAnchor; href=com
panyHome/iphone/carMainte/support.html}, @{innerHTML=shoeLinkの詳細ページ ; innerText= ; outerHTML= ; outerText= ; tagName=A; class=clsImageAnchor; href=http:/
/shoelink.bit-link.co.jp}…}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 7646
$

HTTPヘッダのみ出力

-Iオプションをつけると、エラーになります。

$ curl -I
Invoke-WebRequest : パラメーター 'InFile' の引数が指定されていません。型 'System.String' のパラメーターを指定し、再試行
してください。
発生場所 行:1 文字:6
curl -I
~~ CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest]、ParameterBindingException
FullyQualifiedErrorId : MissingArgument,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

ヘルプで調べました。

$ curl -?
名前
Invoke-WebRequest
構文
Invoke-WebRequest [-Uri] []
エイリアス
iwr
wget
curl

エイリアスってありますね。curlは、Invoke-WebRequestが本物だということがわかりました。要は、Windowsのcurlは偽物だということがわかりました。だから、本家の-Iオプションもないんですね。

Windowsのcurl(偽物の場合)のヘッダー出力は

$ (curl http://www.bit-link.co.jp).Headers
Key Value
--- -----
Transfer-Encoding chunked
Connection keep-alive
Vary Range,Accept-Encoding
Accept-Ranges none
Content-Type text/html; charset=UTF-8
Date Wed, 06 May 2020 05:07:41 GMT
Server Apache
X-Powered-By PHP/5.6.21

できました。

centOS6の場合

$ curl -I http://bit-link.co.jp
HTTP/1.1 200 OK
Date: Wed, 06 May 2020 05:26:52 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.21
Vary: Range
Accept-Ranges: none
Server: Apache

ホームページをつくりたい

自分だけのホームページをつくりたいと思ったことありませんか。でも、具体的に何をすればよいかわからないことないでしょうか。または、既にホームページもっているんだけど、変更したいことがあるけど、どうすればいいかわからないことないでしょうか。

そこで私なりにまとめてみました。手順に沿っていけば、「あらっ、簡単にできた!」ぐらいになれればいいなと思ってます。

手順

1.ホームページをインターネット上に公開しているか。

既に公開済み 2へ

上記以外   3.1へ

2.現在のホームページに関する問題は?

レンタルサーバの容量が少ない

ホームページの表示が遅い

ホームページのデザインを新しくしたい

などといった場合は、専門の会社に相談するのがよいかと思います。弊社とか(笑)

3.1 レンタルサーバを決める

ホームページを公開するには、インターネットで見ることができるサーバが必要になります。自分でサーバをたててとかもできますが、かなりの知識が必要になるので、普通はレンタルできるサーバ(レンタルサーバ)を借ります。

3.2 ドメイン名の取得する/しない

グーグルのトップページを見ると、google.co.jp となっています。そうです。自分の好きな名前を取得できます。お金を払えば。。。

この名前は、ドメイン名と呼ばれてます。法人の場合は、ドメイン名があったほうが、検索ランクなどにも影響してきますので取得しておいたほうがよいです。

3.3 ホームページを作成する

かっこいいホームページを作る場合は、専門の会社弊社とかに頼むのがよいです。

趣味のページの場合は、自分自身で作成してもよいと思います。

常時SSL化とドメイン正規化

なぜ、常時SSL化とドメイン正規化をおこなうか

Google公式ページから抜粋

サーバーの設定により、www ありと www なし、http と https のような類似バージョンに対して同じコンテンツが配信される場合

https://support.google.com/webmasters/answer/139066?hl=ja

WEB界の帝王 Google 様が、重複ページはダメと言っているためです。

SSL

インターネット上のデータ通信を暗号化する仕組み。

HTTPS

SSLにより暗号化している HTTP通信 のこと。

サイトにログインするために、ユーザ名とパスワードを入力する画面があります。ログインボタンを押すと、入力されたユーザ名とパスワードが、サーバに送信されます。通信が暗号化されていないと、悪意のあるユーザがあなたのユーザ名とパスワードを盗み見ることができます。

ドメイン正規化

www.bit-link.co.jp

bit-link.co.jp

は、別のサイトとして認識されるので、www有または、www無しのどちらかに統一すること。

どんなときも”HTTPS”と”wwwなし”にしたい

Apacheでレンタルサーバ(root権限がない)の場合は、 .htaccess を編集することによりHTTPSに自動で飛ばすことができます。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteEngine On/Off 

URL書き換えエンジンの使用有無

RewriteCond

RewriteRuleを実行するか条件を記述できる。

SSL化していない場合に、RewriteRuleを実行する

RewriteRule

URL書き換えのルールを記述できる。

[R=301,L]

301リダイレクト=一時的ではなく、恒久的に転送する

L=LASTのL 条件に一致したらここで終わり。

ホームページにつきまとうドメイン名

ドメイン名

ブラウザを立ち上げると、Googleの検索ページが一番最初に開くかもしれません。URLを見ると、”https://www.google.co.jp/”となっていました。不思議だと思いますよね。パソコンは、文字という概念がないので、google.co.jpと言われてもわかりません。

Windowsであれば、コマンドプロンプトから

$ ping www.google.co.jp
www.google.co.jp [172.217.26.99]に ping を送信しています 32 バイトのデータ:
-- 省略 --

www.google.co.jp[172.217.26.99]ってなってますよね?ブラウザのURLに、「172.217.26.99」と打ち込むと、googleの検索ページが開くと思います。

インターネットは、IPアドレスや、ドメイン名(例、www.google.co.jp)を使ってWEBサイトを特定しています。

IPアドレスを使ってネットサーフィンするには、一部の変態な人しか使いこなせないため、名前を付けてわかりやすいようにした。この名前をドメイン名とよぶ。

IPアドレスとドメインを紐づけさせるシステムをDNS(DomainNameSystem)と呼ぶ。

例、bit-link.co.jp(157.7.107.70)

ネームサーバ

ネームサーバは、DNSサーバと呼ばれることもある。ネームサーバは、ipアドレスとドメインを紐づけさせる処理をおこなっている。

DNSは、ツリー構造となっている。ネームサーバは、上位と下位のネームサーバしかわからない。

ネームサーバは通常バックアップ用に2台用意している

ドメイン移管(ドメイン管理会社を変える)

ドメインに紐づけしたネームサーバ(IPアドレス)を切り替える

ドメインを管理している会社を変更することを指す。

ドメイン移管にかかる期間

数日~数週間

ドメインの確認

ドメインの種類により流れが異なる

gTLDドメインの場合

取得してから60日以上経過しているか確認する

契約者のドメイン登録情報を確認する

現在の管理会社に移管が可能な状態にしてもらう

ドメインロックの解除

whoisプロテクトの解除

AuthCodeの確認

移管先のドメイン管理会社へ申込み

JPドメインの場合の移管の流れ

現在のドメイン管理会社へ連絡

移管先のドメイン管理会社へ申込み

承認依頼メールの手続き

DNS切替

ネームサーバ(DNSサーバ)の切り替えをおこなうこと。

ドメインに紐づいたネームサーバを切り替えることによって、ドメインの参照先をかえることができる。