外からTermiusで自宅UbuntuにSSH接続するまで【超ていねい完全ガイド】

本記事は、個人情報を出さないように配慮して記述する。
以降、ドメイン名は example.com、サーバーのローカルIPは 192.168.2.100、ユーザー名は ubuntu として解説する。実際の値に置き換えて使う。


ゴール

  • iPhone/PCの Termius から、外部ネットワーク経由で自宅の Ubuntuサーバー にSSH接続できるようにする。
  • ルーターは ELECOM WRC-2533GST2 を想定。
  • ポート22 を使った最もシンプルな構成を基本に、DDNS(MyDNS)を併用する構成も解説。
  • セキュリティとトラブル対処までまとめる。

全体像(まず全手順を一望)

  1. Ubuntu側
    • OpenSSH 有効化
    • UFW(使っていれば)で22/tcp許可
    • サーバーの NICのMACアドレス確認(DHCP予約で使う)
  2. ルーター(WRC-2533GST2)
    • DHCP固定割り当て(予約)192.168.2.100 を常にサーバーへ
    • ポートフォワーディング:外部 22 → 内部 192.168.2.100:22 を有効化
  3. DNS / DDNS(回線が動的IPなら特に重要)
    • すでに example.com が自宅回線のグローバルIPを指しているなら追加作業なし
    • 変動で切れるのを避けたいなら MyDNS + CNAME(ssh.example.comyourhost.mydns.jp が安全
  4. Termius
    • ホストを作成(Address=example.com, Port=22, User=ubuntu
    • 推奨:公開鍵認証に切り替え
  5. 接続テスト & トラブル対応
    • まずLAN内 → 次にモバイル回線から → ダメならチェックリストで切り分け

1. Ubuntu サーバーの準備

1-1. OpenSSH を入れて起動

sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
sudo systemctl status ssh   # active (running) になっていること

1-2. UFW(使っている場合)

sudo ufw allow 22/tcp
sudo ufw enable        # すでに有効なら不要
sudo ufw status        # 22/tcp ALLOW が並んでいること

1-3. 現在使っているインターフェースの確認(有線/無線)

ip route get 8.8.8.8
# 例: "dev wlan0 src 192.168.2.100 ..." なら Wi-Fi(wlan0)を使用中

MACアドレスは:

ip a
# 該当インターフェースの "link/ether xx:xx:xx:xx:xx:xx" がMAC

DHCP固定割り当てでこのMACを使う。


2. ルーター(WRC-2533GST2)の設定

2-1. DHCP固定割り当て(予約)

  1. ブラウザでルーター管理画面(例:http://192.168.2.1)にログイン
  2. 詳細設定モード → LAN設定DHCPサーバー設定
  3. **固定割当(予約)**を有効化してエントリ追加:
    • MACアドレス:サーバーのNIC(有線ならeth0、Wi-Fiならwlan0等)のMAC
    • IPアドレス:192.168.2.100(例)
    • ホスト名:任意
  4. 保存 → 反映(必要なら再起動)

目的:サーバーが再起動しても 常に同じローカルIP を使えるようにする。

2-2. ポートフォワーディング(NAT)

  1. 詳細設定 → ポートフォワーディング
  2. 画面が「単一ポート転送」の簡易フォームなら、以下を追加:
    • 有効:ON
    • ローカルIPアドレス192.168.2.100
    • タイプtcp
    • ポート22
    • コメント:SSH(任意)
      → 追加 → 適用

画面仕様上「外部→内部で番号を変換できない」場合がある。今回はサーバーも外部も22固定なので問題ない。


3. DNS / DDNS の考え方と実装

3-1. すでに example.com が自宅IPを指している場合

  • そのまま SSHも example.com に接続 すればよい。
  • ただし 動的IP回線 だと、IPが変わったタイミングで繋がらなくなる。

3-2. 動的IP回線で切断を避けたい(おすすめ構成)

  • MyDNSで yourhost.mydns.jp を取得(Ubuntuに ddclient を入れて自動更新)
  • ドメイン管理(レジストラ)のDNSで CNAME を設定:
    • ssh.example.com CNAME yourhost.mydns.jp.
  • 以後のSSHは ssh.example.com を使う: ssh ubuntu@ssh.example.com # デフォルト22番

メリット:Webの www.example.com 等の既存設定に影響を与えず、SSHだけ常に最新IPに追随できる。

3-3. MyDNSをゾーン管理者にする(ドメイン全体を動的化)

  • レジストラ側の ネームサーバー(NS)を ns0.mydns.jp / ns1.mydns.jp に切替
  • ddclientexample.com を直接更新
  • ドメイン全体が動的IPに追随する(WebもSSHも)
  • 既存レコードも MyDNS側に再作成が必要になる点に注意

3-4. ddclient の設定例(Ubuntu)

sudo apt install -y ddclient
sudo nano /etc/ddclient.conf

例(MyDNS):

protocol=mydns
use=web, web=checkip.amazonaws.com/, web-skip='Current IP Address:'
server=www.mydns.jp
login=YOUR_MYDNS_ID
password='YOUR_MYDNS_PASSWORD'
yourhost.mydns.jp

サービス起動:

sudo systemctl enable ddclient
sudo systemctl restart ddclient
sudo systemctl status ddclient

4. Termius の設定

4-1. ホスト登録(パスワード方式でもまずはOK)

  • Label:任意(例:Ubuntu Server)
  • Addressexample.com(または ssh.example.com
  • Port22
  • Usernameubuntu
  • Password:初期はパスワードでも可(のちに鍵認証へ)

4-2. 公開鍵認証(推奨)

  1. Termius → Keychain鍵ペアを生成(New Key → Generate)
  2. 公開鍵をコピー → サーバーに登録: mkdir -p ~/.ssh chmod 700 ~/.ssh nano ~/.ssh/authorized_keys # 公開鍵をペースト chmod 600 ~/.ssh/authorized_keys
  3. Termiusのホスト設定 → SSH → Key に生成した鍵を紐付け
  4. 将来的には /etc/ssh/sshd_config でパスワードログイン無効も可: PasswordAuthentication no 変更時は別セッションを開いたまま sudo systemctl restart ssh で適用(閉め出し防止)

5. 接続テストの順番

  1. LAN内から(同一Wi-Fi) ssh ubuntu@192.168.2.100
  2. モバイル回線から(NATループバック不安定対策) ssh ubuntu@example.com 既定で22なので -p は不要(2222等を使うときのみ -p

6. 困ったときのチェックリスト(確実に直る順)

  1. SSHデーモン起動 sudo systemctl status ssh # active (running)?
  2. UFW で 22/tcp 許可済みか sudo ufw status
  3. LAN内接続 は通るか ssh ubuntu@192.168.2.100
  4. ポートフォワーディング 正しいか
    • 宛先IP:192.168.2.100
    • プロトコル:TCP
    • ポート:22
    • 有効になっているか
  5. DNSが今の回線を指しているか dig example.com +short curl ifconfig.me # 両者が一致していればOK
  6. CGNAT / ISP制限 の疑い
    • 到達すらしない(タイムアウト):CGNATの可能性
    • 回避策:固定IP/IPv4オプション、Cloudflare Tunnel / Tailscale / Zerotier の検討

「Connection refused」は「宛先には届いたが拒否された」=SSHが停止/拒否のサイン。
「タイムアウト」は「届いていない」=ルーター/ISP側の問題のサイン。


7. セキュリティ強化のベストプラクティス

  • 公開鍵認証(パスワード無効化)
  • fail2ban で総当たり防御 sudo apt install -y fail2ban
  • 必要なら ポート変更(外部だけ変えるケースも多い)
    • 例:外部2222 → 内部22(ルーターで変換)
    • 接続:ssh -p 2222 ubuntu@example.com
  • 定期アップデートバックアップ

8. 例:運用パターン早見表

回線DNS 方式接続先(Termius Address)備考
固定IPAレコード固定example.com変更なしで安定
動的IP(既存運用を変えたくない)CNAMEssh.example.comyourhost.mydns.jpssh.example.comWeb等に非干渉でSSHだけ動的追随
動的IP(ドメイン丸ごと動的化)NSをMyDNSへexample.com既存レコードはMyDNS側で再設定必須

9. 仕上げの一言

  • 最初は「外部も内部も22」のシンプル構成で確実に接続を通す。
  • 接続が安定したら、鍵認証→パスワード無効→fail2ban の順で硬くする。
  • 回線が 動的IP なら、MyDNS + CNAME でSSH用サブドメインを動的追随させるのが安全・無難。

コメント

タイトルとURLをコピーしました