{" portfolio portfolio "}
…lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum, eros at sagittis facilisis, ante est rutrum ligula, at interdum eros sapien vel magna.
# R640で実行 cat > ~/collabora-migration-memo.html << ‘EOF’
Collabora Office IP移行作業メモ(2026年3月30日)
■ 作業概要
hirame fabric IP変更(172.31.22.2 → 173.0.0.10)に伴うCollabora Office統合の再設定作業。
■ 発生した問題
問題1: Discovery XMLのURL
Collaboraコンテナにserver_name環境変数が未設定だったため、discovery XMLがhttps://173.0.0.10:9980(プライベートIP)を返し、ブラウザからアクセス不可。
解決1
docker run に -e "server_name=office.wan-secure.net" を追加
問題2: WOPI allowlist不一致
hirameからcloud.k2-o.netへのアクセスが外部IP(119.26.175.225)経由となり、以下2箇所でIP制限に引っかかった:
- R640 nginx: WOPIエンドポイントで173.0.0.0/30のみ許可(173.0.0.10は範囲外)
- Nextcloud richdocuments: wopi_allowlistに119.26.175.225が未登録
解決2
# R640 nginx
location ^~ /index.php/apps/richdocuments/wopi/ {
allow 173.0.0.8/29; # 173.0.0.8-15を許可
allow 192.168.20.0/24;
allow 119.26.175.225; # 暫定:外部IP経由アクセス許可
deny all;
...
}
# Nextcloud richdocuments
sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:app:set richdocuments wopi_allowlist --value="173.0.0.10,119.26.175.225"
■ 最終的なCollaboraコンテナ設定(hirame)
docker run -d \ --name collabora \ -p 9980:9980 \ -e "server_name=office.wan-secure.net" \ -e "aliasgroup1=https://cloud\\.k2-o\\.net" \ -e "extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:net.post_allow.host[0]=173.0.0.9 --o:net.post_allow.host[1]=192.168.20.21 --o:net.post_allow.host[2]=127.0.0.1" \ -e "username=admin" \ -e "password=CollaboraAdmin2026" \ --restart always \ collabora/code
■ 現在の通信フロー
- ブラウザ → office.wan-secure.net (HTTPS) → R640 nginx → hirame:9980 (HTTP)
- Collabora → cloud.k2-o.net (DNS解決 → 119.26.175.225外部IP経由) → R640 nginx → Nextcloud WOPI
■ 今後の改善予定(hirameにVLAN20追加時)
目的
CollaboraからNextcloudへのアクセスを内部ネットワーク経由に変更し、外部IP依存を解消。
手順
- hirameにVLAN20インターフェース追加(例: 192.168.20.40/24)
- hirame /etc/hosts 修正:
173.0.0.9 cloud.k2-o.netのみ残す(192.168.20.21行削除済み) - Collaboraコンテナ再作成時に
--add-host cloud.k2-o.net:173.0.0.9追加(Docker内部DNS優先) - R640 nginx:
allow 119.26.175.225;削除 - Nextcloud:
wopi_allowlistから119.26.175.225削除、VLAN20 IP追加
■ 関連ファイル
- R640: /etc/nginx/sites-available/cloud.k2-o.net
- R640: /etc/nginx/sites-available/office.k2-o.net
- R640: /etc/nginx/sites-available/office.wan-secure.net
- R640: /etc/hosts(173.0.0.10 office.wan-secure.net追加済み)
- hirame: /etc/hosts(173.0.0.9 cloud.k2-o.net のみ)
■ トラブルシューティング
ファイルが開かない場合
- R640 nginxログ確認:
sudo tail -f /var/log/nginx/access.log | grep wopi - hirame Collaboraログ確認:
docker logs collabora -f - Nextcloud管理画面: 設定 → 管理 → Nextcloud Office でステータス確認
- 送信元IPが想定通りか確認(現在は119.26.175.225が正常)
Discovery確認
curl -s http://173.0.0.10:9980/hosting/discovery | grep urlsrc | head -3 # https://office.wan-secure.net が含まれていればOK
EOF cat ~/collabora-migration-memo.html
# R640で実行 cat > ~/collabora-detailed-troubleshooting.html << ‘EOF’
Collabora Office 統合トラブルシューティング詳細記録
作業日: 2026年3月30日
作業者: みーきゅんわんわん + Claude
作業時間: 約4時間
結果: ✅ 成功
作業者: みーきゅんわんわん + Claude
作業時間: 約4時間
結果: ✅ 成功
■ 背景:ネットワーク構成変更
変更前(旧fabric構成)
| ホスト | 旧IP | 用途 |
|---|---|---|
| hirame | 172.31.22.2 | Collabora Office (port 9980) |
| R640 | 172.31.22.1 | Nextcloud + nginx reverse proxy |
変更後(新fabric構成)
| ホスト | 新IP | インターフェース |
|---|---|---|
| R640 | 173.0.0.9 | R640-HIRAME-FAB |
| hirame | 173.0.0.10 | HIRAME-R640-FAB |
重要: hirameは現時点でVLAN20を持たず、すべて直結線(fabric)で通信している。VLAN20はR640のみ存在(192.168.20.21)。
■ 問題発生の時系列
Phase 1: 初期症状
- 現象: Nextcloudでofficeファイル(.docx, .xlsx等)をクリックしても開かない
- エラーメッセージなし、ただ読み込み中のまま停止
- hirameのCollaboraコンテナログに何も出力されない = リクエストが届いていない
Phase 2: 初期診断
# R640からhirameへの接続確認 ping 173.0.0.10 # OK: 0.2ms # Collabora discovery endpoint確認 curl http://173.0.0.10:9980/hosting/discovery # OK: XMLが返ってくる
問題発見: Discovery XMLの中身に
https://173.0.0.10:9980というプライベートIPが含まれていた。ブラウザはこのIPにアクセスできない。■ 問題1: Discovery URLがプライベートIP
根本原因
Collaboraコンテナ起動時にserver_name環境変数が設定されていなかったため、CollaboraがWOPI discoveryレスポンスで自身のIPアドレス(173.0.0.10)をそのまま返していた。
診断コマンド
# R640で実行 curl -s http://173.0.0.10:9980/hosting/discovery | grep urlsrc | head -3 # 誤った出力例(修正前): <action ... urlsrc="https://173.0.0.10:9980/browser/..." /> # 正しい出力例(修正後): <action ... urlsrc="https://office.wan-secure.net/browser/..." />
解決方法
# hirameで実行 docker stop collabora docker rm collabora docker run -d \ --name collabora \ -p 9980:9980 \ -e "server_name=office.wan-secure.net" \ # ← これを追加 -e "aliasgroup1=https://cloud\\.k2-o\\.net" \ -e "extra_params=--o:ssl.enable=false --o:ssl.termination=true" \ -e "username=admin" \ -e "password=CollaboraAdmin2026" \ --restart always \ collabora/code
結果: Discovery XMLが正しい外部ドメイン(office.wan-secure.net)を返すようになった。
■ 問題2: aliasgroup1のポート番号問題
エラーメッセージ
ERR #31: WOPI::CheckFileInfo returned 403 (Forbidden) 認証されていないWOPIホストです。
根本原因
aliasgroup1にポート番号:443を含めていたため、Collaboraがcloud.k2-o.netからのリクエストを正しく識別できなかった。
修正内容
# 誤り: -e "aliasgroup1=https://cloud\\.k2-o\\.net:443" # 正しい: -e "aliasgroup1=https://cloud\\.k2-o\\.net"
■ 問題3: R640 nginx WOPIエンドポイントのIP制限
診断ログ
# R640 nginxログ 173.0.0.10 - - [30/Mar/2026:09:23:58 +0900] "GET /index.php/apps/richdocuments/wopi/files/test HTTP/2.0" 403 162 # hirameからのcurlテスト curl -v https://cloud.k2-o.net/index.php/apps/richdocuments/wopi/files/test # → HTTP/2 403
根本原因
R640のnginx設定でallow 173.0.0.0/30;としていたが、このCIDRは173.0.0.0~173.0.0.3のみを許可する。hirameのIP 173.0.0.10は範囲外。
修正内容
# /etc/nginx/sites-available/cloud.k2-o.net
# 修正前:
location ^~ /index.php/apps/richdocuments/wopi/ {
allow 173.0.0.0/30; # 173.0.0.0-3のみ許可(範囲不足)
deny all;
...
}
# 修正後:
location ^~ /index.php/apps/richdocuments/wopi/ {
allow 173.0.0.8/29; # 173.0.0.8-15を許可
allow 192.168.20.0/24;
deny all;
proxy_pass http://127.0.0.1:9080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
結果: hirameからのcurlテストが403→500に変化。nginx層は通過したが、Nextcloudアプリ層で拒否されていることが判明。
■ 問題4: Collaboraコンテナの外部IP経由アクセス
重大な発見
# R640 nginxアクセスログ 119.26.175.225 - - [30/Mar/2026:09:18:42 +0900] "GET /index.php/apps/richdocuments/wopi/files/31124_ocxlsgn0mq31?access_token=... HTTP/1.1" 403 162
問題: Collaboraコンテナからのリクエストが
119.26.175.225(外部IP)経由で到着している。これは内部通信としては想定外。原因分析
- hirameの
/etc/hostsに以下の2行が存在:173.0.0.9 cloud.k2-o.net 192.168.20.21 cloud.k2-o.net
- hirameはVLAN20を持たないため、192.168.20.21には到達できない
- DNS解決がフォールバックして外部DNS(パブリックIP: 119.26.175.225)を使用
- Dockerコンテナ内部のDNS解決が
/etc/hostsを参照せず、独自にDNS問い合わせを実行
hirame /etc/hosts修正
# 修正前: 173.0.0.9 cloud.k2-o.net 192.168.20.21 cloud.k2-o.net # ← hirameはVLAN20未接続なので到達不可 # 修正後: 173.0.0.9 cloud.k2-o.net # これのみ残す
R640 nginx 暫定対処
# /etc/nginx/sites-available/cloud.k2-o.net
location ^~ /index.php/apps/richdocuments/wopi/ {
allow 173.0.0.8/29;
allow 192.168.20.0/24;
allow 119.26.175.225; # 暫定:外部IP経由アクセスを許可
deny all;
...
}
■ 問題5: Nextcloud wopi_allowlist不足
最終的なエラー
nginxのIP制限は通過したが、Nextcloud richdocumentsアプリが403を返し続けた。
診断
# Nextcloud設定確認
sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:list richdocuments
{
"apps": {
"richdocuments": {
"wopi_allowlist": "173.0.0.10", # ← 119.26.175.225が含まれていない
...
}
}
}
修正
# wopi_allowlistに119.26.175.225を追加 sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:app:set richdocuments wopi_allowlist --value="173.0.0.10,119.26.175.225" # 確認 sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:app:get richdocuments wopi_allowlist # 出力: 173.0.0.10,119.26.175.225
結果: ✅ ファイルが正常に開くようになった!
■ 最終的な設定一覧
hirame: Collabora Docker設定
docker run -d \ --name collabora \ -p 9980:9980 \ -e "server_name=office.wan-secure.net" \ -e "aliasgroup1=https://cloud\\.k2-o\\.net" \ -e "extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:net.post_allow.host[0]=173.0.0.9 --o:net.post_allow.host[1]=192.168.20.21 --o:net.post_allow.host[2]=127.0.0.1" \ -e "username=admin" \ -e "password=CollaboraAdmin2026" \ --restart always \ collabora/code
hirame: /etc/hosts
173.0.0.9 cloud.k2-o.net
R640: /etc/hosts
173.0.0.10 office.wan-secure.net
R640: /etc/nginx/sites-available/cloud.k2-o.net(抜粋)
server {
listen 443 ssl http2;
server_name cloud.k2-o.net;
...
location ^~ /index.php/apps/richdocuments/wopi/ {
allow 173.0.0.8/29;
allow 192.168.20.0/24;
allow 119.26.175.225; # 暫定
deny all;
proxy_pass http://127.0.0.1:9080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
location / {
allow 192.168.20.0/24;
allow 192.168.10.0/24;
allow 10.251.0.0/24;
allow 10.200.0.0/16;
allow 10.250.0.0/24;
allow 173.0.0.0/30;
allow 172.31.20.0/30;
allow 172.31.21.0/30;
allow 127.0.0.1;
deny all;
proxy_pass http://127.0.0.1:9080;
...
}
}
R640: /etc/nginx/sites-available/office.wan-secure.net(抜粋)
server {
listen 443 ssl http2;
server_name office.wan-secure.net;
ssl_certificate /etc/letsencrypt/live/office.wan-secure.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/office.wan-secure.net/privkey.pem;
location / {
proxy_pass http://173.0.0.10:9980; # hirame fabric IP
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 36000s;
}
}
R640: Nextcloud richdocuments設定
{
"DocumentServerInternalUrl": "http://173.0.0.10:9980/",
"allow_local_remote_servers": 1,
"public_wopi_url": "https://office.wan-secure.net",
"wopi_allowlist": "173.0.0.10,119.26.175.225",
"wopi_url": "http://173.0.0.10:9980"
}
■ 通信フロー詳細
ブラウザ → Collabora(正常系)
1. DarkHero (192.168.40.10) ↓ HTTPS 2. office.wan-secure.net (R640 nginx:443) ↓ HTTP proxy_pass 3. 173.0.0.10:9980 (hirame Collabora) ↓ WebSocket upgrade 4. Collabora UI表示
Collabora → Nextcloud WOPI(現在の暫定構成)
1. hirame Collabora container ↓ DNS解決(Docker内部DNS) 2. cloud.k2-o.net → 119.26.175.225 (外部IP経由) ↓ HTTPS 3. WAN → RTX1300 → R640 nginx:443 ↓ proxy_pass(送信元IP: 119.26.175.225) 4. Nextcloud container :9080 ↓ WOPI CheckFileInfo処理 5. wopi_allowlistチェック(119.26.175.225が含まれている → OK)
暫定構成の問題点: 内部通信が外部IP経由になっており、WAN帯域を消費する。またセキュリティ的にも望ましくない。
■ 今後の改善計画(hirameにVLAN20追加時)
目標構成
Collabora → Nextcloud WOPI を完全に内部ネットワーク経由に変更 1. hirame Collabora container ↓ Docker内部DNS(--add-hostで強制) 2. cloud.k2-o.net → 173.0.0.9 (R640 fabric IP) ↓ HTTPS 3. R640 nginx:443 ↓ proxy_pass(送信元IP: 173.0.0.10) 4. Nextcloud container :9080
実装手順
# 1. hirameにVLAN20追加(例: 192.168.20.40/24) # 2. hirame Collaboraコンテナ再作成 docker stop collabora && docker rm collabora docker run -d \ --name collabora \ -p 9980:9980 \ --add-host cloud.k2-o.net:173.0.0.9 \ # ← Docker内部DNSで強制解決 -e "server_name=office.wan-secure.net" \ -e "aliasgroup1=https://cloud\\.k2-o\\.net" \ -e "extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:net.post_allow.host[0]=173.0.0.9 --o:net.post_allow.host[1]=192.168.20.21 --o:net.post_allow.host[2]=127.0.0.1" \ -e "username=admin" \ -e "password=CollaboraAdmin2026" \ --restart always \ collabora/code # 3. R640 nginx修正 sudo nano /etc/nginx/sites-available/cloud.k2-o.net # allow 119.26.175.225; の行を削除 # 4. Nextcloud wopi_allowlist修正 sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:app:set richdocuments wopi_allowlist --value="173.0.0.10,192.168.20.40" # ※192.168.20.40はhirameのVLAN20 IP例 # 5. 動作確認 # R640でログ監視 sudo tail -f /var/log/nginx/access.log | grep wopi # 送信元IPが173.0.0.10になっていることを確認
■ トラブルシューティングコマンド集
接続確認
# R640 → hirame疎通確認 ping 173.0.0.10 # hirame → R640疎通確認 ping 173.0.0.9 # R640からCollabora discovery取得 curl http://173.0.0.10:9980/hosting/discovery # Discovery URLが正しいか確認 curl -s http://173.0.0.10:9980/hosting/discovery | grep urlsrc | head -3 # https://office.wan-secure.net が含まれていればOK
Collaboraログ確認
# hirame docker logs collabora -f # 成功時のログパターン: # INF WOPI::CheckFileInfo succeeded # INF Loaded document from storage # エラー時のログパターン: # ERR WOPI::CheckFileInfo returned 403 (Forbidden) # ERR Access denied to CheckFileInfo
R640 nginxログ確認
# アクセスログ(送信元IP確認) sudo tail -f /var/log/nginx/access.log | grep wopi # エラーログ sudo tail -f /var/log/nginx/error.log # 設定テスト sudo nginx -t # 設定リロード sudo systemctl reload nginx
Nextcloud設定確認
# richdocuments全設定表示 sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:list richdocuments # wopi_allowlistのみ確認 sudo docker exec -u www-data nextcloud-stack-app-1 php occ config:app:get richdocuments wopi_allowlist # Nextcloudログ確認 sudo docker logs nextcloud-stack-app-1 --tail 100 | grep -i "wopi\|403"
DNS/hosts確認
# hirame cat /etc/hosts | grep cloud getent hosts cloud.k2-o.net # R640 cat /etc/hosts | grep office getent hosts office.wan-secure.net
Nextcloudコンテナ再起動
# R640 sudo docker restart nextcloud-stack-app-1 # 起動完了待ち(30秒程度) sleep 30
■ 学んだポイント
1. Docker内部DNSの挙動
Dockerコンテナは/etc/hostsをそのまま参照せず、独自のDNS解決を行う。ホストの/etc/hostsをコンテナに反映させるには--add-hostオプションが必要。
2. CIDR範囲の計算
| CIDR | 範囲 | ホスト数 |
|---|---|---|
| /30 | x.x.x.0 – x.x.x.3 | 4個 |
| /29 | x.x.x.0 – x.x.x.7 | 8個 |
| /24 | x.x.x.0 – x.x.x.255 | 256個 |
173.0.0.10を許可するには/30では不足、/29以上が必要。
3. nginxとNextcloudの2段階IP制限
- R640 nginx:
allow/denyディレクティブ - Nextcloud richdocuments:
wopi_allowlist設定
4. Collabora環境変数の重要性
server_name: Discovery XMLのURL生成に使用aliasgroup1: WOPI host認証に使用(ポート番号不要)extra_params: net.post_allow.hostでNextcloud IPを許可
■ 参考リンク
- Collabora公式ドキュメント: https://sdk.collaboraonline.com/
- Nextcloud Office設定: https://docs.nextcloud.com/server/stable/admin_manual/office/
- WOPI protocol: https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/rest/
■ バックアップファイル一覧
- R640: /etc/nginx/sites-available/cloud.k2-o.net.bak.20260330
- R640: /etc/nginx/sites-available/office.k2-o.net.bak.20260330
- R640: /etc/nginx/sites-available/office.wan-secure.net.bak.20260330
- R640: ~/nextcloud-richdocuments-config.json(設定エクスポート)
EOF cat ~/collabora-detailed-troubleshooting.html
