Windowsサーバーをクラウドのリモートアクセスサーバーとして設定

# 概要
パブリッククラウドに立てたサーバーへアクセスするため、VPNを利用したり踏み台サーバーを立てたりするかと思います。
今回はWindowsサーバーの標準機能のリモートアクセスを使ってRemote Accessサーバーと立てました。

# リモートアクセス手段
パブリッククラウドへのリモートアクセス手段としては以下の方法が考えられ、それぞれメリット・デメリットがありますので規模や予算に応じて選択されるかと思われます。
- 専用線接続
　パブリッククラウド側にて提供している専用線接続サービスを使用して専用線で接続します
    - メリット
        - 最もセキュリティが高い
        - レスポンスもある程度保証されている
    - デメリット 
        - 費用がかかる
        - 納期がかかる
        - 接続拠点からしか接続できない
- Site-to-Site VPN
  パブリッククラウド側にてSite-to-Site VPNサービスを提供して使用してインターネットを経由した拠点間VPNで接続します
    - メリット
        - セキュリティが高い（IP固定、通信暗号化）
        - 専用線に比べると費用が安い
    - デメリット 
        - レスポンスは保証されない
        - 接続拠点からしか接続できない
- 自営の踏み台サーバー（Jumpサーバー）
　クラウド内のパブリックサブネットにLinuxまたはWindowsサーバーを立てて、そのサーバーを踏み台にしてクラウド内のサーバーにアクセスします
     - メリット
         - 比較的準備が少ない
         - 専用線やSite to Site VPNのようなサービス料金がかからない
         - 接続場所の制約がない
     - デメリット
         - 直接クラウド内のサーバーにアクセスできないのでファイル送受信が煩雑
         - 踏み台サーバーのリッスンポートを常にインターネットから見られる 
         - 踏み台サーバーの管理が必要
- 自営のリモートアクセスサーバー
　クラウド内のパブリックサブネットにVPNサーバーを立てて、クライアントからVPN接続します
 　LinuxではOpenVPNやSoftEtherの利用、Windowsではリモートアクセス機能等があります
     - メリット
         - 専用線やSite to Site VPNのようなサービス料金がかからない
         - VPNサーバーでユーザー管理が可能
         - 接続場所の制約がない
    - デメリット
         - 冗長化が難しい
         - 踏み台サーバーの管理
- パブリッククラウドのリモートアクセスサービスを利用
　パブリッククラウド側にて提供されているリモートアクセスサービスを利用します
    - メリット
        - リモートアクセス環境の運用が不要
        - 接続場所の制約がない
    - デメリット
        - サービス制限の影響の考慮が必要
          (費用、接続制限等）  
 
# 構成
Windowsサーバーにリモートアクセス設定を行い、クライアント用サブネット用に192.168.102.0/24の中からIPアドレスを払い出します
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/553c4df6-3568-dc34-a05b-f60ad403dcf4.png">


# Windowsリモートアクセス設定
## OCI側設定
今回は一番費用が安いOCIの環境を使用しましたが、他のクラウドでも同じような設定で実現可能かと思います。
- VMのVNICのソース/宛先チェックのスキップ
    - OCIコンソールのナビゲーションメニューからコンピュート>>インスタンス>>対象のインスタンス>>リソースのアタッチされたVNICを選択
    - 右メニュー(⋮)からVNICの編集を選択してソース/宛先チェックのスキップをチェック
    - 「変更の保存」を押下

- クライアントサブネットへのルーティング追加
    - OCIコンソールのナビゲーションメニューからネットワーキング>>仮想クラウド・ネットワーク>>対象VCN選択>>対象サブネット選択>>ルート表選択して「ルートルールの追加」を押下
    - ターゲット・タイプをプライベートIPとして宛先をクライアントサブネット、ターゲットをWindowsサーバーのIPアドレスを入力して「ルートルールの追加」を押下

- アクセスリスト追加
    - OCIコンソールのナビゲーションメニューからネットワーキング>>仮想クラウド・ネットワーク>>対象VCN選択>>対象サブネット選択>>セキュリティリスト選択
    - イングレスルールを追加
        - VPN接続用として送信元0.0.0.0/0(限定できる場合はそのIPアドレス) 宛先ポートはUDP/500,1701,4500およびESP(50)
        - クライアントサブネットからの通信

## Windowsサーバー
- サーバーマネーシャー起動
- 役割と機能の追加を選択
    - 役割と機能の追加ウィザードが表示
    - 開始する前に : 「次へ」を押下
    - インストールの種類の選択：役割ベースまたは機能ベースのインストールを選択、「次へ」を押下
    - 対象サーバーの選択：自サーバーの選択を確認して「次へ」を押下
    - サーバーの役割の選択：リモートアクセスを選択して「次へ」を押下
    - 役割と機能の追加ウィザード：「次へ」を押下
    - リモートアクセス：「次へ」を押下
    - 役割サービスの選択：「DirectAccessおよびVPN(RAS)」を選択
    - DirectAccessおよびVPN(RAS)に必要な機能を追加しますか?：「機能の追加」を押下
    - さらに「ルーティング」を選択して「次へ」を押下
    - Webサーバーの役割(IIS)：「次へ」を押下
    - 役割サービスの選択：「次へ」を押下
    - インストールオプションの確認：「インストール」を押下
    - インストールの進行状況：インストール完了後「閉じる」を押下

- サーバーマネージャー右上の旗マークをクリックして展開後構成の「作業の開始ウィザードを表示する」を選択
- リモートアクセスの構成が表示されるので設定
    - リモートアクセスの構成：「VPNのみを展開します」を選択
    - サーバーを右クリックし、「ルーティングとリモートアクセスの構築と有効化」を選択
    - ルーティングとリモートアクセスのセットアップウィザード
    - 「次へ」を押下
    - 構成：カスタム構成を選択
    - カスタム構成：VPNアクセスを選択して「次へ」を押下
    - ルーティングとリモートアクセスサーバーのセットアップウィザードの完了：「完了」を押下
    - サービスの開始：「サービスの開始」を押下
- サーバーを右クリックし、「プロパティ」を選択
    - セキュリティタブにて「カスタムIPSecポリシーをL2TP/IKEv2接続で許可する」にチェックして事前共有キーを入力
    - IPv4にてIPv4アドレスの割り当てにて「静的アドレスプールを使う」を選択して「追加」を押下
    - 開始IPアドレス、終了IPアドレスを入力して「OK」を押下
     例：開始IPアドレス 192.168.102.2  終了IPアドレス 192.168.102.100
    -「OK」を押下
    - サービス再起動のメッセージが表示されるので「OK」を押下
- サーバーを右クリックし、「すべてのタスク」「再起動」を選択

- VPNユーザー追加
    - サーバーマネージャーのツール>>コンピューターの管理>>システムツール>>ローカルユーザーとグループ>>ユーザーを選択
    - 右クリックから新しいユーザーを選択
    - ユーザー名、パスワードを入力して「作成」を押下して「閉じる」を押下
    - ユーザーを選択して右クリックからプロパティを選択
    - ダイヤルインを選択してリモートアクセス許可でアクセスを許可を選択して「OK」を押下

## Windows Client側設定
- VPN設定
    - Windowsマーク右クリック>>ネットワーク接続にてVPNを選択
    - 「VPNを追加」を押下
        - 接続名: 任意
        - サーバーまたはIPアドレス: WindowsサーバーのグローバルIP
        - VPNの種類:事前共有キーを使ったL2TP/IPSec
        - 事前共有キー: 事前共有キー
        - サイン情報の種類: ユーザー名とパスワード
        - ユーザー名: Windowsサーバーで設定したVPNユーザー
        - パスワード: Windowsサーバーで設定したVPNユーザーのパスワード
        - 「保存」を押下
    - 作成されたVPN接続の詳細オプションを選択してその他のVPNプロパティを編集
    - セキュリティタブを選択
        - データの暗号化は「暗号化が必要（サーバーが拒否する場合は切断します)」を選択して認証はEAP-MSCHAP v2を選択
    - ネットワーク タブを選択
        - インターネットプロトコルバージョン4(TCP/IPv4)を選択して「プロパティ」を押下
        -「詳細設定」を押下して「リモートネットワークでデフォルトゲートウェイを使う」のチェックを外す
        -「クラスベースのルートの追加を無効にする」にチェックして「OK」を押下
        -「OK」を押下
    - 「OK」を押下
- ネットワークとインターネット>VPNまで戻って「接続」を押下
- ユーザー作成時に初回ログオン時にパスワード変更を選択していた場合はパスワード変更を実施

- 接続できない場合、クライアント側の環境でNATトラバーサル設定が必要な場合があります
　以下を参考にしてください
[Configure a L2TP/IPsec server behind a NAT-T device](https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/configure-l2tp-ipsec-server-behind-nat-t-device)

- 接続が確立できたら引き続きルートテーブル設定を行います
- 管理者権限でCMDを実行してroute printを実行してVPNのインターフェース番号を取得します

```
C:\path\to>route print
===========================================================================
インターフェイス一覧
　　:
 49...........................WindowsVPN
　　:
===========================================================================
```

- クラウド内サーバーへのルーティングを追加します

```
C:\path\to>route -p add 10.105.0.0 mask 255.255.0.0 0.0.0.0 IF 49
 OK!
```
- 追加されました
```
C:\path\to>route print
IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
　　:
       10.105.0.0      255.255.0.0            リンク上     192.168.101.7     36
　　:
```

クライアントからクラウド内サーバーにアクセスした結果です。
問題なくアクセスできました。
```
C:\path\to>netstat -an 
　　:
  TCP         192.168.101.7:61595    10.105.2.72:22         ESTABLISHED
　　:
```