【注意事項必見】異なるネットワーク間でVSCodeからSSH接続する方法(Tailscale編)
【注意事項必見】異なるネットワーク間でVSCodeからSSH接続する方法(Tailscale編)
はじめに
自宅や別の拠点から、研究・開発用のPCをリモートで操作したいことはありませんか?
しかし、異なるネットワーク間(例:自宅Wi-Fiと社内LANなど)では、ポート制限やNATの影響で
ssh user@IP のように単純な接続ができないことがよくあります。
私の環境でも、外部ネットワークから研究用PCにSSH接続できない状況がありました。
また、ngrok のような外部中継サービスは、組織のセキュリティポリシーによってブロックされることも多く、接続が安定しませんでした。
そこで今回は、Tailscale を使って「異なるネットワークにあるPC同士を安全かつ簡単に接続する方法」を紹介します。
VSCode の「Remote SSH」機能と組み合わせれば、手元の環境で直接コードを編集・実行できるようになります。
調べて実際にやってみると、
1.想像以上にシンプル
2.LinuxのようなOSに使われるような暗号化を用いており安全に信頼を置けそう
だったため、同じ悩みを持つ人の助けになればと思い、この記事をまとめました。
⚠️ 重要(必ずお読みください)
本記事は 技術的な手順の解説 を目的としています。
所属する組織や企業のネットワークポリシーによっては、外部ネットワークからのリモート接続が制限されている場合があります。
実施前に 情報システム担当者や管理者に事前相談・許可を取得してください。許可なく実行した場合の結果について、筆者は一切の責任を負いかねます。
また、筆者はセキュリティの専門家ではないため、通信の安全性や最新情報はご自身で確認しながらご利用ください。
セキュリティ対策や機密情報の取り扱いについては、利用者ご自身の責任で行ってください。
接続方法
1. Tailscaleとは?
Tailscale は、VPNのように見えるけれど設定が非常に簡単なツールです。
内部的には WireGuard を利用しており、「同じアカウントでログインした端末同士を仮想的にLAN接続」してくれます。
つまり、異なるネットワークにあるPC間に**安全な専用トンネル(暗号化通信経路)**を自動で構築してくれるわけです。
Tailscale は基本的に端末間で直接通信(P2P接続)を行うため、第三者のサーバーを経由せずに済むのが利点です。
ただしネットワーク環境によっては、中継サーバー(DERP)を経由する場合もあります。
いずれの場合も通信内容は暗号化されるため、第三者からは読み取れません。
また、Tailscale は オープンソース 化されており、研究者や開発者によって脆弱性が発見されると迅速に修正が行われます。
一方で、公開ソースコードを悪用して脆弱性を突こうとする攻撃者も存在し得るため、常に最新バージョンにアップデートして利用することが重要です。
2. 手元PC(接続する側)の設定
✅ Windowsの場合
- Tailscale公式サイト から Windows 版をダウンロード
- インストール後、「Sign in」ボタンからログイン
- 接続が「Connected」になればOK
✅ macOS / Linuxの場合
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
ブラウザが開くので、Tailscaleアカウントでログインします。
3. 接続される側PC(リモート側)の設定
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh
ブラウザが開くので、接続元と同じアカウントでログインします。
※
--sshオプションを付けることが重要です。手順②とはここが異なります。
ログイン後、状態を確認します:
tailscale status
出力例:
100.64.10.23 dev-server01 user@ linux active; direct
この場合、100.64.10.23 が仮想IP、dev-server01 がホスト名です。
※これは例なので、ご自身の環境とは異なります。
4. SSH接続の確認(ターミナル)
接続元PCから以下のように接続できます:
ssh <リモートのユーザー名>@100.64.10.23
たとえば、リモート側で whoami を実行してユーザー名が ubuntu なら:
ssh ubuntu@100.64.10.23
5. VSCodeでの接続設定
ここまでできれば、VSCodeの「Remote SSH」機能で簡単にリモート開発が可能です。
~/.ssh/config に以下のように設定を追加しておきましょう。
Windowsの場合(C:\Users\<ユーザー名>\.ssh\config)
Host remote-pc
HostName 100.64.10.23
User ubuntu
IdentityFile C:\Users\<ユーザー名>\.ssh\id_ed25519
ServerAliveInterval 30
ServerAliveCountMax 5
mac / Linuxの場合(~/.ssh/config)
Host remote-pc
HostName 100.64.10.23
User ubuntu
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
ServerAliveCountMax 5
VSCodeで Remote-SSH: Connect to Host... → remote-pc を選べば接続完了です。
各項目の意味を以下に示します。
| 設定項目 | 説明 | 例 | 備考・補足 |
|---|---|---|---|
| Host | 接続設定の「名前(エイリアス)」 | remote-pc |
VSCodeやssh remote-pcでこの名前を指定して接続できる。複数サーバーをまとめる際に便利。 |
| HostName | 接続先ホストのIPアドレスまたはドメイン名 | 100.64.10.23 |
Tailscaleで割り当てられる仮想IPやホスト名を指定。 |
| User | SSH接続に使用するリモートPC側のユーザー名 | ubuntu |
リモート側で whoami を実行して確認できる。 |
| IdentityFile | SSH認証に使う秘密鍵ファイルのパス |
C:\Users\<ユーザー名>\.ssh\id_ed25519 または ~/.ssh/id_ed25519
|
どの秘密鍵を使うかを指定する。鍵を明示すると、複数環境を安全に使い分けられる。 |
| ServerAliveInterval | クライアントがサーバーに送る生存確認(keep-alive)信号の間隔(秒) | 30 |
通信が途切れにくくなる設定。ネットワークが不安定な場合に有効。 |
| ServerAliveCountMax | 上記の生存確認で応答がなかった場合の最大許容回数 | 5 |
30秒×5回=約150秒応答なしで切断。接続フリーズを防ぐ。 |
6. 接続できないときのチェックポイント
| 症状 | 対処法 |
|---|---|
Permission denied |
リモートPCに公開鍵が登録されているか確認 |
tailscale: failed to look up local user |
SSHのユーザー名が正しいか確認(whoami) |
| 接続が途切れる |
ServerAliveInterval を設定 or tailscale ping で確認 |
| IPでつながるがホスト名でつながらない | MagicDNSが無効 → IP指定でOK |
セキュリティに関する注意
Tailscaleは安全設計のツールですが、使い方次第ではリスクもあります。
以下の点には特に注意してください。
- 🔒 ログインURL(例:
https://login.tailscale.com/a/...)は絶対に共有しない。
これは一時的な認証トークンです。第三者に使われると不正登録の恐れがあります。 - 🧑💻 Tailscaleアカウントを適切に管理する。
同じアカウントでログインした端末はすべてVPN内で可視化されます。
不要な端末は早めに削除しましょう。 - 🏢🏫 組織やネットワークのポリシーを確認する。
一部の大学・企業では、外部VPNやリモート接続ツールの利用が制限されています。 - 🔐 公開鍵認証を使う。
パスワードログインよりも安全で、自動化にも適しています。 - 📁 機密データや個人情報を扱うPCでは慎重に運用する。
おわりに
Tailscaleを使えば、面倒なポート開放やVPN構築なしで、異なるネットワーク間でも安全にSSH接続が可能になります。
特に VSCode の Remote SSH と組み合わせると、まるでリモートPCの前にいるような感覚で作業ができます。
🔒 ただしもう一度:
組織やネットワークの規約を確認したうえで、自己責任で利用してください。
最後に、この記事の内容は筆者の理解に基づいて整理したものです。
もし間違いや補足すべき点があれば、ぜひコメントで教えてください!
みなさんの知見を共有しながら、より安全で正確な情報にアップデートしていければ嬉しいです 🙏
Discussion