現在,とある VPN 網に加入しています.その網内では録画サーバを中心に様々なサービスが展開されていますが,現状,家の外からはアクセスができません.
なので,Tailscale を使ってこの問題を解決してみようと思います.
Tailscale とは

Tailscale とは,End-to-End の暗号化通信ができる VPN サービスで,WireGuard ベースの暗号化トンネルを採用しています.
Tailscale をインストールして自身のアカウントでログインすると,100.64.0.0/10 の一意の IP アドレス(Carrier-Grade NAT 用に予約されているアドレス)が割り振られます.この IP アドレスを使って通信を行うことができます.
その際,最初の通信は Tailscale のサーバを経由しますが,その後は P2P 通信に移行するため,低遅延・高速通信ができる場合もあります.
活用例
例えば,自宅にあるデスクトップ PC と持ち運び用のノートパソコンがあるとして,その両方に Tailscale をインストールしておけば,双方がインターネットにさえ繋がっていればどこにいてもまるで同じ LAN に参加しているかのように通信することができ,問題なく RDP やファイル転送などができます.
なので,ゲームをしたいなどの変な用途でもない限り,遠隔地の PC に対してリモートデスクトップを行いたいなら Tailscale & MSRDP が最強です.
今回のユースケース
今回想定している使い方を説明します.
まず,自宅と実家の光回線は IX2215 で収容しており,両方とも VPN 網に加入しています.
この中にファイルサーバを立てるなどすると,別拠点からもアクセスできるわけですが,例えば出先などで,携帯回線のテザリングを使用している場合はアクセスができません.
なので,外からは Tailscale を経由して接続できるようにします.
構築
出先で使用する端末と,網内のどこかしらに設置した中継サーバに,同じアカウントで Tailscale にログインしておく必要があります.
出先側については何も難しいことはないので省略しますが,中継サーバ側は一捻り必要なので,それについて書き残しておきます.
中継サーバの用意
今回は余ってたミニ PC に Ubuntu Server 24.04.2 LTS をインストールして中継サーバとします.
インストール手順については面倒なので省略します.
これ以降,中継サーバ tailscale-endpoint に対してユーザ harusame で SSH して構築していきます.
自身のローカル IP アドレスの確認
IP アドレスを確認します.
harusame@tailscale-endpoint:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 68:1d:ef:2d:5b:bb brd ff:ff:ff:ff:ff:ff
inet 172.22.41.6/24 metric 100 brd 172.22.41.255 scope global dynamic enp2s0
valid_lft 11069sec preferred_lft 11069sec
inet6 2001:f77:e8e0:3e00:6a1d:efff:fe2d:5bbb/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591661sec preferred_lft 604461sec
inet6 fe80::6a1d:efff:fe2d:5bbb/64 scope link
valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether e0:75:26:2d:58:72 brd ff:ff:ff:ff:ff:ff
172.22.41.6/24 でした.これ以降,このアドレスが出てきたらご自身の環境に合わせて読み替えて下さい.
Tailscale クライアントをインストール
上記サイトにある通りですが,基本的には以下のコマンドを実行するだけで終わります.
sudo curl -fsSL https://tailscale.com/install.sh | sh
で,これを実行.
sudo tailscale up
すると,認証用の URL が発行されるので,そちらにアクセスします.
あとは画面の通り進めるだけです.簡単カンタン.
この状態で Admin Console を開くと,今しがたセットアップしたクライアントが追加されているはずです.一応見ておきましょう.
Tailscale 経由の接続用の IP アドレスが払い出されていることを確認し,そこ宛てに ping を飛ばしてみましょう.
サブネットルーティングを有効にした状態で実行
先ほどやった手順で,中継サーバを Tailscale のネットワークに追加することはできましたが,このままではただ中継サーバだけにアクセスできるだけです.
そこで,サブネットルーティングを有効にしてみます.
サブネットルーティングを使うと,中継サーバがちゃんと中継サーバとして動いてくれるようになります.
一旦切断します.
sudo tailscale down
IP forwarding を有効にする必要があるので,やっておきます.
こんな感じ.
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
詳しくは Tailscale Docs をご参照の程.
そして,以下のコマンドを実行します.
sudo tailscale up --accept-routes --advertise-routes=172.22.42.0/24
ネットワークアドレスはご自身の環境に合わせて下さい.例えば,中継サーバのローカル IP アドレスが 192.168.1.x/24 だった場合,ネットワークアドレスは 192.168.2.0/24 です.
以下より Admin Console を開きます.
こんな感じになっていると思いますが,「Subnets」というタグがついていることを確認してください(赤矢印のところ).

青丸のところ,三点リーダをクリックします.
すると,「Edit route settings...」がありますので,そちらをクリック.
先のコマンドで入力したネットワークアドレスのチェックボックスがあるので,そこをクリックして Save してください.
これで完了.
動作確認
確認がてら,携帯回線のテザリング経由で,網内のファイルサーバにアクセスしてみました.
結果,問題なくアクセスできたので,よしとします.