松実のStudy Knowledge

Windows 11 + SoftEther VPN Server で自宅 VPN を構築した手順メモ

やりたかったこと

外出先の PC やスマホから自宅ネットワークへ接続できるようにするため、Windows 11 上に SoftEther VPN Server を立てました。 既存の Apache サーバーはそのまま動かしつつ、VPN の入口だけを追加する構成です。

  • 外出先の PC / スマホから自宅ネットワークへ接続したい
  • スマホからも接続したい
  • 通信の出口をできれば自宅回線にしたい
  • 既存の Apache サーバーはそのまま使いたい
  • VPN は SoftEther を使う

※この記事では、IP アドレス、DDNS 名、ユーザー名などの固有情報はマスクしています。

自宅ネットワーク構成

自宅側は、モデム兼ルーターの配下に Apache サーバー、Windows 11 + SoftEther VPN Server、内側ルーターが並ぶ形です。 VPN サーバーは Apache と同じ公開側 LAN に配置しました。

Windows 11 と SoftEther VPN Server を使った自宅 VPN 構成図
[Internet]
    |
[モデム兼ルーター / NAT]
 ├─ [Apacheサーバー]                  192.168.xxx.xxx
 ├─ [Windows 11 + SoftEther VPN Server] 192.168.xxx.xxx
 └─ [内側ルーター]
      └─ [家庭内PCなど]               192.168.xxx.0/24
  • モデムはルーター / NAT 機能付き
  • Apache サーバーは公開側 LAN に配置
  • 家庭内端末は内側ルーター配下
  • VPN サーバーも公開側 LAN に配置

採用した構成

  • VPN サーバー: SoftEther VPN Server
  • 設置先: Windows 11
  • スマホ接続: L2TP/IPsec
  • PC 接続: SoftEther VPN Client
  • 必要に応じて Windows 標準の L2TP/IPsec も利用可能

SoftEther VPN Server を Windows 11 にインストール

Windows 11 に SoftEther VPN Server をインストールし、管理は SoftEther VPN Server Manager から行う構成にしました。 以降の設定も基本的には Server Manager 上で進めています。

SoftEther 側で実施した設定

Virtual Hub を作成

まず VPN 接続を受ける Virtual Hub を作成します。 ここで少し迷ったのは、Server Manager を開いた直後にいきなり Hub の作成画面が出るわけではなく、 先に管理対象の VPN Server へ接続する必要がある点です。

SoftEther VPN Server Manager を起動したら、接続設定一覧で localhost (このサーバー) を選択し、 右下の 接続(C) を押します。

SoftEther VPN Server Manager で localhost を選択して接続する画面

接続後、VPN Server "localhost" の管理画面が開きます。 この画面にある 仮想 HUB の作成(C) を選択して、新しい Virtual Hub を作成します。

SoftEther VPN Server Manager で仮想 HUB の作成を選択する画面

作成時に入力した Virtual Hub 名は、後続のユーザー作成や L2TP/IPsec の Default Virtual HUB 設定で使います。 そのため、後から見ても用途が分かる名前にしておくと管理しやすいです。

  • Virtual Hub 名: HOMEVPN

接続ユーザーを作成

次に接続用ユーザーを作成します。 ここも少し分かりにくく、ユーザー作成はサーバー全体の画面ではなく、作成した Virtual Hub の管理画面から行います。

VPN Server "localhost" の管理画面で HOMEVPN を選択し、 仮想 HUB の管理(A) を押します。 HOMEVPN の管理画面が開いたら、左側の ユーザーの管理(U) を選択します。

SoftEther VPN Server Manager の HOMEVPN 管理画面でユーザーの管理を選択する画面

ユーザー管理画面で新規ユーザーを追加し、パスワード認証を設定しました。 記事ではユーザー名も伏せています。

  • ユーザー名: vpn-user
  • 認証方式: パスワード認証
  • パスワード: 任意の強い文字列

SecureNAT を有効化

最初は簡単に動かすため、HOMEVPN 側で SecureNAT を有効化しました。 これにより VPN クライアントに対して仮想 NAT / DHCP を提供できます。

SecureNAT の設定は、HOMEVPN の管理画面にある 仮想 NAT および仮想 DHCP サーバー機能(V) から行います。 ユーザー管理と同じく、サーバー全体ではなく Virtual Hub 単位の管理画面に入口があります。

SoftEther VPN Server Manager の HOMEVPN 管理画面で仮想 NAT および仮想 DHCP サーバー機能を選択する画面

この画面から SecureNAT を有効化し、必要に応じて仮想 DHCP サーバーの設定を確認します。 まず接続確認を優先する場合は SecureNAT を使うと構成がシンプルになります。

Dynamic DNS を有効化

SoftEther の Dynamic DNS を有効化し、外部から固定名で接続できるようにしました。 実際の DDNS 名は伏せ、記事中では次のように表記します。

Dynamic DNS は Virtual Hub の管理画面ではなく、VPN Server "localhost" の管理画面下部にある ダイナミック DNS 設定 から設定します。

SoftEther VPN Server Manager でダイナミック DNS 設定を選択する画面
vpn-example.softether.net

L2TP/IPsec を有効化

スマホ接続用に L2TP/IPsec を有効化しました。

  • L2TP Server Function: 有効
  • 事前共有鍵 (PSK): 任意の強い文字列
  • Default Virtual HUB: HOMEVPN

実際に Listen しているか確認

Windows PowerShell で SoftEther が待受しているか確認します。

TCP の待受確認

netstat -ano | findstr LISTENING

SoftEther のプロセスが以下の TCP ポートを Listen していることを確認しました。

  • TCP 443
  • TCP 992
  • TCP 1194
  • TCP 5555

PID からプロセス名を確認します。

tasklist /fi "PID eq <PID>"
  • プロセス名: vpnserver_x64

UDP の待受確認

netstat -ano -p UDP | findstr :500
netstat -ano -p UDP | findstr :4500
netstat -ano -p UDP | findstr :1701

L2TP/IPsec 用に以下の UDP ポートを待受していることも確認しました。

  • UDP 500
  • UDP 4500
  • UDP 1701

LAN 内でまず疎通確認

いきなり外部から確認すると切り分けが複雑になるので、先に LAN 内の別端末から SoftEther サーバーへポート疎通確認をしました。

Test-NetConnection 192.168.xxx.xxx -Port 5555
Test-NetConnection 192.168.xxx.xxx -Port 992
Test-NetConnection 192.168.xxx.xxx -Port 443

今回の確認結果は以下です。

  • 5555: True
  • 992: True
  • 443: False(意図的にオフにしたため想定通り)

この時点で、SoftEther 自体は動作しており、Windows Firewall や LAN 内経路が主因ではなさそうだと判断できました。

Windows Defender Firewall 側の確認

Windows Defender Firewall で SoftEther 関連の許可状態を確認しました。

  • SoftEther VPN Server
  • SoftEther VPN Server Manager
  • SoftEther VPN Command-Line Admin Tool

少なくとも Windows OS 側の遮断が主因ではない、とここで整理しました。

Aterm 側のポートマッピング設定

Aterm のポートマッピングで、SoftEther サーバーへ必要なポートを転送しました。 転送先 IP は記事用にマスクしています。

PC 用

  • TCP 5555 → Windows 11 + SoftEther VPN Server
  • TCP 992 → Windows 11 + SoftEther VPN Server

スマホ (L2TP/IPsec) 用

  • UDP 500 → Windows 11 + SoftEther VPN Server
  • UDP 4500 → Windows 11 + SoftEther VPN Server
  • UDP 1701 → Windows 11 + SoftEther VPN Server

Apache 用

  • TCP 443 → Apache サーバー

Apache が既に 443 を使っていたため、SoftEther 側のメイン接続は 5555 / 992 を使う前提にしました。

WAN 側 / DDNS の確認

Aterm 管理画面で WAN 側 IP を確認し、ルーター自身がグローバル IP を持っていることを確認しました。 実際の IP は伏せています。

WAN IP: xxx.xxx.xxx.xxx/xx

次に DDNS の名前解決結果が WAN 側 IP と一致しているか確認しました。

nslookup vpn-example.softether.net

DDNS が正しいグローバル IP を向いており、WAN 側 IP と一致していることを確認できました。

Aterm のパケットフィルタ確認

Aterm の WAN 側 / LAN 側パケットフィルタ設定も確認しました。 以下の SoftEther 用ポートを明示的に落としているルールは見当たりませんでした。

  • TCP 5555
  • TCP 992
  • UDP 500
  • UDP 4500
  • UDP 1701

そのため、パケットフィルタは今回の主因ではないと判断しました。

スマホ接続でハマったポイント

症状

スマホで L2TP/IPsec 接続を試すと「認証に失敗しました」と表示されました。

原因

原因は Default Virtual HUB が未設定だったことです。 スマホの標準 L2TP/IPsec クライアントでは、接続時に Virtual HUB 名を指定できません。

そのため、SoftEther サーバー側で Default Virtual HUB を HOMEVPN に設定しておかないと、どの Hub のユーザーで認証するか決められず、認証失敗になりました。

対応

SoftEther Server Manager の IPsec / L2TP 設定で、Default Virtual HUB を HOMEVPN に設定します。 これでスマホ接続が成功しました。

Default Virtual HUB が必要なケース / 不要なケース

必要なケース

  • iPhone の L2TP/IPsec
  • Android の L2TP/IPsec
  • Windows 標準の L2TP/IPsec

これらはクライアント側で Virtual HUB を指定できないため、Default Virtual HUB が必要です。

不要なケース

SoftEther VPN Client を使う PC では、接続設定の中でホスト名、ポート番号、Virtual HUB 名、ユーザー名、パスワードを指定できます。 そのため Default Virtual HUB に依存しません。

最終的に使った接続方法

スマホ

  • 接続方式: L2TP/IPsec PSK
  • サーバー: vpn-example.softether.net
  • 事前共有鍵: 設定した PSK
  • ユーザー名: vpn-user
  • パスワード: 作成したもの

外部 PC

  • クライアント: SoftEther VPN Client
  • Host: vpn-example.softether.net
  • Port: 5555 または 992
  • Virtual Hub: HOMEVPN
  • User: vpn-user
  • Password: 作成したもの

今回の切り分けで役立った確認ポイント

SoftEther が待受しているか

netstat -ano | findstr LISTENING
netstat -ano -p UDP | findstr :500
netstat -ano -p UDP | findstr :4500
netstat -ano -p UDP | findstr :1701

プロセス確認

tasklist /fi "PID eq <PID>"

LAN 内疎通確認

Test-NetConnection 192.168.xxx.xxx -Port 5555
Test-NetConnection 192.168.xxx.xxx -Port 992

DDNS 確認

nslookup vpn-example.softether.net

ハマりどころまとめ

443 は Apache と競合する

既に Apache が 443 を使っている場合、SoftEther も 443 を使う設計にはしづらくなります。 今回は Apache を 443、SoftEther を 5555 / 992、スマホ用を UDP 500 / 4500 / 1701 に分離しました。

Listen と外部疎通は別問題

Windows 上で SoftEther が待受していても、それだけで外部から接続できるとは限りません。 ルーターのポートマッピング、WAN 側 IP、DDNS、フィルタ設定を別途確認する必要があります。

スマホの認証失敗は Default Virtual HUB 未設定が原因になりやすい

今回の一番のハマりポイントでした。 スマホ標準の L2TP/IPsec では Virtual HUB を指定できないため、SoftEther 側の Default Virtual HUB 設定が重要です。

LAN 内疎通確認はかなり重要

いきなり外部から切り分けると、ルーター、DDNS、Firewall、SoftEther のどこが原因か分かりにくくなります。 まず LAN 内で Test-NetConnection を使うと、確認範囲をかなり絞れます。

結論

今回の構成では、Windows 11 に SoftEther VPN Server を導入し、Aterm で必要ポートを転送し、Apache 用 443 と VPN 用ポートを分離しました。 さらに Dynamic DNS を利用し、スマホの L2TP/IPsec 用に Default Virtual HUB を設定することで、スマホからの接続に成功しました。

特に重要だったのは、SoftEther 自体の待受確認、LAN 内ポート疎通確認、Aterm 側ポートマッピング確認、DDNS と WAN IP の一致確認、そして Default Virtual HUB の設定です。

今後やること候補

  • 外部 PC から SoftEther VPN Client で接続確認
  • 接続後にグローバル IP が自宅回線になっているか確認
  • 内部 LAN へのアクセス範囲を最小限で整理
  • SIP サーバー併設時のポート設計整理