概要
入院中、iPadしか手元に無い状態でお金を掛けずにどうにかして検証(開発)環境を用意したかった人間の備忘録。
GCPで基本的なネットワーク構成を組み、その上にサーバを立て、手元のiPadからターミナルでサーバへSSH接続(踏み台経由)するまでの手順をまとめています。
GCPをちょっと使ってみたいなー、GCPで簡単な開発環境揃えたいなー、クラウド触りたいけど課金が恐い、という方向けの記事です。
目次
- 環境
- ネットワーク構成
- 環境構築
- 新規プロジェクト作成
- VPC(ネットワーク)作成
- Cloud NAT作成
- GCE(踏み台サーバ)作成
- GCE(検証サーバ)作成
- Firewall設定
- SSH認証鍵作成・割当
- 接続確認
- iPad(Termius)から踏み台サーバへのSSH接続
- 踏み台サーバから検証サーバへのSSH接続
- 検証サーバからインターネットへの接続確認
環境
GCEではブラウザからでもSSH接続し触れますのでお好みで。
GCE1台だけなら永年無料でサーバを構築することができます。
また、無料枠で登録後3ヶ月間だけ$300分(約¥30,000)のチャージが付いてくるので、短期で様々なサービスを使いたかった私には丁度良いサービスでした。
永年無料枠には様々な制約があります。また、この記事で紹介している構成はGCP無料枠登録後の3ヶ月間だけなら無料で使用できますが、その期間以上使用をする場合は有料となるためご注意ください。
OS | バージョン | CPU | メモリ |
---|---|---|---|
CentOS7 | 7.9.2009 | 2vCPU | 1GB |
ネットワーク構成
- 外部IPアドレスは踏み台サーバにのみ割り当てます。
- 各LinuxサーバへのSSH接続は踏み台サーバを経由して行います。
- 各Linuxサーバからインターネットへの通信はCloud NATでIPアドレスを変換して接続します。
今回、GCPのVPCやNAT機能を見たかった為、踏み台サーバを用意していますが、GCPにはIAP(Cloud Identity-Aware Proxy)と呼ばれる機能があります。これを使用すれば踏み台サーバやCloud NAT無しで直接サーバにSSHやRDP等が可能になります。
環境構築
新規プロジェクト作成
GCPでは環境構築時にプロジェクトの作成が必要となります。
作成したプロジェクト内に今回の環境を作成していきます。
VPC(ネットワーク)作成
「Private Subnet」と「Public Subnet」の2つを作成します。
サブネット | IPアドレス | リージョン |
---|---|---|
Public Subnet | 172.16.0.0/24 | us-west1 |
Private Subnet | 172.16.1.0/24 | us-west1 |
- [Google Cloud コンソール]→[メニュー]→[ネットワーキング]→[VPCネットワーク]→[VPCネットワーク]→[VPCネットワークを作成]を選択
- VPCネットワーク名として任意の名前を入力
- [サブネットの編集]から「Public Subnet」を作成
- [サブネットの編集]→[サブネットを追加]から「Private Subnet」を作成
- その他はデフォルト値のまま[作成]を押下
Cloud NAT作成
GCE(踏み台サーバ)作成
クライアントから直接SSH接続可能なサーバを「Public Subnet」のネットワーク上に作成します。
マシンシリーズ | マシンタイプ | OS | バージョン | ブートディスク種類 | ディスクサイズ |
---|---|---|---|---|---|
E2 | e2-micro | CentOS | CentOS7 | 標準永続ディスク | 30G |
※GCEの永久無料枠のマシン構成の範囲で作成しています。
リージョンはVPCで作成したサブネットと同じリージョンを選択する必要があります
3. ブートディスクを選択
4. ネットワークを選択
ネットワークタグを設定することでファイアーウォールやルーティングのルールにGCEサーバを適用することが出来ます。
今回サーバに適用するIPアドレスはエフェメラル(=サブネット内で最小のIPアドレス)を自動で割り当てる設定にしています。マシンの再起動等によってアドレスが変わる可能性があるので、固定としたい場合は内部/外部IPアドレスの予約を行い適用してください。
GCE(検証サーバ作成)
ネットワーク設定以外は踏み台サーバの作成方法と変わらないため省略します。
ネットワーク設定を以下としてください。(※3台とも)
Firewall設定
デフォルトではネットワーク外部から内部への接続はファイアウォールルールで拒否されるため、必要な通信の許可ルールを作成します。
送信元 | 宛先 | プロトコル | 許可/拒否 |
---|---|---|---|
all(インターネット) | 踏み台サーバ | TCP/22 | 許可 |
VPC内ネットワーク | 検証サーバ | all | 許可 |
- [Google Cloud コンソール]→[メニュー]→[VPCネットワーク]→[ファイアウォール]→[ファイアウォールルールを作成]を選択
- インターネットから踏み台サーバへのSSH接続を許可するルールを作成
ネットワークタグは踏み台サーバ作成時に作成したタグを付加します。
- 同じく[ファイアウォールルールを作成]を選択し、Public Subnet及びPrivate Subnetから検証サーバへの接続を全て許可するルールを作成
ネットワークタグは検証サーバ作成時に作成したタグを付加します。
SSH認証鍵作成・割当
GCPでは手元の端末からターミナルを使用してSSH接続し操作するには、SSH用の認証鍵が必要になります。
今回はCloud Shellを使用していますが、SSH鍵を作成できれば何を使用しても問題ありません。
1.[Google Cloud コンソール]→[メニュー]→[Cloud Shell エディタ]→[ターミナルを開く]を選択し Cloud Shellを開く
2. SSH鍵を作成するコマンドを入力
$ ssh-keygen -t rsa -f ~/.ssh/<SSH鍵名> -C <ユーザー名>
- SSH鍵名は任意のもの、ユーザ名は自身のメールアドレス等を指定します。
- コマンド実行後に鍵に設定するパスワードを2回聞かれます。
~/.ssh/内に以下のようなファイルが作成されます。(ファイル名は上記コマンドで付けたSSH鍵名になります)
秘密鍵:ssh-key
公開鍵:ssh-key.pub
3. catコマンド等で上記で作成した鍵の中身を表示しコピーをする
$ cat ~/.ssh/ssh-key
$ cat ~/.ssh/ssh-key.pub
4. [Google Cloud コンソール]→[メニュー]→[Compute Engine]→[メタデータ]→[SSH認証鍵]の編集を選択
5. 編集画面に表示されたテキスト入力ボックスに3でコピーした“公開鍵(~.pub)”を貼り付け
接続確認
iPad(Termius)から踏み台サーバへのSSH接続
-
Termiusを開き、[Keychain]→[+]→[Paste Key]を選択し各値入力
Name:任意の名前
Private:コピーした秘密鍵を貼り付け
Public:コピーした公開鍵を貼り付け
Passphrase:鍵作成時に設定したパスワードを入力 -
[Hosts]→[+]→[New Hosts]を選択し各値入力
Alias:任意の名前
Hostname:踏み台サーバの外部IPアドレス
Use SSH:有効
Username:踏み台サーバのユーザ名※1
Password:無し
Key:1で作成したKeychainを選択
※1 各サーバのSSH用ユーザ名は以下で確認出来ます。
[Google Cloud コンソール]→[メニュー]→[Compute Engine]→[メタデータ]→[SSH認証鍵]→[ユーザ名]
踏み台サーバから検証サーバへのSSH接続
- 踏み台サーバへ作成したSSH秘密鍵を格納
コピー&ペースト等で秘密鍵の中身を~/.ssh/フォルダ内に格納します。
$ vi ~/.ssh/ssh-key
!!! 秘密鍵を貼り付け !!!
2. 検証サーバのIPアドレスと1で格納した秘密鍵を指定してSSHコマンドを実行
$ ssh -i ~/.ssh/ssh-key [ユーザ名]@172.16.1.xx
Enter passphrase for key '/home/xxx/.ssh/ssh-key':[SSH鍵作成時に設定したパスワードを入力]
検証サーバからインターネットへの接続確認
Cloud NATが機能し、外部IPアドレスを持たないサーバからもインターネットへ疎通が可能なことを確認します。
$ ping 8.8.8.8
$ ping google.com
FQDN指定のPingでも疎通可能なので、名前解決も問題ないことが確認できます。
まとめ
期間限定とはいえ無料である程度の環境を構築出来るのは検証難民としてはとても有難いです。
これでiPadで快適とは言えませんが、環境としては充分揃えられそうです。