Client VPNを構築してはまったポイントを整理してみた

記事タイトルとURLをコピーする

こんにちは!

クラウドインテグレーション部(CI部)技術2課でOJT研修中の反町です。

今回は、Client VPNを初めて利用する機会をいただけたので、Client VPNを利用してプライベートなネットワークにあるブログサイトへ接続するための環境を構築してみました。

その中で、私がはまったポイントがいくつかありましたので、ブログにまとめます。

Client VPNについて

まず、VPNとはVirtual Private Networkの略でインターネット上に仮想専用線を設けることで、盗み見や改ざんなどから情報を守ることができるサービスです。

自分の家から職場までトンネルを掘って、そこを利用して通勤すればだれにも襲われる心配なく安全に通勤できるといったイメージでしょうか。 f:id:swx-miyu-sorimachi:20210607182654p:plain:w400

同様にClient VPNもインターネット上に仮想専用線(安全なトンネル)を設け、クライアントPC(家)から接続したいAWSのリソース(職場)に安全に接続できるようになるサービスです。 特にAWS Client VPNはネットワーク機器の設定が不要で簡単にVPNを利用することができる点が利点です。

Client VPNの構築

今回の構成

f:id:swx-miyu-sorimachi:20210611102207p:plain

今回は以下の作業内容についてハマりポイントや注意点等をご紹介していきます。

  • Linuxサーバーで認証に必要な証明書の作成とACMへの登録

  • WebサーバーとDBサーバーに必要なアプリをインストール

1. Linuxサーバーで認証に必要な証明書の作成とACMへの登録

サーバー証明書とクライアント証明書の作成はAWSの公式サイトを参考に作成しました。今回は相互認証を利用しています。

証明書作成後は、クライアント証明書とVPNエンドポイントでクライアントを認証するためのクライアント秘密鍵のファイルをクライアントPC(自宅のPC)にTera TermのSSHSCP機能を利用して転送しておきました。

1-1. はまりポイント①
  • 証明書の作成をWindowsで行おうとした

AWSの公式サイトを閲覧するとWindowsでの証明書発行方法があったので、「GUIで証明書発行ができる+転送の手間がない」と安直に考えた私はWindowsでの証明書発行を試みました。

結果、インストールを行ったアプリケーションが原因でVPNのプロファイル設定が変わってしまったり、必要なポートがなくなってしまったりして社内のネットワークにつなげなくなってしまいました。 もともと会社でClient VPNを利用している方は気を付けてください。

今回はそのアプリケーションのアンインストールと社内ネットワーク接続の再設定で難を逃れました。

1-2. はまりポイント②
  • 証明書の転送ができない

Linuxサーバーへログインし、rootユーザーになってから証明書の発行を行いました。

しかし、クライアントPCに証明書を転送しようと実行したら[Permission denied]され、転送ができませんでした。

調べたところTera TermのSCP機能では「最初にログインしたユーザでREAD権限があるファイルしか受信できない」そうです。 なので、rootユーザーではなくログインユーザー(今回の場合はec2-user)で証明書の再作成をしてSCP機能を利用し転送を行ったら無事成功しました。

2. WebサーバーとDBサーバーに必要なアプリをインストール

  • Webサーバー:Apacheと[Wordpress(+PHP,Mariadbライブラリ)]をインストール

  • DBサーバー:MariaDBをインストール

2-1.はまりポイント①
  • インターネットへ抜ける道がないので各種アプリのインストールができない

EC2のサーバーまで構築して、いざApacheをインストールしようとしたのですが、yumが実行できず。。インターネットへの道を作らなければならないことに気が付きました。

今回はパブリックサブネットを新しく作って、そこへNATGatewayを構築することで解決しました。以下構成図です。 f:id:swx-miyu-sorimachi:20210610105453p:plain

まとめ

最終的にはNATへ向けていたルーティングを外してもClient VPNからブログサイトに接続することができました。

調べていく中で知った情報の中に「スプリットトンネルの有効化」というものがあり、とても便利だと思ったので最後に紹介させてください。

スプリットトンネルとは、VPN接続をしているときにインターネット通信等はトンネルを介さずに通常通りクライアントのPCから通信させるようにすること。

つまり、クライアントVPNエンドポイントで指定した以外のネットワークにアクセスするときはクライアントPCからClient VPNを使わずにアクセスさせるらしいです。

実際にClient VPNに接続してIPアドレスを確認してみても、Client VPNのIPアドレスではなく自宅のIPアドレスになっていました。

こうすることで、VPCのインターネットゲートウェイとインターネットとの間で起こりえる大量の通信を回避することができます。

感想

今回初めてClient VPNの構築を行ってみて新しいことを知ったり、今までもやもやしていたところがすっきりした感じがありました。

実際にAWSを触ることがサービスを知る近道なんだな~と思いました。

これからもできる限りハンズオンをしていきたいです。