中学生でもできる自宅サーバ開通


※スクショ以外の記事内画像はご自由にお使いください

## 3行で

以下を含む
- linux(UNIX)の端末がサーバーとして動く状態になるまでのハウツー
- 簡単な用語の解説

# ①　ドメインを手に入れる

　〇〇.comや〇〇.co.jpなどをドメインと呼ぶ。
　このドメインは基本的に自作できないので、業者から借りる。
　[お名前.com](https://www.onamae.com)や[Google Domains](https://domains.google/intl/ja_jp/)、無料でドメインとDDNSを使える<https://ddns.kuku.lu>などで借りれる。

# ②　自宅サーバのIPを調べる

### URLとIP

　URLと呼ばれがちな「https://\*\*\*\*.com」みたいなものは、実際にはDNSという特殊なサーバーによって「hhtps://203.113.0.128」のようなIPアドレスに読み替えられている。

　例:<http://example.com>は<http://93.184.216.34>の読み替え

（botによる不正なアクセスを弾くため、IP直打ちによるアクセスは禁止することが多い。example.comもIP直打ちでは利用できない）

### グローバルIPとローカルIP（IPv4）

　①で購入した example.com で 自宅サーバーのIPを読み替えるために、まず自分のIPを調べる。
　今回はIPv4をを使う（IPv4とかIPv6とかよくわからない人はスルーして次の文へ）。

　IPv4にはグローバルIPとローカルIPの2種類がある。
　グローバルIPは、インターネット上で自宅の場所を示すための番号、ローカルIPは、自宅内での端末ごとに振られた番号のこと。
　（グローバルIPとローカルIPは「マンションの住所」と「部屋番号」のような関係）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824523/e44f46e1-2eb5-30dc-c823-dd7f24d596bb.png)

　DNSは「example.com」への通信を受け取って「**自宅サーバのグローバルIP**」への通信として送り出す。
　example.comと自宅サーバの対応をDNSサーバに登録するには自宅のグローバルIPを調べなければならない。

### グローバルIPを調べる

　上で説明したように、グローバルIPは基本的に自宅内で共通になる。
　よって、サーバーにする予定のPCでなくてもいいので、とにかく自宅の有線LANなりWi-Fiなりにつながっている端末のグローバルIPを調べればOK。

#### GUIを使っている場合(Windows, Mac等)

[CMAN](https://www.cman.jp/network/support/go_access.cgi)を利用するのが手っ取り早い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824523/36516432-b9c7-9dcd-223f-7e10953aa763.png)
　↑黒塗りの部分にグローバルIPが表示される。

　いきなり自分のIPが表示されるので怖いかもしれないがwebページにアクセスする際には必ずIPを晒しているので今更気にしなくてOK。

#### CLIを使っている場合

　サーバーにCLIしかなく、遠隔地にサーバがある場合はsshでCLI上からグローバルIPを見るしかない。
　そのような場合はcurl コマンドで**httpbin.org/ip**にアクセスすると調べれる。


```terminal:command
curl httpbin.org/ip
```

```terminal:実行結果(例)
{
  "origin": "203.0.113.212"
}
```

# ③　DNSにグローバルIPを登録する

　②で調べたグローバルIPをDNSに登録する。

　DNSはドメインを管理している業者が持っていることが多い。
　例えばGoogle Domainsで買った場合はGoogle DomainsのDNSで登録すればOK。

　DNSには自宅サーバのグローバルIPを特定するための情報を登録する。登録情報を「DNSレコード」や「DNS情報」と呼ぶ。
　DNSレコードにはいくつか種類がある。今回はIPv4を使うので「Aレコード」を登録する。

　※ここの操作は業者によって異なるので、各自「[業者名]　DNS　登録」等で調べる。

　また、後述する**動的IPの場合と固定IPの場合で動作が変わる**ので注意。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824523/6e5864d6-76d0-0f3d-1437-735f5e71e484.png)
↑グローバルIP「203.0.113.212」をAレコードに登録する場合（お名前.comでの操作例）
　黒塗りの部分に取得したドメイン名が入る。また、ホスト名は空欄でもよい。

### DNS設定後の確認

　DNS設定後は、```nslookup [買ったドメイン]```というコマンドで設定が完了したか確認できる。Windowsの場合はPowerShellで以下のような感じ。

```powershell:nslookup
nslookup example.com
```

```powershell:実行結果
Server:  UnKnown
Address:  [ルータのローカルIP]

Non-authoritative answer:
Name:    example.com
Address:  93.184.216.34
```

### 動的IPのDNSレコードについて
　ネットの利用形態によって、定期的に別のグローバルIPが割り当てられる可能性がある。

　**常に同じIPを利用する形式を静的(固定)IP**、**定期的に別のIPを割り当てる形式を動的IP**と呼ぶ。
　どちらの方式を使っているかはプロバイダ次第であるが、大抵は動的IP。


　DNSにドメイン名と動的IPを上手く対応させるため、定期的にDNSレコードを更新する。
　これを自動化するのが**DDNS**という仕組み。後述。

### ローカルIPの動的 / 静的(固定)

　グローバルIPとは別に、ローカルIPにも動的IPと固定IPがある。
　ローカルIPを動的に設定する方式を"DHCP"と呼ぶ。
　これは自宅のルーターの設定や機能に依存する。詳しくは[CMANの解説ページ](https://www.cman.jp/network/term/ip/p3/)

　DHCPを利用している場合、自宅サーバーのローカルIPを固定に切り替えなければいけない場合がある。
　使っているルーター次第なので、ルーターのDHCP機能について調べよう。

# ④　自宅サーバにwebページを用意する(nginxの導入等)

　ドメインとIPが対応したので、あと少しでネットから自宅サーバにアクセスできる。その前にサーバにページを用意しよう。

### nginxを導入する

　nginxの設定や導入については他の記事がたくさんあるので困ったらそちらを参照。
　Linuxの場合は ```apt install nginx```, ```yum install nginx``` あたりでパッケージマネージャからインストールする。

# ⑤　ルータのポートを開放する

### ポートについて

　ポートは各アプリケーションが占有している通信の窓口のことを言う。
　例えばwebページなどで用いられるHTTP通信では、基本的に80番が利用される。
　通信を送るときに相手のIPのどこのポート宛かを指定する仕組み。
　通信を受ける側は予め開放するポートを指定しておき、開放していないポートに来たアクセスは拒否する。
　ちなみにHTTPなら80番といった定番のポートはウェルノウンポートと言う。
　利用しやすいがその分セキュリティ上のリスクが大きい。

　ポートはURLの末尾で指定され、通常は3000番なら「<http://example.com:3000>」のように指定する。ただし、httpで80番を利用するときのみこの表記を省略できる。

### ルータのポートを開放する

　多くのルータはデフォルトで外部からアクセスできないようになっている。なので、ルータの設定からポートを開放する。

　nginxや各自コードで指定している番号のポートをルータの設定から開放する。
　これはルーターのメーカーによって手順が異なる。(たいていhttp://[自宅ルータのローカルIP] がルータの設定ページになっている)

# サーバの開通完了

　これで設定は終了。
　nginxを起動して http://[買ったドメイン]:[指定したポート] にブラウザでアクセスし、↓のページが出たらOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824523/1e0b661f-0ce3-5d40-9d43-8b86f3847fd2.png)

　これでwebアプリやページの公開の第一歩が終了。サーバ開通おめでとうございます。

# 注意：グローバルIPが動的IPの場合――DDNSの利用

　DDNSサービスはいくつか利用できる候補がある。

#### ①ルータのメーカーが公開しているDDNSサービス

　大抵が無料だが、webサーバの公開に適していないことが多い。

#### ②ドメインを管理する業者が公開しているDDNSサービス

　有料だったり無料だったりする。
　ドメインを取得していれば無料ということもある。
　Linuxには非対応のパターンも。

　フリーのDDNSサービスとしてはDDNS Nowを提供している<https://ddns.kuku.lu>とか。
　利用できるドメインは固定になってしまう。

### 最後に

　ネットワーク周りに関しては分からないことだらけなので、有識者の方はぜひご指摘等お願いします。