【解決】V6プラス環境下でDiscordのボイスチャットに接続できない

# 2025/05/22 更新

VNEをv6プラスからXpassへ変更したところすべてが解決しました。






# 発生している問題
フレッツ光クロスV6プラス固定IPのデュアルスタック環境下で一部サービスに接続できない問題が発生しています。
- Discordのボイスチャット
- Switchbotのハブがネットにつながらない

まだ未解決ですがトラシュー過程をメモがてら残しておきます。

# 調査
## プロセスIDを確認
タスクマネージャ -> 詳細　を開き上部の検索欄からDiscordを検索する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242165/90c2eca7-2e5c-4de3-b02e-638832c99c3d.png)


DiscordのプロセスIDが確認できた
- 2776
- 44656
- 40376
- 41280
- 42456
- 36424

## プロセスIDから使用しているポート番号を確認
netstatで各プロセスIDの通信を表示し使用中のIP・ポートを確認します。

```shell-session
PS ~> netstat -ano | find '"2776"'
PS ~> netstat -ano | find '"44656"'
PS ~> netstat -ano | find '"40376"'
PS ~> netstat -ano | find '"41280"'
  TCP         192.168.10.100:53629   162.159.138.232:443    ESTABLISHED     41280
  TCP         192.168.10.100:55208   162.159.130.234:443    ESTABLISHED     41280
  TCP         [240b:251:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:57223  [2600:1901:1:a8::]:443  ESTABLISHED     41280
  TCP         [240b:251:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:65070  [2606:4700:7::a29f:81eb]:443  ESTABLISHED     41280
PS ~> netstat -ano | find '"41280"'
  TCP         192.168.10.100:53629   162.159.138.232:443    ESTABLISHED     41280
  TCP         192.168.10.100:55208   162.159.130.234:443    ESTABLISHED     41280
  TCP         [240b:251:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:57223  [2600:1901:1:a8::]:443  ESTABLISHED     41280
  TCP         [240b:251:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:65103  [2606:4700:7::a29f:81eb]:443  ESTABLISHED     41280
PS ~> netstat -ano | find '"42456"'
  TCP         127.0.0.1:6463         0.0.0.0:0              LISTENING       42456
PS ~> netstat -ano | find '"36424"'
PS ~> 
```

ボイスチャットに接続したときにIPが変化するのは42180だけなのでそのあたりの通信を見ていきます。

## パケットキャプチャ
WireSharkでパケットキャプチャし問題が起きていそうな通信を探ってみます。
PID 41280の4行目がボイスチャットへの接続思考をするたびにポート番号のみ変動しているので宛先IPで絞込をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242165/c193c3c0-0a8b-4dc6-8fb3-43f4da43dc1d.png)

もっと真っ黒かと思ってたけど・・・
WebRTCのプロトコルは全然詳しくないのでぱっと見で判断できませんでした。

# 余談
WebRTCの挙動について調べていたところ下記のページを見つけました。
v6ネットワーク上でv6に対応していないソフトウェアがWebRTCで通信する場合DNS64+NAT64で通信しますが事はそう単純ではないとの事。

https://speakerdeck.com/iwashi86/tip-for-webrtc-apis?slide=44

これを踏まえ、v6環境下でのWebRTCに追試調べていると下記のフォーラムに辿り着きました。

https://www.reddit.com/r/ipv6/comments/scvuy0/comment/hu93hwt/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button&rdt=42656

Google翻訳
>Discord の音声は機能せず、Steam クライアントはログインできず、v6 を考慮していない WebRTC の多くの機能は機能しません。IPv4 リテラル アドレスを使用できると想定されているものはすべて機能しません。Java ソフトウェアは、設定しない限り、デフォルトで IPv4 DNS ルックアップを使用しますjava.net.preferIPv6Addresses=true。つまり、Minecraft などのゲームやその他の Java ソフトウェアは、そのオプションを指定しない限り接続に失敗します。Node.js もデフォルトで DNS に IPv4 を使用するため、npm インストールなどが機能しません。うーん、思いつくのはこれだけです。自分のネットワークでは NAT64 を実行しているので、これはすべて個人的な経験です。

v6オンリーのネットワークで同じ問題が起きている人は一定数居そうです。解決には至っていませんがなんとなくDNSが悪そうという見当をつけることはできました。

ちなみにLAN内のAndroid端末からCloudflare 1.1.1.1経由で接続した場合は問題なくボイスチャットに入れます。
<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">Cloudflare 1.1.1.1経由だと問題なくDiscordに繋がるのは確認できた<br>画面共有も見える <a href="https://t.co/Xv2oPqv6Un">pic.twitter.com/Xv2oPqv6Un</a></p>&mdash; hmzn (@himajin_zip) <a href="https://twitter.com/himajin_zip/status/1905299333656051951?ref_src=twsrc%5Etfw">March 27, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## 今後の対応
我が家はv6オンリーではないのでDNSサーバーを立てて名前解決時にv4のアドレスを渡せば解決できるのでは？と思ったのでとりあえずDNSサーバーの構築からやっていきます。

進展があればまた追記しようかと思います。