VPNとは何か
1. VPNとは何か
本章では、VPNにおける存在意義についてを述べる。
1.1 通信接続問題(NAT/NAPT Traversal)
1.1.1 NAT/NAPTの必要性
wip
1.1.2 NAT/NAPTによる通信接続問題
通常のネットワークでは、IPアドレスの都合によりLANとWANが分かれており、その間でNAT/NAPTが調整されています。IPv4アドレスの枯渇問題に対処するための対処療法が行われていますが、これにより接続性に問題が生じています。
具体的な問題は次のようになります:
相手側にはグローバルIPアドレスしか見えず、その下に複数のデバイスが存在するため、グローバルIPアドレスに固有のデバイスに対して外部からの通信が開始できません。例えば、自宅のサーバにアクセスしたい場合でも、学校や会社、カフェからSSH接続ができないことがあります。また、WebサーバやJava版Minecraftサーバを立てても、友達やインターネットのユーザーからの外部アクセスができないことがあります。
ルータの設定でNAPTテーブルを操作し、ポート開放を行えば接続は可能になりますが、これは手間がかかり、セキュリティのレベルが低くなります。また、マンションのインターネット設定や管理者によってルータが管理されている場合、ユーザーがNAPTを操作できないこともあります。
IPv6は一意のデバイスを特定し、通信を開始できるため、この問題を解決できますが、IPv4に比べて一般的には広く使用されていません。
このような問題を解決するためには、NAPTテーブルを操作せずに直接通信できる仕組みが必要です。
1.2 通信暗号化問題
通常の通信の場合、パケットの内容が見えてしまい、情報漏洩のリスクが存在します。具体的な事例として、Free WiFiを利用してhttp通信を行う際、パケットの内容が暗号化されていないため、wiresharkなどの監視ツールを使用して盗聴される可能性があります。
専用線を使用すれば、外部からの盗聴を防ぐことができ、セキュリティ的にも安全性が向上します。ただし、専用線を導入するには高額なコストがかかり、現実的ではありません。このアプローチは主に政府などが採用すべきものであり、個人が利用するべき方法ではありません。
代わりに、http、https、sshなどの接続方法に関係なく、通信内容を暗号化し、論理的な専用線のようにセキュアな通信環境を提供したいという要求があります。
1.3 通信接続問題と通信暗号化問題の解決策
昨今では上記に挙げられた問題を解決するべく、VPN(Virtual Private Network)と呼ばれるアプローチによって解決を行っている。VPNを使うことによって、セキュアで外部ネットワークからでも安全に固有デバイスに対してアクセス出来るようにしている。
2. 接続方式におけるVPNの種類
世の中のVPNという用語が一般化されているが、さまざまな意味で使用されており、区別が曖昧になることが挙げられる。本章では、VPNの種類についてを述べ、呼称の区別を明らかにする。
2.1 インターネットVPN接続
今いるネットワークから違うネットワークのデバイス群にインターネットを利用してアクセスしたい場合が「インターネットVPN接続」。通信接続問題と通信暗号化問題を解決したい問題に対して解決する。このアプローチによって、相手先のサーバにアクセスする際にNAT/NAPTを意識せずともアクセスできるようにする。
インターネットVPN接続といっても、ノード間接続、ノードからLAN内接続(リモートアクセス)、LANとLAN接続(拠点間)の3種類に分かれる。それぞれどういう意味かを下記に示す。
2.1.1 ノード間接続VPN
1対1で接続したい場合においてこの語を指す。例えば、カフェに居る自分のノートパソコンから自宅のサーバに対してssh接続をする際にVPN使って直接通信接続を行うことを言う。固有のデバイスが決まっている場合に利用する。
2.1.2 リモートアクセスVPN
1対多で接続したい場合においてこの語を指す。例えば、カフェに居る自分のノートパソコンをあたかも自宅ネットワークに居るように仮想的に接続することを言う。このアプローチによって、固有のデバイスではなくLAN内の様々なデバイスに対して接続を行える。
2.1.3拠点間VPN
多対多で接続したい場合においてこの語を指す。例えば、自宅のネットワークと実家のネットワークを相互にVPN接続することを言う。このアプローチによって、自宅から実家のLAN内の様々なデバイスに対して接続を行えるし、逆も可能とする。
2.2 IP-VPN
wip
2.3 VPNプロキシ
今いるネットワークの通信内容を見られる可能性があるので、外部のプロキシサーバまでをVPNで暗号化させて、プロキシサーバが代わりにアクセスを代行する場合に用いられるVPN。一般的に言われている広義の「VPN」という語がこれ。通信暗号化問題を解決する手段として使われる。VPN接続とプロキシサーバの複合技術。
通信暗号化を行えるため、プロキシサーバ間までの通信経路において傍受されることない。また、プロキシサーバからのアクセスになるため、宛先のサーバにはプロキシサーバのIPが表示されることになる。つまり、身元を非公開にして安全にインターネットを接続したい時によく利用される。
よく使われるユーズケースは下記が挙げられる。
FreeWiFiのカフェから掲示板に書き込みしたいけど、書き込み内容を他者にバレたくない。
海外VPNプロキシを使って、海外しかアクセスできないサイトにアクセスしたい。
中国からgoogle.comにアクセスしたい。
IPの匿名化して、自宅ネットワークからアクセスしたとは思われないようにしたい。
よく使われるソフトウェア・サービスとしては下記が挙げあれるだろう。
Cloudflare 1.1.1.1 with WARP
Google One VPN
VPN Gate
Project V
3. 通信接続問題を解決する既存技術
wip
3.1 既存技術
3.1.1 UDP Hole Punching
3.1.2 Session Traversal Utilities for NAPT(STUN)
3.1.3 Traversal Using Relays around NAPT(TURN)
3.1.4 Interactive Connectivity Establishment(ICE)
3.1.5 Web RTC
3.1.6 Web socket
3.1.7 Quick UDP Internet Connection
3.1.8 HTTP/3: IETF HTTP over QUIC
3.1.8 TUN/TAP
3.1.9
4. 既存のVPNプロトコル/ソフトウェア
wip
PPTP
SSTP
L2TP / IPSec
vtun
OpenVPN
SSLVPN
SoftEther VPN
tinc
wireguard
wireguard
CYber PHysical Overlay Network over Internet Communication(CYPHONIC)
その他
Piping Server
ngrok
Cloudflare Tunnel
サーバ公開時に利用するもの。ポート開放をしなくとも、名前解決時にVPN接続を行ってくれる。また、IP元を晒さなくてもいいため、Dos攻撃に強い。