駆け出しエンジニア、ネットワークを学ぶ[随時更新]


ネットワークを学ぶモチベーション

仕事ではDockerを使うことが多いのですが、開発環境は既に誰かが作り、配布されたものを使います。幾つかのコマンドで仕事は出来ているものの、自分で0からDockerFileを書けるようになりたい、Dockerについて理解を深めたいなと思い、まずはネットワーク周りの知識をつけていこうという事で、勉強中です。

職場の先輩から、そもそもVPSにサーバー立てて、Webサイトを表示する事は出来る?出来ないならそこから始めてみたら?とアドバイスを頂いたので、まずは、そこを目標に、その過程で学んだ用語等をまとめていく予定です。

取り敢えず、学んだ事を一覧化し、自分の頭の整理するような忘備録的な側面の強い記事になっていますので、あしからず。

用語

SSH(Secure Shell)
サーバー間で安全な通信を行うための仕組み。接続先のサーバー側でSSHサーバーサービスが動作していて、クライアントからの接続を待ち受けています。SSHクライアントで接続すると、ネットワーク経由でLinuxサーバーにログインし、コマンドによる作業を行える。通信は自動的に暗号化されます。

以前いた制作会社では、FTPを使う場面もありましたが、暗号化のない平文で送信してしまうため、セキュリティの観点でリスクがありますね...。

MacOSでは、SSHクライアントが標準で用意されてますが、Windowsユーザーは別途設定が必要ですよね。

ポート番号
ネットワーク上のホストでは、複数のアプリケーションがネットワークを使っているのが普通です。その為、ホスト上で動作してるアプリケーションを識別する必要があります。その為に用いられるのがポート番号です。IPアドレスが建物の住所ポート番号は部屋番号のようなイメージで良いかなと思っています。

良く使われるネットワークサービス用のポート番号はあらかじめ決められていています(=Well Known Port)

<主なポート番号一覧>

ポート番号 概要
20 FTPデータを転送
21 FTP制御情報
22 SSH
23 Telnet
25 SMTP(メール)
53 DNS
80 HTTP
110 POP(メール)
143 IMAP(メール)
443 HTTPS

ネットワークインターフェース
ネットワークとの接点。Linuxサーバーだとeth0 eth1といった名前で表示されます。

サーバー構築する際の手順

サーバー構築作業は大別すると3つあります。
1. OSをインストールし、設定する。
→インストール後にセキュリティ設定やユーザーの追加など、サーバーの運用に必要な設定作業を行います。

2. 必要なソフトウェアをインストールする。
→OSに加えて、必要なサーバーソフトウェアやミドルウェア(OSとアプリケーションの間に入るソフトウェアでデータベース管理システムなどが相当)をインストールします。

OSのインストール時に一括してインストールすることも可能ですが、不要なソフトウェアもインストールされ、セキュリティリスクを生み出してしまいがちなので、個別にインストールした方が良いとされています。

<良く使われるソフトウェア一例>
Webサーバー(Apache, nginxなど)
プログラミング言語(PHP、Java、Rubyなど)
データベース(MySQL、PostgresSQLなど)
フレームワーク(Laravel、Railsなど)
CMS(WordPressなど)

3. ソフトウェアを適切に設定
インストールしたソフトウェアについては、個々に設定。初期設定のままでは、セキュリティリスクが潜在していたり、日本語が正しくつかえなかったりといった問題があります。

コマンド

※CentOS 7で確認

ネットワークインターフェースの情報を調べる

$ ifconfig eth0

もしくは

$ ip addr show eth0

ネットワークインターフェースの一覧表示

サーバーに備わっているネットワークインターフェースの一覧と各状態が確認できる。

$ nmcli device

ネットワークインターフェースの詳細表示

$ nmcli device show eth0

ネットワークの疎通確認

$ ping 160.16.145.178 -c 5

ネットワークが繋がっているかどうかの確認に使われる基本コマンドがping
pingコマンドを使うと指定したホストに対してICMP(制御用パケット)を送り、その反応を表示します。ネットワークが繋がっていないか、指定したホストが稼働していないと反応は返ってきません。

Ctrl + Cキーを押すまで、確認パケットは送られ続けますが、上記のように -cオプションでパケットを送る回数は指定できます。

「Distination Host Unreachable」が表示され、宛先ホストに届かない原因としては以下をの可能性が高いです。

  • ローカルホスト又は相手側がネットワークに繋がっていない
  • 相手側のシステムが起動していない
  • 相手側のネットワークサービスに問題がある
  • 相手側がpingに応答しないように設定されている
  • 途中のファイアウォールによって疎通確認が制限されている