さくらクラウドVPCルータ(サイト間VPN)とOpenVPNを利用したVPN拠点の構築

昨今、コロナ禍により業務を遂行するにあたり、テレワークを余儀なくされてます。

社内のNASやら、運用・保守業務で「IPアドレス制限されている」サーバにアクセスするために、会社ルータ(RTX-1210)にVPN接続をすることが多々発生しています。

そうした中、RTX-1210にVPN(L2TP)接続ができないというスタッフが続々と発生するという問題が顕著化しました。(以前よりそういった問題がちょくちょくありましたが、特に業務への影響は軽微であったことから、放置していました。)

ログ、コンフィグなどを見直して、ある程度あたりはつけましたが、業務に影響がでるかもしれない作業を実施する時間的余裕もないのと、本当にそれで問題が解消する保証もないのと、別件で使ってる拠点間接続だと、通信が安定しているという事もあり、 外部にVPNサーバを立てて、そいつと、会社のRTX-1210を拠点間接続でつないでしまえばいいのじゃなかろうかと思い立ったが吉事。さっそくやってみました。

さくらクラウドのVPCルータにもVPN(L2TP)サービスがあるので、最初これが使えるか?と試したのですが、VPCルータから全パケットを拠点間接続の接続先に転送するルーティングを入れると、VPN(L2TP)サービスに接続できなくなってしまうという問題(というかあたりまえなんですが。。)があり、以下のようなネットワークを作ってみました。

簡単に説明すると、さくらVPCルータを拠点間接続だけに利用して、VPNサーバは別にサーバを立てて、VPNクライアントから接続されたパケットはすべて、VPCルータ経由・拠点間VPN接続を得て会社のRTX-1210から出ていくルーティングを設定するというものです。

つまり、以下のような通信ラインを確保しようという試みです。

以下構築の手順メモ

OpenVPNを設定する

【設定前提情報】

ローカルスイッチネットワーク情報: 192.168.100.0/23
接続先スイッチ: local-switch(1)
サーバのNetwork: eth0 (Global側) 30.30.30.1
サーバのNetwork: eth1 (Loal側) 192.168.100.2
OS: CentOS 7.6

【手順】

STEP1) 必要パッケージをインストールする

STEP2) 各種設定準備を行う
※パスワード、CAのcommonnameは好きな値を設定の事

STEP3) server_r.confの設定を行う

デフォルト値から以下を変更する

STEP4) net.ipv4.ip_forward の設定を行う

STEP5) iptablesの設定を行う

※ボールドの部分がポイント

STEP6) OpenVPN起動

STEP7) ルーティングの設定


※このルーティングがポイント(10.8.0.0/24からのパケットは全部、192.168.100.1へルーティングするという内容を用意する)

STEP7) ルーティングの永続化

※設定方法確認中
 とりあえずいまは起動時にスクリプトで実行させておく。

STEP8) クライアントで利用するcert / keyは以下ファイルを利用する

/etc/openvpn/easy-rsa/pki/ca.crt
/etc/openvpn/ta.key
/etc/openvpn/easy-rsa/pki/issued/client1.crt
/etc/openvpn/easy-rsa/pki/private/client1.key

.ovpnファイルを作ると接続設定するのが楽になります。
以下のようなファイルを作る

さくらクラウド VPCを利用した「拠点間VPN接続」の設定を行う。

さくらクラウドVPCの設定を行う

■さくらクラウド ネットワーク情報

【設定前提情報】
ローカルスイッチネットワーク情報: 192.168.100.0/23
接続先スイッチ: local-switch(1)
VPCルーター(インターフェース:プライベート1)に割り当てるIP: 192.168.100.1
対向IPアドレス: 10.10.10.1
対向ID: 192.168.100.1
Pre Shared Secret: unko123
対向Prefix: 0.0.0.0/0
ローカルPrefix: 192.168.100.0/23

【手順】

STEP1) VPCルーターを追加する
    プラン: スタンダード
    インターネット接続: 有効
    そのほかの項目は任意で入力する
    
STEP2) VPCルーターのインターフェースの設定
    スイッチ: 既存スイッチを接続
    接続先スイッチ: local-switch(1)
    IPアドレス: 192.168.100.1
    プレフィックス: /23

STEP3) サイト間VPNの設定
    対向IPアドレス: 10.10.10.1
    対向ID: 192.168.100.1
    Pre Shared Secret: unko123
    対向Prefix: 0.0.0.0/0
    ローカルPrefix: 192.168.100.0/23

STEP4) 「反映」を行う

RTX-1210側の設定を行う

【設定前提情報】
■RTX-1210ネットワーク情報
Global-IP:  10.10.10.1
LAN-IP: 172.16.100.1 (NetworkAddress: 172.16.100.0/23)
■さくらクラウド VPC(サイト間VPN設定情報)
Global-IP: 20.20.20.1
対向IPアドレス: 10.10.10.1
対向ID: 192.168.100.1
Pre Shared Secret: unko123
対向Prefix: 0.0.0.0/0
ローカルPrefix: 192.168.100.0/23

【手順】

★RTX-1210側への設定手順
参考: https://knowledge.sakura.ad.jp/7051/

1) RTX-1210のGUIツールにて、拠点間VPNの設定を行う。 (簡単設定→VPN→拠点間接続)
 接続種別の選択: IPSec
 ネットワーク環境: 自分側と接続先の両方とも固定のグローバルアドレスまたはネットボランチDNSホスト名を持っている
 自分側の設定(設定名): SAKURA VPN
 接続先の情報(接続先のホスト名またはIPアドレス): 10.10.10.1
接続先と合わせる設定(認証鍵 (pre-shared key)): unko123
接続先と合わせる設定(認証アルゴリズム): HMAC-SHA
接続先と合わせる設定(暗号アルゴリズム): AES-CBC
 経路に関する設定: 接続先のLAN側のアドレス
192.168.100.0 / 255.255.254.0(23bit)
10.8.0.0 / 255.255.254.0(24bit)
2) CONFIGを取得して、「description tunnel “SAKURA VPN”」の設定部分を探して、設定情報を変更する

※例えば、

であった場合、以下のような設定情報を作成。

これを、RTX-1210の「コマンド実行」で実行する。

以上

C#でWOL(Wake-on-LAN)

福岡の香月です。

コロナ対応で世の中はリモートワークが進んでいるようです。中程度スペックの中古PCもたくさん売れているようで、在庫が少なくなっているようですね。

自宅作業する場合、会社のPCにリモートデスクトップでつないで作業することも多いと思いますが、気付いたらPCがシャットダウンしていることがあります。間違って電源切ったとか、夜中にWindows Updateが動いたとか。

そんな時はWOL(Wake-on-LAN)ですが、私はこれについて知識が無かったので調べがてらC#プログラムのWOLツールを作ってみました。プラットフォームは.Net Core 3.1です。
以下全文です。どん!

[/crayon]

特徴

  • マジックパケットを飛ばします。マジックパケットとは…
    • UDPで送信するパケット
    • 先頭6バイトに{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
    • 続けて対象PCのmacアドレスを16回
    • 合わせて102バイトのパケットとなる。
  • exeと同じ名前のiniファイルを設定ファイルとして読み込む
  • 設定ファイルにて以下を設定
    • host=対象PCのIPアドレス
    • post=UDPポート(ルータが許可したポートであれば何でもOK)
    • macアドレス=対象PCのmacアドレス
  • エラーが発生した場合はコンソール上にエラーを表示

プログラムは案外簡単でびっくりしました。
それよりもWOLが使える環境の設定が大変そうですね。BIOS、ネットワークカード、Windowsの設定など、情報はぐぐればいろいろ出てきますので一度お試しあれ。

Swagger-PHPでOA\PathItem()エラー

福岡拠点の野田です。
OpenAPI(Swagger)の仕様書を使っていますか?

PHPでは、アノテーションでOpenAPIを定義できるSwagger-PHPというものがあります。使うためには以下を実行します。

[/crayon]

対象のコントローラーを指定するとアノテーションで記載したコメントがAPI仕様書になるという素晴らしいライブラリです。swagger.ymlの書き出し方は、以下。

[/crayon]

ここで少しはまりどころがあります。
OA\Infoを定義したクラスには必ずOA\GetやOA\PutといったAPIをセットで定義しなければなりません。それをしないと以下のエラーで怒られます。

[/crayon]

ちょー分かりにくいエラーなので、私もはまりました。そんなときは汎用エラーレスポンスでも定義してしのぎましょう。

[/crayon]

これはライブラリ側でなんとかしてほしかったところではありますが、めげずにswaggerを使っていきましょう。

それでは、また!