VPN
Virtual Private Network (仮想プライベートネットワーク)
- 「遠く離れたネットワークを、あたかも同じネットワークであるかのように接続する技術」
概念
- VPN トンネル (インターネット): 「仮想LANケーブル」
- 実際には公衆インターネットをそのまま使用しますが、暗号化されているため外部からは見えず、
論理的に分離されたプライベートネットワークのように動作します。
- 実際には公衆インターネットをそのまま使用しますが、暗号化されているため外部からは見えず、
- 「中継器」
トンネリング元のパケットを「別のパケットの中に入れる」ことで送信します。
パケットフロー
- 元のパケット
- Src: VPN IP
- VPNネットワークの仮想IPを割り当てます。
- ⚠️ ルーティングテーブルを先に確認し、送信インターフェースに応じて Src IP を割り当てます。
- Dst: 目標サーバー
- Src: VPN IP
- ルーティング規則に従って仮想インターフェース(WireGuard仮想インターフェース) へ送信します。
- パケット全体を暗号化します。
- 新しいIPヘッダーを追加します。
- Src: 自宅のグローバルIP
- Dst: VPNサーバーのグローバルIP
- VPNモジュール(WireGuardカーネルモジュール) が認識しています(設定ファイルから読み込みます)。
- UDPで送信します。
- 元のパケットはTCPであるため、接続を保証します。
- ルーティング規則に従って物理インターフェース(eth0) へ送信します。
- VPNサーバーでパケットを復号化し、元のパケットを抽出します。
- 宛先にTCPで送信します。
- 宛先がVPNネットワークに登録されている内部ネットワークの場合: 元のパケットをそのまま送信します。
- 宛先が外部の場合: SrcのみをVPNサーバーのグローバルIPに変更して送信します(NAT処理)。
プライベートIPアドレス帯
10/8172.16/12:172.16.0.0~172.31.255.255192.168/16
WireGuard
VPNプロトコル
- 暗号化されたトンネルを作成する「ルール」です。
- Network Layer 3 で動作します。
- すべてのネットワークトラフィックを暗号化します。
特徴
- 最新の暗号化を使用します。
- ChaCha20
- ソフトウェアで最適化されています。
- AESよりもモバイルで高速です。
- ハードウェアアクセラレーションは不要です。
- Curve25519
- RSAよりもはるかに高速です。
- 小さなキーサイズ (32バイト) です。
- 量子耐性について研究中です。
- ChaCha20
- キーベース認証
- 事前に交換した公開鍵で、互いに同じ秘密の値を作成し (ECDH計算)、
それを用いてセッションキーを生成して通信します。- ECDH: 私の秘密鍵 × 相手の公開鍵 = 共有秘密
- ハンドシェイクごとに一時キーも作成し、ECDH計算を行います。
- 一時キーも使用して複数の共有秘密を持ち、キーを作成し、
それをさらに加工してセッションキーを生成します。
- 一時キーも使用して複数の共有秘密を持ち、キーを作成し、
- 事前に交換した公開鍵で、互いに同じ秘密の値を作成し (ECDH計算)、