articles VPSとVPNルーターで実現する、外出先からのWSLリモート接続【WireGuard】

VPSとVPNルーターで実現する、外出先からのWSLリモート接続【WireGuard】

2026/4/3 追記

しばらく前にTailscaleに移行してからこの構成は使用していません
でも結果的にTailscaleのベースとなっているWireguardについて学べたのは良かったです

やったこと

自宅のVPNルータと持ち運び用デバイスをwireguradクライアントとして設定。
さくらVPSでレンタルした最小スペックのDebianに、wireguardサーバを建ててクライアントと接続。
自宅LAN内でwslのkali linuxにsshをできるように設定。

使ったもの

TP-Link Omada ギガビット マルチWAN VPNルーター ER605TP-Link Omada ギガビット マルチWAN VPNルーター ER605が無線・有線LANルーターストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。Amazon

さくらVPS

Debian 12 amd64 大阪第3 512MB

料金・仕様|さくらのVPSさくらのVPSの料金プラン・サーバー仕様一覧です。初期費用無料で圧倒的なコストパフォーマンスを実現し、全プランに高速SSDを標準搭載。予算の把握や稟議がスムーズな完全定額制で、Webサイト公開から開発環境まで用途に合わせた最適なスペックを選べます。クラウド連携・拡張性を備えた安心・安全な環境|さくらのVPS

WSL2

KaliLinux(wsl) SSHの接続先

手順

Configの生成

wireguardの設定ファイルを生成してくれるサイトがあります。genkey等で鍵を生成する手間が省けるので便利です。

WireGuard Tools - Configuration Generatorwireguardconfig.com

ここでGenerate Configを行う前に設定する値は、Number of ClientsとClient Allowed IPsとEndpointのみです。

Number of Clientsは接続するクライアントの数を入力してください。
私はスマホ等いろんなデバイスを追加したので、現在のクライアント数は6つくらいになっていますが、最低限VPNルータ用とデバイス用があればいいので2でも大丈夫です。
peerを自分で追記すれば、後からクライアントを追加することも可能です。

Client Allowed IPsは、クライアント側が通信を行う際にどのipアドレス向けのパケットをwireguardに通すかを設定する部分です。
デフォルトの0.0.0.0/0, ::/0では全てのipv4, ipv6の通信をwireguard越しに行います。

この状態でDNSに8.8.8.8などを設定すると完全なVPNが構築できるのですが、私が欲しかったのは自宅のwslへのsshのみで、他の通信は秘匿する必要がないので、ここには10.0.0.0/24, 192.168.0.0/24を設定しました。

Endpointは、レンタルしたVPSのipアドレスまたはホスト名の51820番ポートを入力してください。
(例: ******.vs.sakura.ne.jp:51820)

Generate Configを押すと、下にServer用とClient用の設定ファイルが生成されました。これらをそれぞれVPSとデバイス/ルータに設定していきます。

このページで生成した情報をこの後何度か参照するので、zipのダウンロード等行った上で、ページを閉じないでおくことをお勧めします。

サーバ側の設定

AllowedIPs = 10.0.0.0/24, 192.168.0.0/24

さくらVPSでレンタルしたdebianにssh接続し、wireguardをインストールします。
適宜aptのアップデート等も行ってください。

$ sudo apt install wireguard

インストール後、etc以下にwireguard/wg0.confを作成して編集。

$ sudo vi /etc/wireguard/wg0.conf

基本的には先ほど作成したサーバ用設定をそのまま記述すれば良いです。
ただし、外出先からLANにアクセスできるように、VPNルーター用のPeerのAllowedIPsには192.168.0.0/24を追加します。
これによって、他のピアから送られてきた192.168.0.0/24向けのパケットは全てルーターに流されます。

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = *****
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE


[Peer]
PublicKey = *****
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = *****
AllowedIPs = 10.0.0.3/32, 192.168.0.0/24

...

私は2番目のPeer(つまり、生成した設定ファイルでいうところのClient2)をルーター用に決めました。

設定後、wireguardを起動します

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

起動後、設定変更した時は$ sudo systemctl restart wg-quick@wg0等で再起動が必要です。私はこれを忘れて少し詰まりました。

実行中は

$ sudo wg

で設定を確認できます。

クライアント側の設定

ER605 (VPNルーター)

このルーターのLAN内でhttp://192.168.0.1にアクセスすると、ルーターの設定ページが開けます。

VPNの項目を開いて、wireguardの設定を行います。

ルーター用として決めたClient設定ファイルを用意して、設定を書き写していきます。

wireguardの方には、設定ファイルの[Interface]部分を記入してください。

MTUは転送できるパケットのサイズなのでデフォルトのままで大丈夫です。Nameは自分でわかりやすい名前を決めてください

Peerには設定ファイルの[Peer]部分を記入してください

ここで、トンネル越しにルーターへ送られてくるパケットの送信元は全て10.0.0.0/24に含まれており、192.168.0.0/24宛のパケットを外部に送る必要もないので、Allowed Adressは10.0.0.0/24のみで大丈夫です。

AllowedIPsについてはこちらの記事がわかりやすかったです

WireGuardのAllowed IPsの設定についての補足 | ネットワークとともに前回、DD-WRT上でWireGuardトンネルを有効にする記事を書きました。OpenVPNからWireguardに乗り換えこのなかで「Allowed IPs」の設定がいまいち理解できていなかったのですが、CodeBlue 2016で開発者...ネットワークとともに

デバイス

私はmacにGUIクライアントツールを入れました。各種OSに対応しています。

Installation - WireGuardwireguard.com

また、iOS、Android向けクライアントアプリもアプリストアから取得できます。

「トンネルを追加」から設定内容のコピペを行うか、設定ファイルのインポートで簡単に設定できます。

モバイル向けアプリではQRコードの読み込みでも設定できるはずです。

ssh

ここまでの内容で、192.168.0.0/24へのアクセスがトンネル越しにルーターまで伝わるようになりました。

ここから、wslでインストールしたkali linuxにssh接続を行えるようにする...のですが、具体的にwslにsshする方法はたくさんの方が書かれているのでそちらにお任せします。投げやりですみません

この辺りの記事を参考にした覚えがあります。(曖昧)

WSL2のUbuntuにSSH(公開鍵/秘密鍵)で接続する #Ubuntu - Qiitaはじめに WindowsでLinux環境が欲しい時にはWSL2のUbuntu等を構築する事があると思うが、そのWSL2のUbuntuにSSH接続する部分で躓いた。 (ググって色々出てきたが、それぞれやらなくてもいい事ややらないといけない事が抜けたりしていたので)その解決し...Qiita

おまけ

スマホからssh接続を行うとき、いくつかのsshクライアントアプリを入れて試してみたのですが、Termiusが一番使いやすかったです。

termius.comtermius.com

無料でも十分使える上に、Github Education Packに登録していると、学生は無料でProプラン相当の機能を使えます。おすすめです


この記事は、先月自分が行ったセットアップをconfigと記憶を頼りに思い出しながら書いたものなので、誤りがあるかもしれません。
誤りがあった場合はコメントで教えてください。

最後までお読みいただき、ありがとうございます