Tailscaleで作るリモート開発環境構築ガイド
はじめに
グローバルIPが割り当てられない環境(マンション, 職場, 研究室)にある自宅のWindowsマシンに、出先のノートPCからSSHアクセスしてリモート開発できる環境を作りたい。しかし、グローバルIPがないとLAN外から接続できませんね。
そこで、この記事では、VPNを構築して出先から自宅のWindowsに接続する方法を紹介します。
特に、WSL2はWindowsでの開発環境として非常に便利であり、本記事ではWSL2へのリモートアクセスを主な目的としてVPN環境を構築します。WSL2に構築した機械学習サーバーへの接続などに応用できます。
VPNの構築にはOpenVPNやWireGuardなどの選択肢がありますが、本記事ではTailscaleを使って最小限の手順でVPN環境を構築します。
イメージ図
Tailscaleにデバイスを登録すると、自動でVPNを貼ってくれます。
しかも可能ならばp2p接続を張ってくれます。
構築手順
Tailscaleに登録
-
Tailscaleにアクセスしアカウントを作りましょう。


-
各デバイスにTailscaleのローカルソフトをインストールします。
今回の用途ではWindowsデスクトップとノートPCにそれぞれインストールして下さい。

-
無事にインストールが完了すれば、これでVPN構築完了です。

Windows11にSSHサーバーを建てる
Windows11で下記コマンドを実行し、SSHサーバーを建てます。
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
これでノートPCからWindows11にSSHアクセスできるようになってます
ssh <usename>@<tailscaleで振られたアドレス>
WSLにSSHサーバーを建てる
WSL2で下記コマンドを実行します。Windows11側のSSHサーバーとポートが被らないように、今回は50022番ポートでSSHサーバーを建てます。
sudo apt install openssh-server
sudo systemctl enable ssh
sudo ssh-keygen -A
sudo sed -i -e 's/^#Port 22/Port 50022/' /etc/ssh/sshd_config
sudo sed -i -e 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl start ssh
これでノートPCからWSL2にSSHアクセスできます
# まずWindows11にSSH
ssh <usename>@<tailscaleで振られたアドレス>
# 接続後にWSL2にSSH
ssh <usename>@127.0.0.1 -p 50022
.ssh/configを設定し簡単にアクセス出来るようにしよう
ノートPCの.ssh/configを下記のように設定すれば、多段SSHが簡単にできます
Host home-win11
HostName <tailscaleで振られたアドレス>
User <username>
Host home-wsl
HostName localhost
Port 50022
User <username>
ProxyJump home-win11
下記コマンドでWSL2にSSHアクセスできます
ssh home-wsl
公開鍵を登録
公開鍵を登録しパスワード入力不要でSSHできるようにします。
Windows11に公開鍵登録
scp ~/.ssh/id_ed25519.pub home-win11:C:\\ProgramData\\ssh\\administrators_authorized_keys
ssh home-win11 icacls.exe C:\\ProgramData\\ssh\\administrators_authorized_keys /inheritance:r /grant Administrators:F /grant SYSTEM:F
WSL2に公開鍵登録
ssh-copy-id home-wsl
おわりに
Tailscaleを使用したリモート開発環境構築は以上になります。
Tailscaleを使うと驚くほど簡単に設定できますね。
Discussion