この記事は、ニフクラブログで2017-04-25に公開された記事を移転したものです。
はじめまして、富士通クラウドテクノロジーズの成田颯(なりた はやて)です。 関東生まれ関東育ち、好きな食べ物は粉物とエビチリです。 昨年の12月に初めてニフティクラウド(現ニフクラ)に触れてから、はや3ヶ月。 [ifconfig] しかわからなかったLinuxも、基本的なコマンドは打てるくらいに進化を遂げました。
そんな進化を遂げた成田がSSHログインについて、 自分自身が初心者ということを最大限に活かし、初心者目線でわかりやすく用語の解説も含めてご紹介いたします!
今回の目標
グローバルIPを持たないサーバーを、ルーターのDNAT機能を使ってインターネットからアクセスできるようにするための環境を構築する。
・DNAT
Destination Network Address Translationの略。
プライベートにしか接続されていないサーバーに、SSHログインできるようになる優れもの。
宛先アドレスを変換する(例 → グローバルIPをプライベートIPに変換)
目標の背景
IPアドレスを外部に公開したくない...等の理由でサーバーにグローバルIPを持たせないことがあると思います。 グローバルIPを持たないサーバーにSSHログインをしたいときに、
「え、、、SSHログインできないんだけど、、、」
という風に、詰まってしまったことが自分にもあり、 同じような経験をしてほしくない!と思ったので記事にしました。
今回の構成
今回の構成は上記目標にあるとおり、「グローバルIPを持たないサーバーを、ルーターのDNAT機能を使ってインターネットからアクセスできるようにする」ためのシンプルな構成となっております。 自分も同じような構成でNATの学習をしていて、とてもシンプルでわかりやすい構成だったので今回紹介いたします。
以下が今回の構成図です。
上記の構成図と同じ構成になるようにコントロールパネル(以下コンパネ)から、
[サーバー、ルーター、プライベートLAN] (+ NATテーブル、DHCPオプション) を作成してみましょう!
※本記事ではファイアウォールの設定方法については触れません。
POINT:作成する順番
今回のように作成すべき構成がわかっている場合は、以下の順番で作成するとGOODです。
- プライベートLAN
- ルーター
- サーバー
今回作成するルーターはグローバルとプライベートLANに接続されているため、最初にプライベートLANを作成します。 ルーターがないとサーバーにIPアドレスが割り当てられないので、サーバーより前にルーターを作成し、最後にサーバーを作成します。
作成する順番は結構大事で、ルーターがない状態でサーバーを作成すると、プライベートIPアドレスがサーバーに割り当てられないため「異常あり」ステータスになってしまいます。
プライベートLANを作ろう
ここで登場する用語
・クラス
アドレスクラスともいう。クラスA~Eの5つのクラスがある。
各クラスごとにIPアドレスの割り当てられる数が決まっている。
各クラスごとの割り当てられる数については紹介しませんが、クラスCだと少なすぎる、クラスAだと多すぎる
という問題があり、最近ではCIDR(以下で説明)が主流になっています。
・CIDR
アドレスクラスの概念がなく、IPアドレスを割り当てられる数をちょうどいいサイズに指定できる。
そのため、アドレスクラスのように枠が少なすぎ、多すぎという問題が発生しない。
[xxx.xxx.xxx.xxx/XX]というフォーマットで入力し、[/XX]の数値を変えることで
サブネットマスクの範囲(IPアドレスの割り当てられる数)を変えることができます。
文章だけではわかりづらいと思うので、図で説明いたします。 以下の図では「アメ=IP」「アメ袋=クラス」という認識でご覧ください。
上の図ではペティちゃんが欲しがっているアメの個数に対して、コンビニで売られているアメ袋の内容量に差があることがわかります。 IPアドレスにはクラスという概念がありますが、CIDRにはクラスの概念がないのです。どういう効果があるのか、以下の図で説明いたします。
CIDRの説明は以上です、早速プライベートLANを作ってみましょう。
作ってみよう
コンパネの [ネットワークタブ > プライベートLAN作成] でプライベートLAN作成画面を開きましょう。
プライベートLAN名、CIDRに適切な値を入力して作成してください。
今回は以下のような設定でプライベートLANを作成しました。
ルーターを作ろう
作ってみよう
コンパネの [ネットワークタブ > ルーター作成] でルーター作成画面を開きましょう。
今回作成するルーターには、共通グローバルと先ほど作成したプライベートLANが接続します。
ルーター作成画面のネットワーク設定にて、共通グローバルとプライベートLANに接続されるように設定をしてください。
また、ネットワーク設定の「プライベートLAN」の「DHCP」は有効に設定してください。 有効にしないとサーバーにIPアドレスが割り当てられず、サーバーのステータスが「異常あり」になってしまいます。
今回は以下のような設定でルーターを作成しました。
DHCPオプションの作成・設定
ここで登場する用語
・デフォルトゲートウェイ 通信相手までの経路がわからないときに、とりあえず中継してもらうIPアドレス。
デフォルトゲートウェイはかなり重要なので、図で説明します。 下の図では、ペティちゃん(2度目の登場)がデフォルトゲートウェイ役になっています。 宛先がわからないときにとりあえずペティちゃんに居場所を聞いてみるのです。
宛先(C君の居場所)がわからない状況で、デフォルトゲートウェイが設定されていないと通信ができません。 プライベートLANしか接続されていないサーバーにSSHログインしたい場合は必ず設定してください。設定しなかった場合SSHログインができません。
作ってみよう
コンパネの [DHCPオプションタブ > DHCPオプション作成] でDHCPオプション作成画面を開きましょう。
DHCPオプション作成画面には7つの入力項目があります。
今回は一番上の「default-router」のみ入力します。
「default-router」にはデフォルトゲートウェイとして使用するIPアドレスを入力します。
今回はルーターのプライベートIPを「default-router」に設定しました。
設定してみよう
コンパネの[ネットワークタブ]からDHCPオプションを設定したいルーターをクリックします。 表示されたウィンドウの左下にある、「ルーターの操作」から「ネットワーク設定変更」を選択すると 以下のような画面が表示されるので、「プライベートLAN」の「DHCPオプション」に作成したDHCPオプションを設定します。
サーバーを作ろう
ここで登場する用語
・SSHキー
サーバーにSSHログインする際に使用します。作成したらローカルに保存してください。
パスワードはSSHログインをするときに使用するので、忘れないようにしてください。
作ってみよう
コンパネの [ネットワークタブ > サーバー作成] でサーバー作成画面を開きましょう。
最初にOSイメージを聞かれるので、今回は「CentOS7.1」を選択します。
今回のサーバー作成で重要なのはネットワーク設定とSSHキーです。
共通グローバルには接続せず、初めに作成したプライベートLANにのみ接続します。
(共通グローバルに接続するとDNATのありがたみが伝わらないのである)
また、IPアドレスは必ず「自動割り当て」、もしくは「指定する」を選択し、適切なIPアドレスを設定してください。
また、SSHキーを作成したらローカルに保存してください。 前編では使いませんが、後編でSSHログインする際に使用します。
はじめに紹介した構成図の通り、今回はサーバーを2つ作成します。 同じようにサーバーをもう1つ作成してみてください。
今回は以下のような設定でサーバーを作成しました(もう1つのサーバーも同じ設定)
楽しかった環境構築も、あっという間に終わりが近づいてきましたね。 ただ、ルーターやサーバーを作成しただけでは、まだSSHログインはできないのです。 それでは今から、SSHログインをできるようにするための設定をしていきましょう
NATテーブルの作成・設定
ここで登場する用語
・NAT
Network Address Translationの略。
IPアドレスを変換してくれる優れもので、SNATとDNATなどの種類がある。
・NAPT
Network Address Port Translationの略。
NATにあったIPアドレス変換機能に、ポートを変換する機能が加わった素晴らしいもの。
ポートが変換できることによって、1つのグローバルIPを複数のプライベートIPに変換することができる。
・SNAT(今回は使用しません)
Source Network Address Translationの略。
プライベートにしか接続されていないサーバが、インターネットに接続できるようになる優れもの。
送信元IPを変換する(例 → プライベートIPをグローバルIPに変換)
・アウトバウンドネットワーク(今回は使用しません)
イメージ的には外に出ていく通信。
SNATの場合、プライベートIPがグローバルIPに変換されて外に出ていくため、グローバルIPがアウトバウンドネットワークになる。
・インバウンドネットワーク
イメージ的には中に入ってくる通信。
DNATの場合、グローバルIPがプライベートIPに変換されて中に入ってくるため、プライベートIPがインバウンドネットワークになる。
作ってみよう
コンパネの [NATテーブルタブ > NATテーブル作成] でNATテーブル作成画面を開きましょう。
今回はDNATのみ使用しますので、DNATルールを追加します。
先程サーバーを2つ作成したので、NAPT が最大限に活かせますね!!!
それでは、以下の点を踏まえてNATテーブルを作成してみましょう。
・「192.168.0.1」と「192.168.0.2」の両方にSSHログインできるようにしたいなぁ、、、
・ルーターのグローバルIPを指定して、SSHログインする(グローバルIPをプライベートIPに変換させるには?)
今回は以下のようにNATテーブルを作成しました。
以下では、SSHログインする際に、ルータのグローバルIPを指定した上で、
「ポート22」を指定した時に「192.168.0.1」、「ポート10022」を指定した時に「192.168.0.2」
のサーバーにSSHログインするように設定してあります。
設定してみよう
コンパネのネットワークタブに表示されているNATテーブルを設定したいルーターをクリックします。 表示されたウインドウの左下にある、「ルーターの操作」から「NATテーブル設定変更」を選択すると 以下のような画面が表示されるので、「変更するNATテーブルID」に作成したNATテーブルを設定します。
設定が完了したら、NATテーブルを設定したルーターをクリックして設定が反映されてるか確認しましょう。
POINT:NATに慣れるコツ
自分がNATを初めて使ったときはなんとなくやったら出来てしまったという感じでした。
そんなNATに慣れるために、理解すると良いポイントが2つあります。
・プライベートLANのみに接続されているサーバーは、NAT設定をしないとSSHログインもインターネット接続もできないことを理解する。
・SNAT、DNATの流れを把握することがとても大事。
SNAT → プライベートLANのみに接続されているサーバーからインターネットに出ていく。
DNAT → インターネットからプライベートLANのみに接続されているサーバーに入る。
あくまでも自分なりの理解するといいと思ったポイントなので、
皆さんも自分なりのポイントを見つけ出せるとGOODです!
これでDNATを利用してSSHログインするための環境構築が完了しました!
まとめ
・環境構築において、作成したい構成が見えている場合は、作成する順番を意識して効率化を図ろう
・CIDRはクラスの概念がなく、無駄なくIPアドレス割り当て空間を指定できる
・DNAT、SNATは流れを把握することで、どちらを設定すればよいか簡単に判断できるようになる
・プライベートLANにしか接続されていないサーバーがあるときは、DHCPオプションの設定を忘れずに行う、設定しなかった場合、SSHログインができない
「後編」では、今回作成したサーバーにSSHクライアントを利用して、実際にSSHログインをしてみましょう!!!