We should not use deprecated IPV6 addresses while gathering candidates
Categories
(Core :: WebRTC: Networking, defect, P2)
Tracking
()
backlog | webrtc/webaudio+ |
People
(Reporter: bwc, Assigned: bwc, NeedInfo)
References
Details
Attachments
(4 files, 1 obsolete file)
Updated•10 years ago
|
Comment 1•10 years ago
|
||
Assignee | ||
Comment 2•10 years ago
|
||
Comment 3•8 years ago
|
||
I was just about to report this as well. This needs to be fixed. As people are using more video conferencing these days, leaking historical IPv6 addresses out to random people is a VERY bad thing to do.
I just looked a little bit closer. It's worse than this. It leaks ALL the IPv6 addresses, even the non-temporary ones. So on my MBP (MacOSX), it leaks the MAC address of my machine, allowing full tracking over the entire lifetime of my machine.
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 6•5 years ago
|
||
Yeah, draft-ietf-rtcweb-transports (sec 3.3) says we should discard permanent IPv6 addresses if there are non-deprecated temporary ones present. Presumably, when operating in mode 2 we want to ensure that we prefer temp addresses also. That still allows the use of permanent addresses if there are no temporary addresses; is that the intent?
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 7•5 years ago
|
||
While we're at it, we probably want to avoid using things like IFA_F_OPTIMISTIC, IFA_F_DADFAILED/IN6_IFF_DUPLICATED, IFA_F_TENTATIVE/IN6_IFF_TENTATIVE, IN6_IFF_DETACHED, and IN6_IFF_ANYCAST.
Comment 8•5 years ago
|
||
So the filtering out of DAD failures and whatnot seems fine, but it's worth poking at the principles behind mode X.
Mode 2 says that you provide local IPs, but only for the route you are using. So in that case, it's probably not terrible to use a permanent address, because that is analogous in many ways to a v4 address, I think can be equated to a permanent address. Obviously, we can (and should) prefer a temporary address, but we don't need to insist on it.
I would probably apply the same logic to mode 1. There is no value to us in using a permanent address when a temporary address exists. These interactions are inherently temporary.
Obviously, modes 3 and 4 should not provide any local address, temporary or permanent.
(The deprecated temporary is a curious thing. Following the spec seems right: filter them out at first, keep one if it becomes deprecated and you are doing an ICE restart. I would add: ...only if it was on the nominated path. So if you had used that path, you should ADD the new non-deprecated temporary address. However, if you have no non-deprecated temporary addresses on that interface, then you provide the permanent address, just as you would at the start.)
Assignee | ||
Comment 9•5 years ago
|
||
Retaining deprecated interfaces that are currently nominated would require a whole bunch of plumbing, and that's a MAY level thing, so I'm not sure it would be worth our time. The only time that makes much sense to me is if we need to choose between continuing to use a deprecated temp addy and a permanent one, but it is unclear when this would actually happen in practice. If temp addresses are being used, how often do we end up in a scenario when our last temp addy is deprecated, and no new temp addy exists?
Comment 10•5 years ago
|
||
Yeah, I'm speaking from the position of ideals. If a restart gets a whole new set of addresses, without a deprecated temporary address, then I think things will work. It's a slight regression, but as you say, there is no significant risk that you have to fall back to a permanent address anyway.
Assignee | ||
Comment 11•5 years ago
•
|
||
Ok, in order to get this information on linux, we need to use netlink. We have a perfectly good netlink-based implementation of getifaddrs here, that we only use on android:
I'm going to try renaming this from ifaddrs-android to ifaddrs-netlink, and try using it on linux too. If that works ok, then I will refactor it to handle flag checking as it goes. If that all works, I will then implement an ifaddrs-bsd variant, based on getifaddrs and ioctl with SIOCGIFAFLAG_IN6.
Assignee | ||
Comment 12•5 years ago
|
||
We might also be able to ask Necko to supply these addresses, instead of NrIceCtx. https://searchfox.org/mozilla-central/rev/7fd1c1c34923ece7ad8c822bee062dd0491d64dc/media/mtransport/ipc/StunAddrsRequestParent.cpp#149
Worth looking into.
Assignee | ||
Comment 13•5 years ago
|
||
Assignee | ||
Comment 14•5 years ago
|
||
On the subject of Necko, is there anything we need to do to support RFC 6724? Is that all handled at the kernel level? Would there be any value in modifying NetlinkService to expose interface details like the IFA_F_* flags?
Assignee | ||
Comment 15•5 years ago
|
||
Assignee | ||
Comment 16•5 years ago
|
||
Assignee | ||
Comment 17•5 years ago
|
||
Assignee | ||
Comment 18•5 years ago
|
||
Assignee | ||
Comment 19•5 years ago
•
|
||
Assignee | ||
Comment 20•5 years ago
•
|
||
Assignee | ||
Comment 21•5 years ago
|
||
Could you try this binary (you said you were testing on OS X) and see if it only uses the privacy addresses?
Assignee | ||
Comment 22•5 years ago
|
||
Trying to find some others who have access to an IPv6 environment for testing. Try at least has IPv6 addresses, but I don't have any visibility into whether it uses privacy addresses or not.
Assignee | ||
Comment 23•5 years ago
|
||
Assignee | ||
Comment 24•5 years ago
|
||
Nevermind, that binary was not working correctly.
Assignee | ||
Comment 25•5 years ago
|
||
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 26•5 years ago
|
||
Ok, go ahead and try this one: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/fn8qWmZHRYSTbgIFvWHXGw/runs/1/artifacts/public/build/target.dmg
Assignee | ||
Comment 27•5 years ago
|
||
Dan, can you give the linux and windows binaries a try?
Assignee | ||
Comment 29•5 years ago
|
||
Assignee | ||
Comment 30•5 years ago
|
||
Most recent build seems to work on Linux and Windows (thanks Dan!).
Assignee | ||
Comment 31•5 years ago
|
||
Assignee | ||
Comment 32•5 years ago
|
||
Assignee | ||
Comment 33•5 years ago
|
||
Assignee | ||
Comment 34•5 years ago
|
||
Assignee | ||
Comment 35•5 years ago
|
||
Assignee | ||
Comment 36•5 years ago
|
||
Assignee | ||
Comment 37•5 years ago
|
||
Assignee | ||
Comment 38•5 years ago
|
||
Assignee | ||
Comment 39•5 years ago
|
||
Assignee | ||
Comment 40•5 years ago
|
||
Assignee | ||
Comment 41•5 years ago
|
||
Assignee | ||
Comment 42•5 years ago
|
||
Assignee | ||
Comment 43•5 years ago
|
||
Updated•5 years ago
|
Assignee | ||
Comment 44•5 years ago
|
||
Depends on D74693
Updated•5 years ago
|
Assignee | ||
Comment 45•5 years ago
|
||
Depends on D75947
Assignee | ||
Comment 46•5 years ago
|
||
Assignee | ||
Comment 47•5 years ago
|
||
Assignee | ||
Comment 48•5 years ago
|
||
Depends on D76042
Updated•5 years ago
|
Assignee | ||
Comment 49•5 years ago
|
||
![]() |
||
Comment 50•5 years ago
•
|
||
I am sorry for such a late reply. Honestly I don't know the answer off-hand, so I'll forward to Dragana and Michal, in case they know.
The question asked is in comment 14.
Assignee | ||
Comment 51•5 years ago
|
||
Assignee | ||
Comment 52•5 years ago
|
||
I'm going to wait until after the merge to land this.
Comment 53•5 years ago
|
||
Comment 54•5 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/a759f9651479
https://hg.mozilla.org/mozilla-central/rev/a74c46669606
https://hg.mozilla.org/mozilla-central/rev/24a4472452b8
https://hg.mozilla.org/mozilla-central/rev/99cce372d20c
Updated•5 years ago
|
Comment 55•5 years ago
|
||
(In reply to Byron Campen [:bwc] from comment #14)
Would there be any value in modifying NetlinkService to expose interface details like the IFA_F_* flags?
Where it would be used? NetlinkService is used solely for calculating network ID and determining link status. But if some of the information is useful anywhere else, we can expose it.
Assignee | ||
Comment 56•5 years ago
|
||
(In reply to Michal Novotny [:michal] from comment #55)
(In reply to Byron Campen [:bwc] from comment #14)
Would there be any value in modifying NetlinkService to expose interface details like the IFA_F_* flags?
Where it would be used? NetlinkService is used solely for calculating network ID and determining link status. But if some of the information is useful anywhere else, we can expose it.
If that is all it is used for, then moving that capability there would probably not be of much use. If, someday, there's some other code that needs more in-depth network interface information, we could think about moving it there.
Updated•4 years ago
|
Description
•