<

楕円曲線暗号とIPv6フレッツ網内折り返しを併用したOpenVPN

近年、コロナ禍におけるリモートワーク推進及びネットワークの発達により、様々なVPNの普及が加速しております。 VPNを使用すればリモートにあるパソコンをあたかもその場にいるかのように操作する事ができますので、とても便利な反面、 脆弱性に気づかないで使用していたりするとネットワーク内部に侵入されてしまう危険性もあります。 2021年10月にランサムウェアに感染した徳島の半田病院のケースでも、やはりVPNの脆弱性の存在に気づかなかったという事のようですので、 ハードウェアやルーターのVPNは安全、と過信するのは危険です。むしろハードウェアのVPNの特定の古いファームウェアというのは狙われやすいのではと思います。 ユーザー側も定期的にファームウェアのアップデート作業が必要ですし、そもそもそのハードウェアを作成したベンダーがきちんと脆弱性を塞ぐファームウェアを作成していないというケースもあるようですので、その場合にはどうしようもありません。 そのような環境でVPNをONにしたら、心配で夜も眠れなくなってしまうと思います。

ハードウェアによるVPNの場合、ハードウェアのメーカーがファームウェアを作成してくれるまで待つ必要がありますが、 既存のハードウェアに頼るのではなく、自分でLinuxにソフトウエア的にVPNのシステムを構築してしまえば、 将来もし脆弱性が見つかっても、自分でupdate・upgradeすればすぐに対応できますので、そのような危険性は低下するはずです。 そのように考えまして、VPNの中でも最も安全性の高い、楕円曲線暗号とIPv6フレッツ網内折り返しを併用したOpenVPNをインストールしました。 googleで検索しても同様の内容は見当たりませんので、おそらく皆さんあまり御存知無いのではと思いまして、今回記載する事にしました。 その導入方法の中で、ハマりそうなポイントに絞って記載致します。
既存のNTT東日本or西日本のフレッツ回線同士であれば追加コスト0で、高速な安定したVPNを構築でき、接続するポートは任意に変更する事ができるのが特徴です。 将来もしもOpenSSLに脆弱性が発見された場合でも、OpenVPNは影響を受けにくい設計になっておりますので、とても安全性が高いです。 さらに、仮にOpenVPN自体が影響を受けたと仮定しても、ランダムに設定したIPv6のUDPポートの1つを探し出すのは極めて困難な作業です。
OpenVPNのインストールは、ESXiやNAS上の仮想マシン構築環境の仮想Linuxマシンへの構築が望ましいです。近頃のNASは高性能ですので、仮想マシン構築環境が付いているものも多いですので、手軽で良いと思います。

VPNにも様々な種類があり、OpenVPNは正しく設定すればその中で最も安全性が高いと言われており、 且つ軽量で高速で安定してるのが特徴です。その欠点は、設定がやや煩雑な事かと思います。 OpenVPNの設定で楕円曲線暗号という方法を採用する事により、従来の暗号よりもより強固になり、 且つ軽量に動作します。
仮想Linuxマシンの中に入れて放置するのがおすすめです。
軽いので、NAS上の仮想マシン1コアでも軽快に動作します。 LinuxのCLI版であれば、OpenVPNマシンはメモリ1GBの割当でもOKです。
ルーター内部ではなく仮想マシン上で計算しますので、非力なルーターでも問題無いはずです。
仮想マシンを2台作成し、CAサーバーとOpenVPNサーバーに分けて設定するのがより安全です。 設定が終わった後は、CAサーバーの電源は切ってOKです。
IPv4環境へのインストールに関しての記載は省略します。詳しいインストール方法は、 Ubuntu 20.04でOpenVPNサーバーをセットアップ・設定する方法
が適切に良くまとまっていると思いますので、それに沿ってまずはインストールしましょう。 マニュアル通りにインストールすれば、おそらくここまでは特に問題無いと思います。

IPv6フレッツ網内折り返しとは、NTT東日本・西日本のそれぞれの内部にある、
インターネットに出る前のIPv6の閉鎖したネットワーク網の事です。
インターネットを介さずに通信はその内部で完結しますので、とても高速で、 且つインターネットからのハッキングを受ける事がなく、安全性も優れています。
その理論については、 ソフトイーサのホームページ が詳しいですが、ソフトイーサでの使用方法しか記載がありません。
ソフトイーサは128bit鍵ですので、安全性を考えますとソフトイーサではなくOpenVPNを使用したほうが良いと思います。
必須ではありませんが、ソフトイーサのホームページからIPv6フレッツ網内のドメインの.open.ad.jpの取得も行う事ができますので便利です。

楕円曲線暗号とIPv6フレッツ網内折り返しを併用したOpenVPNは、OpenVPNを上記のIPv6フレッツ網内折り返しで使用するという方法です。 一般的なV6プラスを使用し、MAP-E方式によるトンネリング (IPv4 over IPv6)等を使用している環境でも IPv6フレッツ網内折り返しを使用可能です。 その場合、OpenVPNからはMAP-Eのトンネリング (IPv4 over IPv6) ではなく IPoE方式によるIPv6フレッツ網内折り返しを直接使用し、 OpenVPN内部で独自の(IPv4 over IPv6) を作成する事により、インターネットに出ずに NTT内部の閉鎖網のみで高速なIPv6を使用して、その内部にIPv4のVPNを作成するという方法になります。 回線はIPv6フレッツ網内折り返しを使用しておりますので、高品質・低遅延・高速なIPv4接続を、 既にあるIPv6回線を利用して、追加料金無しで使用できます。 実測値は大体200Mbps程度の実効速度(sequential file)で、pingでの遅延は5msec程度でした。 院内ネットワーク上の仮想マシン操作時のレスポンスは、院内からの操作と、 VPNを経由した自宅からの操作はあまり体感的には違いは感じられません。
V6プラスの場合にはIPアドレスは固定で、割り当てられているポートが決まっておりますので、 その割り当てられている任意のUDPポートの1つにOpenVPNを割り当て使用すればOKです。
openvpnのサーバー側のserver.confを編集し、
port 任意のUDPポート
proto udp
proto udp6
とすれば、インターネットを介したIPv4からの接続待ち受け(proto udp)と同時に、 IPv6フレッツ網内からの接続待ち受け(proto udp6)が同時に可能です。
NTT東日本同士や、NTT西日本同士であれば、上記の
proto udp
を削って、
proto udp6
のみにした方が、セキュリティ上さらに安全です。 その場合でも、OpenVPN内部で独自の(IPv4 over IPv6) が作成されますので、普通にIPv4接続が可能です。


OpenVPNサーバーの設定には大きく分けてルーティングモード(TUN)とブリッジモード(TAP)の2種類があり、可能であればTUNでの接続のほうが安全です。
TUNの場合には以下の設定は不要です。
TAPではネットワークをプロミスキャスモード(Promiscuous Mode)で動作させる必要がありますが、 プロミスキャスモードのネットワークに接続するマシンはOpenVPNサーバーのみにした方が安全です。 以下のいずれの設定でも、OpenVPNサーバー以外のマシンは別のポートに刺すか、別のポートグループに接続しましょう。 もちろんその場合にも、同一のスイッチングハブ or 仮想スイッチを介して、OpenVPNサーバーから別のポートグループへ問題無く接続できます。

・ESXiであればその設定は簡単で、「ネットワーク」「ポートグループの追加」で 「セキュリティ」を「無差別モード」にした新規のポートグループを追加し、それを仮想マシンに割り当てればOKです。

・QNAPのNASの場合の設定は、
ip a
でまずvirtual switchの名前を確認します。例えばqvs0がその名前であった場合、
ip link set qvs0 promisc on
でQNAPのvirtual switchをpromiscuous modeへ変更できます。

・synologyのNASの場合の設定は、
# ifconfig
でまずvirtual switchの名前を確認します。
「UP BROADCAST RUNNING」という項目があればノーマルモードで動作中、
「UP BROADCAST RUNNING PROMISC」という項目があればプロミスキャスモードで動作中です。
例えばovs_eth2がその名前であった場合、
# ifconfig ovs_eth2 promisc
でvirtual switchをpromiscuous modeへ変更できます。
# ifconfig ovs_eth2 -promisc でoffに戻せます。
rootで接続するには、adminのアカウントを有効にしてパスワードを作成し、 adminに属するアカウントからssh接続し、sudo -iコマンドでrootに昇格できます。 設定が終わったらadminのアカウントを無効にしておきましょう。
再起動後にも自動的に有効にしたい場合、
/usr/local/etc/rc.d/
以下に自作スクリプトを作ってpermissionを+xして放り込んでもOKです。例えば、
------ /usr/local/etc/rc.d/promiscon.sh --------
#!/bin/sh
/sbin/ifconfig ovs_eth2 promisc
------------------------------------------------
こんな感じです。

また、TAPの場合には最後にルーターのポート開放に加え、IPの静的経路情報(静的ルーティング)の設定が必要な場合もあります。
クライアントへの払い出しIPアドレスが10.0.1.0/24、
OpenVPNサーバーのIPアドレスが192.168.1.2であれば、
ルーターの設定で、宛先ネットワークを10.0.1.0/24、
ゲートウェイを192.168.1.2
と追加すればOKです。


尚、一般論として、例えVPNを使用しない場合であっても、 ネットワーク回線のIPv6を有効にする場合(v6プラス、DS-Lite等全て含む)には、 ルーターによってその設定方法は様々ですが、インターネット側からのIPv6接続要求が拒否されるようにルーターを正しく設定する事がとても大切です。
例えばYamahaのルーターであれば、「詳細設定」「セキュリティー」「IPフィルター」「IPv6」インターフェースを選択し、「確認」「静的フィルター」の評価順の最後にreject * * * * *とすれば、上位の静的フィルターに一致しない外部からのIPv6パケットは破棄されますので安全です。
恐ろしい事に、デフォルト設定で許可になっているルーターが多いようですので要注意です。 その場合、ガラ空きのIPv6ポートによって院内ネットワークに侵入されてしまう恐れがあります。 それに関しては、IPv6下でFWが有効化されていない意味を考える(2)のページが詳しいです。 また、ルーターに限らず、それぞれの端末毎にも、使用しない余計なポートはIPv4もIPv6も塞いでおいた方が安全です。

以上、何か少しでも皆様のお役に立てる情報がありましたら有り難いです。

2022年7月記載