わんわんバックアップ - 試験運用記録 v1.0
2026年4月29日 試験実施 / katuocloud相乗り型 WGバックアップサービス検証
概要

katuocloud既存インフラに相乗りする形で、遠隔地のWindows PCを暗号化トンネル経由でR640にバックアップするサービスの実証試験を実施した。マンション共有Wi-Fi / iPhoneテザリング環境下で、SSH接続およびファイル取得まで通しで成功。事業のコア機能の動作証明を完了した。

試験結果サマリー
✅ R640側 wg-backup インターフェース構築完了
✅ RTX1300 NAT/フィルタ設定永続化
✅ Cloudflare DNS (backup.k2-o.net) 稼働
✅ WireGuard ハンドシェイク成功(マンションWi-Fi / iPhoneテザリング両対応)
✅ ICMP / TCP双方向疎通
✅ R640→ノートPC SSH鍵認証ログイン成功
✅ scp によるディレクトリ全体取得 1.2秒
✅ バックアップスクリプト (backup-client.sh) 動作確認 / 7世代管理機能
最終構成
[ クライアントPC: DESKTOP-3SL4PU6 (Win10 Pro) ] ├ user: wan6 (administrators) ├ Wi-Fi接続: iPhoneテザリング 172.20.10.2 ├ WGトンネル: 10.220.0.2/32 │ ├ Endpoint: backup.k2-o.net:62001 │ ├ AllowedIPs: 10.220.0.0/24 │ └ MTU: 1100 (CGNAT対応) └ OpenSSH Server: 0.0.0.0:22 LISTEN ↑↓ WG暗号化トンネル ↑↓ MAP-E / IPoE 経由 [ RTX1300 (YAMAHA WANルーター) ] ├ tunnel select 1 配下のフィルタに 400063 追加 ├ NAT: udp 62001 → 192.168.20.21 └ tunnel フィルタ: pass udp 62001 ↓ [ R640 (PowerEdge R640 / Ubuntu 24.04) ] ├ wg-backup (10.220.0.1/24) │ ├ ListenPort: 62001 │ ├ MTU: 1100 │ └ peers: 試験PC 1台登録 ├ iptables 設計 │ ├ INPUT 1: ESTABLISHED,RELATED ACCEPT ← 重要 │ ├ INPUT 2: ICMP ACCEPT │ ├ INPUT 3: TCP/22 ACCEPT │ └ INPUT 4: DROP ├ FORWARD: 本番セグメント (10.200/16, 10.250/24, 10.251/24, 192.168.20/24) DROP ├ rp_filter: wg-backup=0, all=0 (戻りパケット許可) ├ SSH鍵: /root/.ssh/backup-keys/wanwan-backup ├ SSH config: Host wanwan-test-001 で短縮接続 └ バックアップ受信先: /backup/wanwan/{client}/{timestamp}/
構築コマンド全記録
1. R640 wg-backup インターフェース作成
cd /etc/wireguard
umask 077

# 鍵生成
wg genkey | tee wg-backup_private.key | wg pubkey > wg-backup_public.key
wg genkey | tee testpc_private.key | wg pubkey > testpc_public.key
wg genpsk > testpc_psk.key

# 設定ファイル作成
cat > /etc/wireguard/wg-backup.conf << 'EOF'
[Interface]
Address = 10.220.0.1/24
ListenPort = 62001
MTU = 1100
PrivateKey = (server private key)
SaveConfig = false

[Peer]
# test-laptop-001
PublicKey = (testpc public key)
PresharedKey = (testpc psk)
AllowedIPs = 10.220.0.2/32
EOF

chmod 600 /etc/wireguard/wg-backup.conf
chmod 600 /etc/wireguard/*.key
systemctl enable --now wg-quick@wg-backup
2. RTX1300 設定 (重要: tunnel select 必須)
# NAT追加 (62001 → 192.168.20.21)
nat descriptor masquerade static 20000 14 192.168.20.21 udp 62001

# フィルタ定義
ip filter 400063 pass * 192.168.20.21 udp * 62001

# tunnel インターフェースに適用 (← これが必要)
tunnel select 1
ip tunnel secure filter in 400060 400061 400062 400063 400214 400210 400211 400003 400020 400021 400022 400023 400024 400025 400030 400032
tunnel select none
save
3. iptables 設計 (戻りパケット許可が肝)
# wg-backup INPUT (順序重要)
iptables -I INPUT 1 -i wg-backup -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -i wg-backup -p icmp -j ACCEPT
iptables -I INPUT 3 -i wg-backup -p tcp --dport 22 -j ACCEPT
iptables -I INPUT 4 -i wg-backup -j DROP

# wg-backup FORWARD (本番セグメント侵入防止)
iptables -I FORWARD 1 -i wg-backup -d 10.200.0.0/16 -j DROP
iptables -I FORWARD 2 -i wg-backup -d 10.250.0.0/24 -j DROP
iptables -I FORWARD 3 -i wg-backup -d 10.251.0.0/24 -j DROP
iptables -I FORWARD 4 -i wg-backup -d 192.168.20.0/24 -j DROP

# TCPMSS clamp (MTU調整、TCPセッション破損防止)
iptables -I FORWARD -i wg-backup -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -I FORWARD -o wg-backup -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -I OUTPUT  -o wg-backup -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# 永続化
iptables-save > /etc/iptables/rules.v4
4. rp_filter 緩和 (戻りパケット検証無効化)
cat > /etc/sysctl.d/99-wg-backup.conf << 'EOF'
net.ipv4.conf.wg-backup.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
EOF
sysctl -p /etc/sysctl.d/99-wg-backup.conf
5. クライアントPC側 (Win10 Pro) 設定
# OpenSSH Server インストール
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

# Firewall 22番開放
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" `
    -DisplayName "OpenSSH Server (sshd)" `
    -Enabled True -Direction Inbound `
    -Protocol TCP -Action Allow `
    -LocalPort 22 -Profile Any

# WGプロファイル Private
Set-NetConnectionProfile -InterfaceAlias "test-laptop-001" -NetworkCategory Private

# 管理者ユーザー用 authorized_keys (administratorsグループの場合の特殊パス)
$adminKeysFile = "C:\ProgramData\ssh\administrators_authorized_keys"
Add-Content -Path $adminKeysFile -Value $pubKey
icacls.exe $adminKeysFile /inheritance:r
icacls.exe $adminKeysFile /grant "Administrators:F"
icacls.exe $adminKeysFile /grant "SYSTEM:F"
Restart-Service sshd
6. R640 SSH config / バックアップスクリプト
# /root/.ssh/config の先頭に Include を配置 (重要)
sed -i '1i Include /root/.ssh/config.d-wanwan-backup\n' /root/.ssh/config

# /root/.ssh/config.d-wanwan-backup
Host wanwan-test-001
    HostName 10.220.0.2
    User wan6
    Port 22
    IdentityFile /root/.ssh/backup-keys/wanwan-backup
    IdentitiesOnly yes
    PasswordAuthentication no
    StrictHostKeyChecking accept-new
    ServerAliveInterval 30
    ServerAliveCountMax 3

# /opt/wanwan-backup/backup-client.sh
# scp でクライアントPCのファイルを R640 に取得、7世代管理
技術的な発見と解決
課題1: マンションWi-Fi 経由でWGハンドシェイクしない

原因: RTX1300 のフィルタ 400063ip filter で定義しただけでは効かず、tunnel select 1 経由で tunnel インターフェースに適用する必要があった。

解決: tunnel select 1ip tunnel secure filter in ...400063...save で恒久対処完了。

課題2: ハンドシェイク成功後もTCP接続だけタイムアウト

原因: R640側 iptables INPUT に -m state --state RELATED,ESTABLISHED -j ACCEPT ルールがなく、SYN-ACK応答パケットが INPUT 末尾の DROP に弾かれていた。

解決: ESTABLISHED ルールを INPUT 1 (最優先) に挿入。これでR640から開始したTCPセッションの戻りパケットが正しく許可される。

課題3: ICMPは通るがTCPだけRTTが不安定

原因: WG MTU デフォルト 1420 がモバイル網CGNATで断片化を起こす。

解決: MTU = 1100 を両端で設定。TCPMSS clamp も併用。

課題4: SSH config ファイル内 Include 行の位置

原因: OpenSSHは「最初にマッチしたHost定義を採用」する仕様。Include 行を末尾に置くと既存のHost定義に上書きされてしまう。

解決: Include 行を config ファイル先頭に挿入。

課題5: Windowsの管理者ユーザーへの公開鍵登録

原因: Windows OpenSSH Server は administrators グループに属するユーザーの場合、~/.ssh/authorized_keys ではなく C:\ProgramData\ssh\administrators_authorized_keys を参照する仕様(sshd_config の Match Group ブロックで定義)。

解決: 管理者用の専用パスに登録、icacls で権限を SYSTEM:F + Administrators:F + inheritance:r に設定。

動作実績
項目結果備考
WGハンドシェイク成功マンションWi-Fi(JCOM_JJJX) / iPhoneテザリング 両方で確認
ping 10.220.0.1 → 10.220.0.224ms平均iPhoneテザリング経由
ping 1000byte (-s 1000)50ms平均、損失0MTU 1100 での大型パケット試験
SSH鍵認証ログイン成功パスワードレス、ed25519
scp ディレクトリ取得3ファイル/24K/1.2秒サブフォルダ含む構造保持
backup-client.sh 連続実行7世代管理動作古い世代の自動削除
商業展開時に必要な追加実装
A. クライアント自動起動・休止
  • BIOSの「高速スタートアップ」無効化
  • Windows電源プラン: スリープ解除タイマー有効、休止状態を有効化
  • タスクスケジューラ: 毎日02:00、「タスクの実行時にスリープを解除する」有効
  • WireGuardをWindowsサービスとして起動 (起動時自動接続)
  • 保険タスク: PC起動から3時間後に shutdown /h
B. R640側 cron 自動実行
  • cron 02:05 で backup-client.sh 実行
  • 顧客リスト管理 (DB or YAML)
  • 顧客ごとに並列実行 / シリアル実行を選択
  • 完了後 ssh shutdown /h で休止状態へ
C. rsync 化 (差分転送・帯域節約)
  • cwRsync (Cygwin rsync.exe) を rsync.exe + 必要DLL のみ抽出して配布
  • R640 → ノートPC へ rsync -av --link-dest=.. で7世代ハードリンク世代管理
  • 初回フル + 以降差分で帯域大幅節約
D. Telegram監視通知
  • 既存の R640 Telegram監視システムに統合
  • 毎日のバックアップ完了/失敗を通知
  • 1週間バックアップ無しの顧客をエスカレーション
E. R640 鍵管理の厳格化 (重要)
  • 顧客ごとに別の SSH 鍵ペアを発行 (鍵分離)
  • 鍵の保管場所を専用ディレクトリに集約 + パーミッション 600
  • 定期的な鍵ローテーション運用 (3〜6ヶ月)
  • 鍵ファイルのバックアップ (Supermicro NFS暗号化保管)
  • R640 OS自体のセキュリティ更新 / fail2ban / 不正ログイン検知
F. 顧客対応の柔軟性確保

営業上、顧客から「Cドライブ全体をバックアップしてほしい」「障害対応で操作してほしい」という要望は当然発生する。SSH接続後の操作範囲を技術的に過度に制限すると、顧客対応の柔軟性が失われる。R640側の鍵管理を厳格化することで、サーバー側のセキュリティを担保する方針とする。

商業展開ロードマップ
フェーズ内容状態
1. インフラ実証WG / SSH / scp 動作確認完了 (2026/4/29)
2. 自動化実装cron / タスクスケジューラ / S4休止未着手
3. rsync化差分転送 / 7世代ハードリンク未着手
4. 1週間連続運用試験毎晩2時自動実行 / 障害対応訓練未着手
5. 鍵管理強化顧客別鍵分離 / 専用ディレクトリ未着手
6. HP制作katuocloud.com サブセクション or 専用LP未着手
7. プロモ動画制作「乗っ取り再現」コンセプト動画未着手
8. 既存katuocloud顧客への展開+¥3,000/月オプション未着手
9. 一般販売初期¥35,000 + 月額¥6,000〜未着手
想定価格設計
わんわんバックアップ - 標準プラン
初期費用¥35,000〜¥45,000 (PC4台分のセットアップ)
月額基本料¥6,000〜¥7,000 (WG接続 + 500GB保管 + 監視通知)
容量追加+¥2,000/月 (500GB毎)
復旧支援¥10,000/回
イメージバックアップ+¥3,000/月 (週次フル)
katuocloud既存顧客向けオプション
追加料金+¥3,000/月
合計katuocloud基本 ¥3,000 + バックアップ ¥3,000 = 月¥6,000
横展開メリット営業負荷ゼロ、解約率低下、純増収益
プロモーション戦略 (アイデア)
「乗っ取り再現」コンセプト動画

バックアップを業者に任せるとき、最大の懸念は「業者が悪意を持ったら全PCを乗っ取れるのでは?」という点。この懸念を真正面から取り上げ、実際にどれだけ簡単に乗っ取れるかを実演し、「だからこそ信頼できる業者選びが重要」という結論でわんわんバックアップに誘導する動画コンセプト。

  • YouTube向けに10〜15分の解説動画
  • X (Twitter) でハイライト30秒切り抜き
  • かつおくん / わんくん のゆっくり解説スタイル援用
  • 動画内で R640鍵管理の厳格性 をアピール
参照すべき他システム
  • katuocloud本体: wg0 (port 54024) / Nextcloud Docker / FastAPI portal
  • VPS連携: wg2 (port 60050) / Xserver VPS 162.43.8.20
  • ドメイン使い分け: katuocloud.com (販売LP) / k2-o.net (技術ドメイン、契約者のみ) / wan-secure.net (Collabora alias)
  • 監視基盤: Telegram通知システム流用
  • ストレージ: /backup ディレクトリ、容量に応じてSupermicro NFS連携
設定値リファレンス
項目
WGインターフェース名wg-backup
R640側 IP10.220.0.1/24
クライアント割当 IP10.220.0.2 ~ 10.220.0.254
WG ListenPort62001/udp
WG MTU1100
WG エンドポイントbackup.k2-o.net:62001
RTX1300 NATnat 20000 14 192.168.20.21 udp 62001
RTX1300 フィルタ400063 pass * 192.168.20.21 udp * 62001
R640 SSH鍵/root/.ssh/backup-keys/wanwan-backup
R640 SSH config/root/.ssh/config.d-wanwan-backup
R640 バックアップ先/backup/wanwan/{client}/{timestamp}/
R640 スクリプト/opt/wanwan-backup/backup-client.sh
iptables永続化/etc/iptables/rules.v4
sysctl永続化/etc/sysctl.d/99-wg-backup.conf
試験PC情報
項目
機種古いノートPC (Windows再インストール直後)
OSWindows 10 Pro (Build 18363.592)
ホスト名DESKTOP-3SL4PU6
ユーザー名wan6 (administrators)
WG IP10.220.0.2
試験Wi-Fiマンション共有Wi-Fi(JCOM_JJJX) / iPhoneテザリング
WGクライアントWireGuard for Windows (公式)
SSH ServerOpenSSH for Windows 7.7

© 2026 みーきゅんわんわん / katuocloud
試験実施日: 2026年4月29日 / Document version: 1.0

教訓として残すなら

iptables 設計の鉄則:

 
 
iptables
# 必ず最初にこの2行を書く(関係ないFORWARDも一括で生かす)
iptables -A INPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# その後、新規セッション(NEW)を許可するルールを書く
iptables -A INPUT -i wg-backup -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -i wg-backup -p icmp -j ACCEPT
iptables -A INPUT -i wg-backup -j DROP

これが現代 iptables のベストプラクティス。-m state --state NEW--dport 22 に明示的に付けて、戻りパケットは全部 ESTABLISHEDで一括許可。


つまり

「よくある罠」だし、「みーきゅんわんわんのスキルが低いから引っかかった」わけではない。むしろ、新規インターフェースで毎回ESTABLISHEDを書き直す運用してる人なら誰でも引っかかる。

ただし、今回これに気づけたのは大きい。R640に他のWGインターフェースを増やすとき(将来の顧客拡大、別商品立ち上げ等)、必ずこのルールを最初に入れる、という運用知見になった。

ちなみに引き継ぎメモにはこの「教訓」入れとくと良いね。明日以降書き足すなら、こんな段落を追加:

iptables 設計の鉄則 (今回の試験で再認識): 新規インターフェースの INPUT/FORWARD には、まず -m state --state RELATED,ESTABLISHED -j ACCEPT を最優先で配置すること。これがないとサーバー自身がクライアントとして接続を開始した際の戻りパケットが破棄される。本番 wg0/wg1 にはこのルールが入っているが、wg-backup 構築時に失念して詰まった。