2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2 + Tailscaleでポート競合を解決してSSH直接接続

Last updated at Posted at 2026-01-28

はじめに

以前、「Windows OpenSSHで公開鍵認証が通らない時の解決策」という記事を公開したところ、コメントで以下のアドバイスをいただきました。

mirrored modeを使えばTailscale経由でWSLに直接SSHできるので、そちらの方が楽だと思います。

確かに、Windows経由でWSL2にアクセスするより、直接WSL2へSSH接続できた方がスマートです。早速試してみたところ、予想外のポート競合問題に遭遇したため、解決過程を共有します。

WSL2への最速ワープ!Tailscaleで直接SSH接続

環境

  • OS: Windows 11 + WSL2 (Ubuntu 24.04)
  • Tailscale: インストール済み、mirrored networking mode有効
  • 既存構成: Windows OpenSSH Server(ポート2222で稼働中)

mirrored networking modeとは

WSL2の.wslconfigで以下を設定することで有効化:

[wsl2]
networkingMode=mirrored

このモードでは、WSL2がWindowsのネットワークスタックを共有するため、Tailscale経由でWSL2に直接アクセスできるようになります。

目標

  • WSL2のUbuntu環境へTailscale経由で直接SSH接続
  • Windows経由のプロキシ接続を排除
  • 公開鍵認証による安全な接続

遭遇した問題

エラー: Address already in use

WSL2でOpenSSH Serverを起動しようとしたところ、以下のエラーが発生:

$ sudo service ssh restart
Job for ssh.service failed because the control process exited with error code.

$ systemctl status ssh.service
× ssh.service - OpenBSD Secure Shell server
     Active: failed (Result: exit-code)

 1月 28 00:34:21 hostname sshd[2727]: error: Bind to port 2222 on 0.0.0.0 failed: Address already in use.
 1月 28 00:34:21 hostname sshd[2727]: error: Bind to port 2222 on :: failed: Address already in use.
 1月 28 00:34:21 hostname sshd[2727]: fatal: Cannot bind any address.

原因: mirrored modeでのポート空間共有

Windows PowerShellで確認すると、Windows側のOpenSSH Serverがポート2222を使用中でした:

PS> netstat -ano | findstr :2222
  TCP    0.0.0.0:2222           0.0.0.0:0              LISTENING       58508
  TCP    [::]:2222              [::]:0                 LISTENING       58508

PS> Get-Service sshd
Status   Name               DisplayName
------   ----               -----------
Running  sshd               OpenSSH SSH Server

mirrored modeでは、WindowsとWSL2がポート空間を共有するため、Windows側で2222を使用していると、WSL2側でも同じポートがバインドできません。

解決手順

1. Windows側のSSHサービス停止(一時的)

まず、Windows PowerShell(管理者権限)で:

Stop-Service sshd
Set-Service -Name sshd -StartupType Disabled

停止後も、既存のESTABLISHED接続が残っている場合があります。

2. WSL2の完全再起動

wsl --shutdown

30秒待機してからWSL2を再起動。

3. 必須ディレクトリの作成

WSL2内で、sshdに必要なディレクトリを作成:

sudo mkdir -p /run/sshd
sudo chmod 755 /run/sshd

このディレクトリが存在しないと、以下のエラーが発生します:

$ sudo /usr/sbin/sshd -t -f /etc/ssh/sshd_config
Missing privilege separation directory: /run/sshd

4. ポート番号の変更

Windows側と競合を避けるため、WSL2のSSHポートを2223に変更します。

sudo nano /etc/ssh/sshd_config

以下の行を変更:

- Port 2222
+ Port 2223

5. 公開鍵認証の設定

公開鍵をauthorized_keysに追加:

# 公開鍵をauthorized_keysに追加
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

/etc/ssh/sshd_configで公開鍵認証が有効か確認:

grep -i "PubkeyAuthentication" /etc/ssh/sshd_config
# 出力: PubkeyAuthentication yes

6. SSH サービス再起動

sudo service ssh restart
sudo systemctl status ssh

成功すると以下の表示:

● ssh.service - OpenBSD Secure Shell server
     Active: active (running)
 1月 28 02:00:52 hostname sshd[1925]: Server listening on 0.0.0.0 port 2223.
 1月 28 02:00:52 hostname sshd[1925]: Server listening on :: port 2223.

7. 接続テスト

WSL2内から自己接続

# Tailscale IPを確認
tailscale ip -4
# 例: 100.102.205.45

# 接続テスト
ssh -p 2223 user@100.102.205.45

パスワード入力なしで接続できればOK。

Termiusから接続

  1. Host設定

    • Alias: WSL2 Ubuntu
    • Hostname: <Tailscale IP>
    • Port: 2223
    • Username: user
  2. 秘密鍵のインポート

    # WSL2でクリップボードにコピー
    cat ~/.ssh/id_ed25519 | clip.exe
    

    Termiusで「Keychain」→「Keys」→「Import」→ペースト

  3. 接続
    Host一覧から「WSL2 Ubuntu」をダブルクリック → user@hostname:~$ プロンプトが表示されれば成功。

まとめ

ポート2223運用のメリット

今回、ポート競合を避けるため2223を採用しましたが、これには以下のメリットがあります:

  • セキュリティ向上: 標準ポート(22)や準標準(2222)を避けることで、自動スキャン攻撃のリスクを軽減
  • Windows SSHとの共存: 将来的にWindows側のSSHも再度有効化したい場合に対応可能
  • 動作への影響なし: SSHプロトコルはポート番号に依存しないため、全てのクライアントで問題なく動作

mirrored mode環境での注意点

  • ポート空間が共有される: WindowsとWSL2で同じポートは使用できない
  • Tailscaleの設定: WSL2でもTailscaleデーモンを起動する必要あり
  • ファイアウォール: WSL2側のufwは通常デフォルトで無効

次のステップ

  • VS Code Remote-SSHでの接続設定
  • Claude Code等の開発ツールとの統合
  • ポート転送を活用した開発サーバーへのアクセス

関連記事


コメントやアドバイスをいただいた方に感謝します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?