※当サイトの記事には、広告・プロモーションが含まれます。

OpenVPNの環境構築の手順を整理してみる

japan.zdnet.com

 セキュリティ企業Red Canaryは、オープンソースメッセージブローカー「Apache ActiveMQ」に存在する脆弱(ぜいじゃく)性「CVE-2023-46604」を悪用し、クラウド上の「Linux」システムに持続的なアクセスを確保する攻撃者の存在を確認した。ここまでは、よくある悪意ある攻撃の一例に過ぎない。

侵入後に脆弱性をふさいで潜伏--「DripDropper」が示す新たなマルウェアの脅威 - ZDNET Japan

しかし、「DripDropper」が登場すると状況は一変する。このマルウェアは侵入後、自らが利用したセキュリティホールを修正してしまうという異例の挙動を示している。

侵入後に脆弱性をふさいで潜伏--「DripDropper」が示す新たなマルウェアの脅威 - ZDNET Japan

⇧ ただひたすらに、エンジニアの仕事が増えますなぁ...

OpenVPNは2つの通信方式が用意されている

とりあえず、

www.openvpn.jp

⇧ 公式の手順を翻訳しているページがあるのだが、元の公式の手順が酷いのか、手順が非常に分かり辛い...

で、

「ルーティング」と「ブリッジ」のどちらを使うか?

「ルーティング」と「ブリッジ」の違いについてはFAQで、ブリッジの詳細はこちらのページでさらに詳しく説明されていますので、参照してください。

https://www.openvpn.jp/document/how-to/

⇧ とあるのだが、「FAQ」が「404 Page not found」で見当たらない...

ネットの情報を漁っていたところ、

atmarkit.itmedia.co.jp

ルーティングとブリッジ、2つの通信方式

 なお、OpenVPNによる拠点間の接続では、次の2通りの方法が可能です。

https://atmarkit.itmedia.co.jp/flinux/special/openvpn/openvpnb.html

■ルーティング方式

ルーティング方式

 OpenVPNサーバとクライアントには、それぞれ別セグメントのネットワークが割り当てられます。そのためクライアントへデータを転送するには、サーバ側セグメントで経路設定が必要になります。

 ただし、ブロードキャストのような無駄なパケットが転送されないため、ネットワークを効率よく使用できます。またネットワークが別セグメントになるため、アクセス制御を実施しやすいという利点もあります。

https://atmarkit.itmedia.co.jp/flinux/special/openvpn/openvpnb.html

■ブリッジ方式

ブリッジ方式

 OpenVPNサーバとクライアントが同セグメントに仮想的に接続します。そのためブロードキャストパケットや、非TCP/IPパケットもクライアントへ転送されます。

 ブロードキャストのようなクライアントあてではない無駄なパケットも転送されるなど非効率ですが、ルーティング方式のような特別な経路設定を行うことなく、OpenVPNクライアントと疎通が可能です。またネットワークゲームのような特殊なプロトコルや映像配信のようなマルチキャストパケットにも対応します。

https://atmarkit.itmedia.co.jp/flinux/special/openvpn/openvpnb.html

⇧ と説明があった。

まとめると、

  1. ルーティング方式
    1. OpenVPNクライアントはOpenVPN サーバーが用意したセグメントに接続される。
    2. OpenVPN サーバーと同一のLANのセグメントへ接続するには経路設定が必要。
  2. ブリッジ方式
    1. OpenVPNクライアントはOpenVPN サーバーを介してOpenVPN サーバーと同一のLANセグメントに接続される。
    2. OpenVPN サーバーと同一のLANのセグメントへ接続するための経路設定は不要。

⇧ という違いになるようだ。

OpenVPNはクライアントサーバーモデルだが、クロスプラットフォームに対応しているらしい

日本語版の「FAQ(Frequently Asked Questions)」によると、

www.openvpn.jp

OpenVPNはどんなプラットフォームで使用できますか?

OpenVPNの特長の一つはその移植性の高さにあり、さまざまなプラットフォームでOpenVPNが利用できます。WindowsLinuxMacといったPC環境に加え、AndroidiOSでも利用できます。さらに、各プラットフォームとも単一のコードベースからビルドされているため、プラットフォームが異なっていても同様に動作しますし、異なるプラットフォーム間でも接続できます。

https://www.openvpn.jp/faq/

⇧ とあり、「クロスプラットフォーム(cross-platform)」に対応しているらしい。

クロスプラットフォーム(cross-platform)」はというと、

クロスプラットフォームcross-platform)とは、異なるプラットフォーム(例えばPC/AT互換機Macintosh、あるいはWindowsmacOSFreeBSDLinuxなどのように、仕様が全く異なる機械(ハードウェア)またはオペレーティングシステム)上で、同じ仕様のものを動かすことが出来るプログラムソフトウェア)のことを言う。同様の呼称にマルチプラットフォームがある。

クロスプラットフォーム - Wikipedia

⇧ 上記にあるように、異なる「OS(Operation System)」間での動作をサポートしているらしい。

つまり、

  1. クライアント
  2. サーバー

で、別々の「OS(Operation System)」を利用できるということらしい。

なのだが、公式の手順には、同一の「OS(Operation System)」についてしか説明がない...

OpenVPNの環境構築の手順を整理してみる

改めて、

www.openvpn.jp

⇧ 上記の内容を確認した感じ、「プロンプト」による入力が必要になって来るので、

  1. 仮想マシンの構築
  2. OpenVPN 環境の構築

の2工程に分ける必要がありそうだ。

手順を整理してみると、

No 手順概要 作業場所
仮想マシン
(クライアント用)
仮想マシン
(サーバー用)
1 仮想マシンの用意 ※1 - -
2 OpenVPNのインストール ※2
3

認証局(CA)の設置とOpenVPN用証明書と鍵の生成

①マスター認証機関(CA)の証明書と鍵の生成

-
4

認証局(CA)の設置とOpenVPN用証明書と鍵の生成

②サーバー用の証明書と鍵の生成

-
5

認証局(CA)の設置とOpenVPN用証明書と鍵の生成

③クライアント用の証明書と鍵の生成

-
6

認証局(CA)の設置とOpenVPN用証明書と鍵の生成

④Diffie Hellmanパラメータの生成

-
7

認証局(CA)の設置とOpenVPN用証明書と鍵の生成

⑤鍵ファイの確認 & クライアントへ①と③で生成されるファイルをコピー ※3

8

サーバー用/クライアント用の設定ファイルの作成

①サンプル設定ファイルを元に設定ファイルを複製

9

サーバー用/クライアント用の設定ファイルの作成

OpenVPN サーバー設定ファイルの編集

-
10

サーバー用/クライアント用の設定ファイルの作成

OpenVPN クライアント設定ファイルの編集

-
11

VPNの起動と接続テスト

OpenVPN サーバーの起動

-
12

VPNの起動と接続テスト

OpenVPN クライアントの起動

-

※1 サブネットの設定。Virtualbox仮想マシンを用意するのでネットワークアダプターで調整する感じになると思われる。

※2 その他、OpenVPN の依存パッケージもインストールが必要。

※3 以下の仮想マシン(サーバー用)に生成されているファイル群を仮想マシン(クライアント用)の /etc/openvpn/client にコピーする。

  1. ca.crt(認証局証明書)
  2. client*.crt(VPNクライアント用の証明書)
  3. client*.key(VPNクライアント用の秘密鍵

⇧ といった感じになる気がする。

ちなみに、「認証局(CA)」を用意するのは、

www.openvpn.jp

OpenVPNでは、いくつかの認証方法が利用できます。How Toでも一通り説明されていますが、やや難しいので、少しまとめてみたいと思います。

https://www.openvpn.jp/document/authentication-methods/

⇧ 上記で言うところの「2. 証明書認証」の「認証方法」に該当すると思われる。

イメージとしては、

imamura-net.com

⇧ 上記サイト様の図のような情報で認証が行われるようだ。

ちなみに、ネット上で「証明書認証」という用語がヒットしない...

唯一、「Certificate Authentication」という用語が、

www.postgresql.org

⇧「PostgreSQL」のドキュメントでヒットしたのだが、それ以外には、

  1. Client Certificate Authentication
  2. Certificate Based Authentication

とかがヒットするが、結局のところ、正しい用語が分からない...

 

Kubernetes」環境の構築の時も思ったのだが、「インフラレイヤー」周りの構築の手順って、本当に分かり辛いよね...

せめて、手順を実施する作業場所ぐらいは明らかにして欲しいよね...

まぁ、そもそも「ソフトウェアエンジニア」の範疇の作業ではない気がするが...

毎度モヤモヤ感が半端ない…

今回はこのへんで。