WireGuard VPN 構成 — maguro 終端
// WIREGUARD — R640 → maguro 移植完了 (2026-05-14) / 最終更新: 2026-05-14
稼働中 WireGuard 3 インターフェース全部 maguro で終端 / 旧 R640 wg0/wg1/wg2 は退避済
大改定 (2026-05-13〜14)
2026-05-14 に WireGuard 一式を R640 から maguro へ移植。 同時に IF 名を意味のある名前にリネーム。 RTX1300 NAT 先も切替済。
| 旧 (R640) | 新 (maguro) | ネット | port | 用途 |
|---|---|---|---|---|
| wg0 | wg-clients | 10.200.0.0/16 | UDP 54024 | 顧客 VPN (本番) |
| wg1 | wg-customers | — | UDP 61001 | 業務カスタマー |
| wg2 | wg-storage | — | UDP 62001 | ストレージ用バックホール |
移植完了状態: maguro VLAN70 (192.168.70.30) で 3 IF とも稼働。 RTX1300 NAT も切替済。 旧 R640 設定は
/etc/wireguard-r640-snapshot/ に退避 (緊急復活用)。
WireGuard インターフェース一覧 (現役)
| IF | 用途 | アドレス | ポート | 状態 | 自動起動 |
|---|---|---|---|---|---|
| wg-clients | 顧客・管理用 (本番) | 10.200.0.1/16 | 54024/UDP | 稼働中 | enabled |
| wg-customers | 業務カスタマー | (別セグメント) | 61001/UDP | 稼働中 | enabled |
| wg-storage | ストレージバックホール | (別セグメント) | 62001/UDP | 稼働中 | enabled |
物理経路 (Internet → maguro)
Internet (顧客)
│ UDP 54024 to 公開IP
▼
┌───────────────────────────────┐
│ RTX1300 NAT 20000/10 │
│ 外部 UDP 54024 │
│ → 192.168.70.30:54024 │
└───────────────┬───────────────┘
│
│ VLAN70 (WG-PUBLIC)
▼
┌───────────────────────────────┐
│ Cisco 12XS Po70 (LACP 20G) │
│ Te2/0/12 + Te2/1/1 │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ maguro SM-WG bond │
│ 192.168.70.30/24 │
│ Intel X550-T2 (10G ×2) │
└───────────────┬───────────────┘
│
▼
wg-clients (UDP 54024)
wg-customers (UDP 61001)
wg-storage (UDP 62001)
RTX1300 NAT (現役)
| NAT ID | プロトコル | 外部ポート | 転送先 | 用途 |
|---|---|---|---|---|
| 20000/10 | UDP | 54024 | 192.168.70.30:54024 | maguro wg-clients |
| 20000/13 | UDP | 61001 | 192.168.70.30:61001 | maguro wg-customers |
| 20000/14 | UDP | 62001 | 192.168.30.30:62001 | maguro wg-storage |
wg-clients 設定 (maguro 側)
設定ファイル: /etc/wireguard/wg-clients.conf
[Interface] Address = 10.200.0.1/16 ListenPort = 54024 PrivateKey = (秘密鍵) PostUp = iptables -t nat -A POSTROUTING -s 10.200.0.0/16 -o <DATA-IF> -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -s 10.200.0.0/16 -o <DATA-IF> -j MASQUERADE [Peer] # iPhone / みーきゅん PublicKey = 5PkDz5OQZz3hzN7Etf1epA/VQ7NRuFjFasfqHLfVJFE= AllowedIPs = 10.200.0.2/32
注: 旧 R640 wg0 の公開鍵
xiFFB/KANQY81ihp4/gnOj0IEBe5JTDoWdlKWsccrHc= は退避 (/etc/wireguard-r640-snapshot/wg0/)。 maguro 側で新規鍵を発行している。 既存クライアントは新公開鍵への切替が必要だった (cutover 時に断続なく実施済)。
クライアント (iPhone) WireGuard プロファイル例
[Interface] PrivateKey = (クライアント秘密鍵) Address = 10.200.0.x/32 DNS = 10.200.0.1 [Peer] PublicKey = (maguro wg-clients 公開鍵) Endpoint = vpn.k2-o.net:54024 AllowedIPs = 10.200.0.0/16 PersistentKeepalive = 25
設計ポイント (2026-04-06 split tunnel 変更):
AllowedIPs = 10.200.0.0/16 により VPN内部宛のみトンネル経由 (split tunnel)。 全通信を VPN に流す旧設定 (0.0.0.0/0) は 5G最適化が効かず iPhone 発熱・電池消耗が激しかったため変更。 DNS 設定 (10.200.0.1) により maguro 内部 dnsmasq が cloud.k2-o.net → 192.168.20.20 (maguro 内部) で解決し、 R640 SNI を迂回して直接 maguro Nextcloud に到達できる。
新規クライアント追加手順
# 1. 鍵ペア生成 (maguro 上) wg genkey | tee /tmp/client.key | wg pubkey > /tmp/client.pub cat /tmp/client.key # PrivateKey (クライアント用) cat /tmp/client.pub # PublicKey (maguro に登録) # 2. wg-clients に追加 (次の空き IP を割当: 10.200.0.x/32) sudo wg set wg-clients peer <PublicKey> allowed-ips 10.200.0.x/32 # 3. wg-clients.conf にも追記 sudo tee -a /etc/wireguard/wg-clients.conf << EOF [Peer] # 端末名 PublicKey = <PublicKey> AllowedIPs = 10.200.0.x/32 EOF # 4. QR コード生成 (qrencode) qrencode -t ansiutf8 << EOF [Interface] PrivateKey = <PrivateKey> Address = 10.200.0.x/32 DNS = 10.200.0.1 [Peer] PublicKey = <maguro wg-clients 公開鍵> Endpoint = vpn.k2-o.net:54024 AllowedIPs = 10.200.0.0/16 PersistentKeepalive = 25 EOF # 5. mikyun-portal の customer_devices テーブルに wg_ip を記録
IP 採番ルール (現行)
| 項目 | 内容 |
|---|---|
| 本番セグメント | 10.200.0.0/16 (wg-clients) |
| 予約 IP | 10.200.0.1 (maguro / GW) |
| 割当範囲 | 10.200.0.2 〜 10.200.255.254 (最大 65533 台) |
| 採番方式 | customer_devices の使用中 IP を全件取得し、 空き最小番号を割当 |
| 重複防止 | 空きスキャン + DB の wg_ip UNIQUE 制約で二重防御 |
旧契約の互換: 旧 10.251.0.0/24 (wg1) セグメントは廃止。 旧契約 (A001 / A002 / M010) は cutover 時に 10.200.0.x へ再採番済。
起動・管理コマンド (maguro)
# 起動 sudo systemctl start wg-quick@wg-clients sudo systemctl start wg-quick@wg-customers sudo systemctl start wg-quick@wg-storage # 自動起動 sudo systemctl enable wg-quick@wg-clients wg-quick@wg-customers wg-quick@wg-storage # 状態確認 sudo wg show sudo wg show wg-clients # ピア追加 (動的) sudo wg set wg-clients peer <PublicKey> allowed-ips 10.200.0.x/32 # 設定リロード (再起動なし) sudo wg syncconf wg-clients <(wg-quick strip wg-clients)
セキュリティ (WG 越しに何を見せる?)
| FQDN | WG 越し | 外部経路 |
|---|---|---|
cloud.k2-o.net | ✓ (DNS で内部IP解決) | ✓ (SNI passthrough) |
office.k2-o.net | ✓ | ✗ (WG 必須) |
admin.wan-secure.net | ✓ (運営Portal) | ✗ |
office.wan-secure.net | ✓ | ✗ |
| maguro SSH (192.168.10.31) | ✓ (運営のみ) | ✗ |
緊急時の WG 復活 (R640)
万一 maguro が長期障害になった場合、 R640 に WG を戻すことが可能 (snapshot を保管しているため)。
# R640 で実施 sudo cp -r /etc/wireguard-r640-snapshot/wg0 /etc/wireguard/ sudo systemctl enable --now wg-quick@wg0 # ただし maguro 側でも並行運用中のため、 ピア鍵衝突に注意 # RTX1300 NAT も R640 (192.168.20.21) に戻す必要あり
注意: 同じピア鍵を 2 ホストで同時 active にすると、 クライアントは「最後に応答した方」にスティック。 ハンドシェイク不整合で接続が不安定になる。 復活時は 必ず maguro 側を停止 してから R640 を起動。
移植時のメモ (試行錯誤)
- VLAN70 新設: 既存 VLAN10/20/30/50 にどれにも WG を載せたくなかった (公開 UDP を MGMT/STG 等に混ぜたくない)。 新設の VLAN70 + Po70 (20G LACP) で完全分離。
- maguro X550-T2 増設: CPU2 SLOT1 PCI-E 3.0 x8 に Intel X550-T2 (RJ45 10G ×2) を搭載。 帯域確保のためスロット選定にこだわった。
- RTX1300 NAT 切替タイミング: R640 停止 → maguro WG 起動 → RTX NAT 先変更を 同一作業窓 で実施。 切替中の数十秒は WG 切れたが、 PersistentKeepalive=25 で自動復活。
- IF 名のリネーム: 旧 wg0/wg1/wg2 では役割が分かりにくかった。
wg-clients/wg-customers/wg-storageに変更して可読性向上。 systemd unit 名・PostUp/Down スクリプトも追従。 - R640 退避: 削除でなく
/etc/wireguard-r640-snapshot/退避。 万一の復活も可能な状態を維持。
2026-05-14 達成: WireGuard 完全 maguro 化 + VLAN70 ingress 専用化 + 20G LACP 帯域。 顧客接続のスループットと冗長性が向上し、 R640 は DMZ 機能だけに専念できる構造に。