はじめに #
Alibaba が開発した AI コーディングエージェント Qwen Code は、OpenAI 互換 API を持つ任意のエンドポイントを向け先として指定できる。今回は さくらのAI Engine(api.ai.sakura.ad.jp)を API バックエンドとして設定し、KVM 上の Ubuntu 26.04 VM で動作させた。
通信制御に Squid 明示プロキシ(FQDN ホワイトリスト方式) を導入した。プロキシのアクセスログを確認したところ、さくらの API 以外にも Alibaba Cloud の外部サービスへのアクセスが発生していることが判明した。
環境構成 #
iptables(ファイアウォール) #
外向き通信は デフォルト DROP とし、Squid 実行ユーザのプロセスのみ 443/80 への通信を許可する構成にした。
一般ユーザ → port 443 直接 → [iptables DROP]
一般ユーザ → Squid :3128 → [iptables ACCEPT(Squid実行ユーザ)] → インターネットこれにより、プロキシを経由しない通信は物理的に不可能になる。
Squid 明示プロキシ(SSL Bump) #
Squid を SSL Bump モードで動作させ、HTTPS 通信の FQDN を検査したうえでホワイトリスト判定する。証明書の内容は復号するが、外部に転送するのはホワイトリストに一致したものだけ。
FQDN ホワイトリスト
| FQDN | 用途 |
|---|---|
.ubuntu.com |
apt(全サブドメイン) |
.canonical.com |
Canonical CDN |
api.ai.sakura.ad.jp |
さくらのAI Engine API |
deb.nodesource.com |
Node.js apt リポジトリ |
registry.npmjs.org |
npm パッケージレジストリ |
Squid の設定(抜粋):
http_port 3128 ssl-bump \
cert=/etc/squid/ssl_cert/squid-ca.crt \
key=/etc/squid/ssl_cert/squid-ca.key \
generate-host-certificates=on
acl whitelist dstdomain "/etc/squid/whitelist.txt"
ssl_bump peek step1
ssl_bump bump all
http_access allow CONNECT
http_access allow whitelist
http_access deny allQwen Code の設定(settings.json)
#
さくらのAI Engine を OpenAI 互換プロバイダとして登録し、プロキシ設定も settings.json に埋め込む。
{
"modelProviders": {
"openai": [{
"id": "Qwen3-Coder-480B-A35B-Instruct-FP8",
"name": "さくらのAI Engine",
"baseUrl": "https://api.ai.sakura.ad.jp/v1/chat/completions"
}]
},
"env": {
"HTTPS_PROXY": "http://127.0.0.1:3128",
"NODE_EXTRA_CA_CERTS": "/etc/squid/ssl_cert/squid-ca.crt"
},
"proxy": "http://127.0.0.1:3128"
}Qwen Code の実行結果 #
以下は Qwen Code を実行した際のセッション終了サマリー。
╭──────────────────────────────────────────────────────────────────────╮
│ │
│ エージェントを終了します。さようなら! │
│ │
│ インタラクション概要 │
│ セッションID: 6a4e7ba5-566a-4159-a106-d7747a488ace │
│ ツール呼び出し: 10 ( ✓ 10 x 0 ) │
│ 成功率: 100.0% │
│ ユーザー同意: 100.0% (2 レビュー済み) │
│ コード変更: +50 -0 │
│ │
│ パフォーマンス │
│ 経過時間: 2m 18s │
│ エージェント稼働時間: 1m 26s │
│ » API時間: 37.5s (43.1%) │
│ » ツール時間: 49.5s (56.9%) │
│ │
│ モデル使用量 リクエスト 入力トークン 出力トークン │
│ ───────────────────────────────────────────────────────── │
│ Qwen3-Coder-480B-A35B-Instruct-FP8 12 232,846 1,018 │
│ │
╰──────────────────────────────────────────────────────────────────────╯ツール呼び出し 10 回すべて成功し、2分18秒のセッションで 50 行のコードを生成した。API へのリクエストは 12 回、入力トークンは 23 万超となった。
プロキシで発見した「想定外のアクセス」 #
Squid のアクセスログを確認すると、さくらのAI Engine 以外に 2 種類の接続先が確認できた。
# npmjs.org(パッケージインストール時)
TCP_MISS/200 GET https://registry.npmjs.org/@qwen-code%2Fqwen-code
# さくらのAI Engine(意図したアクセス)
TCP_MISS/200 POST https://api.ai.sakura.ad.jp/v1/chat/completions
# ← 問題のアクセス(11回試行、全件 403 でブロック)
TCP_DENIED/403 POST https://gb4w8c3ygj-default-sea.rum.aliyuncs.com/gb4w8c3ygj-default-sea.rum.aliyuncs.com とは何か
#
ドメインを分解すると正体が分かる。
| 部分 | 意味 |
|---|---|
aliyuncs.com |
Alibaba Cloud(アリクラウド)の公式ドメイン |
rum |
Real User Monitoring — ユーザー行動・エラーを収集するサービス |
sea |
Southeast Asia リージョン |
gb4w8c3ygj |
Alibaba Cloud ARMS 上の qwen-code 固有プロジェクト ID |
これは Alibaba Cloud ARMS(Application Real-Time Monitoring Service)の RUM エンドポイントだ。Qwen Code は起動・使用のたびにこのエンドポイントへ POST を送信し、以下のようなテレメトリーデータを収集しようとする。
- 操作イベント(どの機能・コマンドを使ったか)
- エラー・例外情報
- パフォーマンス指標(起動時間、レスポンス時間)
- OS・ランタイム環境情報
- セッションの開始・終了タイミング
Qwen Code は Alibaba グループが開発したツールであり、使用データが同グループのクラウド監視基盤(中国企業のサーバー)に送信される設計になっている。
ソースコードでの確認 #
このアクセスは qwen-code のソースコード(packages/core/src/telemetry/qwen-logger/qwen-logger.ts)にハードコードされている。
// Usage statistics collection endpoint
const USAGE_STATS_HOSTNAME = 'gb4w8c3ygj-default-sea.rum.aliyuncs.com';
const USAGE_STATS_PATH = '/';
const RUN_APP_ID = 'gb4w8c3ygj@851d5d500f08f92';コメントに // Usage statistics collection endpoint と明記されており、意図的に組み込まれた使用統計収集機構であることが確認できる。
公式ドキュメントへの記載 #
公式の Terms of Service / Privacy Notice には「匿名の使用統計とテレメトリーデータを収集することがある」と記載されているが、aliyuncs.com への接続や RUM サービスの利用についての記載、並びに、ユーザーが設定しなくても自動的に接続試行されることへの言及も、私には見つけられなかった。
テレメトリー除去フォークの存在 #
同様の問題を認識した開発者が qwen-code-no-telemetry というフォークを公開している。このフォークは以下の対応を行っている。
| 対象 | 対応内容 |
|---|---|
packages/core/src/telemetry/ |
すべて no-op 実装に置き換え |
@opentelemetry/* パッケージ |
全削除 |
| インストールID生成 | 常に 00000000-0000-0000-0000-000000000000 を返す固定値に変更 |
今回 Squid がブロックした gb4w8c3ygj-default-sea.rum.aliyuncs.com への接続は、まさにこのフォークが封じようとしているものと完全に一致している。
Squid がブロックしていることの確認 #
今回の接続では、11 回の試行があった。
特に通信制限がなければ、何らかのデータが Alibaba に送信されるようだ。
まとめ #
| 確認事項 | 結果 |
|---|---|
| さくらのAI Engine を API として使用 | 成功 |
| Qwen Code の動作(ツール呼び出し・コード生成) | 正常 |
| Squid による通信の可視化 | FQDN→URI 単位で全アクセスを記録 |
| aliyuncs.com へのテレメトリー送信 | Squid が全件ブロック(403) |
Qwen Code は、さくらのAI Engine への API アクセスとは別に、Alibaba Cloud のテレメトリーサービス(RUM)への接続がソースコードに含まれており、意図せず通信が試みられる可能性があるようだ。
新しいソフトウェアを実行する際は、今回のように通信先をプロキシで可視化し、不要・不明な通信は DENY する構成を取ることが大切だと感じた。テレメトリーを許容しない場合の選択肢として、qwen-code-no-telemetry フォークの存在も参考になるかもしれない。