New issue
Advanced search Search tips

Issue 914617 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Chrome , Mac
Pri: 2
Type: Bug



Sign in to add a comment

[Remoting] Issue connecting from client on DNS64/NAT64 network to host on IPv4 network

Project Member Reported by yuweih@chromium.org, Dec 13

Issue description

Internal user reported that user cannot connect their client on DNS64/NAT64 network to a host on IPv4 network using the Chrome app. More info: b/120879046

The problem is exactly the same as  issue 829117 . Basically the host sends candidates with IPv4 literals to the client and the client tries to directly connect to them without synthesizing an IPv6 address, which fails.

We have already enable IPv6 synthesis on iOS using getaddrinfo(). We could try it on other platforms, but I'm not 100% sure if that works well on other platforms. Potentially a getaddrinfo() implementation can trigger DNS64 lookup every time it is called, which is presumably slow.

This will probably also impact the host, i.e. an IPv4-only client cannot connect to a DNS64/NAT64 host.
 
Owner: yuweih@chromium.org
Status: Assigned (was: Untriaged)
Currently we only intend to allow Chromotocol host and client to connect via relay. Fixing direct or STUN IPv4<->NAT64 connections for Chromotocol and WebRTC requires too many changes in the protocol layer(s) and might not worth the time doing because relay is probably good enough.
Project Member

Comment 3 by bugdroid1@chromium.org, Jan 9

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11

commit 9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11
Author: Yuwei Huang <yuweih@chromium.org>
Date: Wed Jan 09 22:27:44 2019

[Remoting ChromeApp] Implement RFC 7050 DNS64/NAT64 IP synthesis

This CL implements DNS64/NAT64 prefix discovery and IPv6 synthesis
for the ChromeApp following the RFC 7050 spec. This enables the
ChromeApp to connect to our IPv4-only relay servers on DNS64/NAT64
network.

Note that this CL does not make it possible to do direct or STUN
connection between IPv4-only peer and DNS64/NAT64 peer, as that requires
more fixes on the ICE stack.

Bug: 914617
Change-Id: I069365e6276d8e778077a26c846f68a597fcf128
Reviewed-on: https://chromium-review.googlesource.com/c/1392286
Commit-Queue: Yuwei Huang <yuweih@chromium.org>
Reviewed-by: Joe Downing <joedow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#621339}
[modify] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/client/plugin/chromoting_instance.cc
[modify] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/client/plugin/chromoting_instance.h
[modify] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/protocol/BUILD.gn
[modify] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/protocol/native_ip_synthesizer.cc
[modify] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/protocol/native_ip_synthesizer.h
[add] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/protocol/rfc7050_ip_synthesizer.cc
[add] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/protocol/rfc7050_ip_synthesizer.h
[add] https://crrev.com/9ebfa0e3cca6ababaf89aa7aad8e7d847c955e11/remoting/protocol/rfc7050_ip_synthesizer_unittest.cc

Project Member

Comment 4 by bugdroid1@chromium.org, Jan 10

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50

commit 1132c5859bfa6ae6ab5d304ccb725af18d9c1e50
Author: Yuwei Huang <yuweih@chromium.org>
Date: Thu Jan 10 01:05:06 2019

[Remoting Host] Enable RFC 7050 IP synthesis on hosts

This CL enables DNS64/NAT64 prefix discovery and IP synthesis on the
host. This allows hosts on DNS64/NAT64 network to connect to our
IPv4-only relay servers using Chromotocol. Connections via WebRTC are
not affected because they have IPv6 relay endpoints. As stated in
CL 1392286, this does not fix direct/STUN connection between IPv4-only
and DNS64/NAT64 peers.

Non-NaCl platforms support NetworkChangeNotifier so the host will
refresh the prefix only when the network interface has been changed,
rather than refreshing it every time we are about to make the
connection.

Bug: 914617
Change-Id: I458156fa1221d8755e84e62b8409b1cb15d1f024
Reviewed-on: https://chromium-review.googlesource.com/c/1392360
Commit-Queue: Yuwei Huang <yuweih@chromium.org>
Reviewed-by: Joe Downing <joedow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#621399}
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/host/chromoting_host.cc
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/host/chromoting_host_unittest.cc
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/host/it2me/it2me_host_unittest.cc
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/host/it2me/it2me_native_messaging_host_main.cc
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/protocol/BUILD.gn
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/protocol/native_ip_synthesizer.cc
[modify] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/protocol/native_ip_synthesizer.h
[add] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/protocol/rfc7050_prefix_refresher.cc
[add] https://crrev.com/1132c5859bfa6ae6ab5d304ccb725af18d9c1e50/remoting/protocol/rfc7050_prefix_refresher.h

Owner: ajnolley@chromium.org
Hi AJ, could you do a test pass for this? You will need two devices that both have WiFi. It could be great if you test with a Windows host (laptop?) since I only tested it with a Mac host.

Here are the steps:
1. Install latest M73 host on the host, and latest M73 ChromeApp on the client.
2. Start the host
3. Switch WiFi networks on both the host and client, wait for a few minutes, then try to connect to each other and verify that they connect. Here are the combinations to test:

   +--------------------+--------------------+
   | Host               | Client             |
   +--------------------+--------------------+
   | GoogleGuest        | GoogleGuest        |
   +--------------------+--------------------+
   | GoogleGuest-V6Only | GoogleGuest-V6Only |
   +--------------------+--------------------+
   | GoogleGuest        | GoogleGuest-V6Only |
   +--------------------+--------------------+
   | GoogleGuest-V6Only | GoogleGuest        |
   +--------------------+--------------------+

Thanks!

Comment 6 by ajnolley@google.com, Jan 18 (5 days ago)

Owner: yuweih@chromium.org
Hi Yuwei, I ran through all combinations twice, and had no trouble connecting at any point. I used a Windows Host and Mac Client. 

Comment 7 by yuweih@chromium.org, Jan 18 (5 days ago)

Great. Thank you AJ!

Sign in to add a comment