Re:Peer Calls: WebRTC peer to peer calls for everyone
by koolala on Monday September 30, 2024 @05:58PM
(#41702580)
Want to p2p video call? Here run this script. We don't really use our Browsers like terminals to dynamically run user code.
It would be like a different timeline where a programming console is not a 'dev' feature and anyone is equal at using code. If our computers become smart like AI then all friction for programming could be erased.
It's hard to elaborate on a world where bookmarklets and user scripting becomes a normal thing where we freely tap into our browser's capabilities.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by koolala on Monday September 30, 2024 @11:20PM
(#41704337)
On most computers your files are like one big bowl of soup. I'm really excited for the future direction the browser file system is going in. I disagree with statistical fear and judgement. With OPFS it's hard to imagine someone doing that (especially in a native container OS)
Re:Peer Calls: WebRTC peer to peer calls for everyone
by throwing_away on Monday September 30, 2024 @10:02PM
(#41704029)
I'm interested in building in this area, but the problem as I understand it, is that NAT traversal is kind of unreliable, even if you can break the sandbox via console/bookmarklet or tell the user to paste code to a system terminal.
For some people (behind CG-NAT), it may just not be possible to get an inbound port at all, so there may be two nodes that cannot directly communicate in the network.
The traditional solution is some kind of relay (see: TURN, skype's supernodes).
As far as I know, and maybe somebody can point me in the right direction, there is no technology available for a webrtc overlay mesh network where some nodes can relay for other nodes. I know webtorrent exists, so it should be possible.
You can see evidence of this problem in this project's README:
> When a direct connection cannot be established, it might be help to use a TURN server. The peercalls.com instance is configured to use a TURN server and it can be used for testing. However, the server bandwidth there is not unlimited.
What's needed, IMO, and please HN tell me why I'm wrong -- is a browser-to-browser mesh overlay system.
I would love to see an array of nodes (across varying levels of NAT) saturate their connections by all relaying to each other as a decentralized stress test that reports real-world p2p bandwidth between providers.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by koolala on Monday September 30, 2024 @11:27PM
(#41704377)
To comment on the "tell me im wrong" part, not to tell you your wrong or this is right, but I haven't found obvious examples where WebRTC STUN fails where you'd convince network admins to a new kind of mesh network protocol in their corporate firewall. The obvious examples where a p2p internet connection doesn't work are obvious and acceptable failures. Like a p2p video call won't work in a military base? I have no idea honestly. Corporate and Government networks are not not my networks and I'm just happy p2p works on the open web at all.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by throwing_away on Tuesday October 01, 2024 @12:17AM
(#41704573)
My thesis is that your p2p node could contact some other p2p node that's willing to act as a relay and create a mesh network from entirely within a browser.
If your side of NAT sucks and STUN fails, you'll probably only be able to connect to someone that has a NAT-traversal friendly configuration. But since you're able to reach them, they could act as a relay to the rest of the overlay network from behind your restrictive NAT.
Imagine I'm running one node that's willing to relay on a publicly accessible IP. If I'm the only node willing to relay on a public IP, then we've pretty much got TURN without the daemon.
If multiple nodes are willing to relay, then we have a general purpose mesh network within the browser sandbox that works on mobile?
Re:Peer Calls: WebRTC peer to peer calls for everyone
by kothar on Tuesday October 01, 2024 @02:24AM
(#41705168)
I’ve played around with this a bit in the past, and I think the biggest obstacle is going to be managing connections. Browser tabs are relatively short lived ‘peers’, each can only maintain about 100 simultaneous peer connections, and you can’t use WebRTC in workers.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by 1oooqooq on Monday September 30, 2024 @02:29PM
(#41700393)
every time i have to deal with ice and webrtc, i wonder if it is easier to ship a mirai style bot which would hack the modems from the lan side which is even easier than from the wan side, and and just add the portforwards.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by Sean-Der on Monday September 30, 2024 @02:40PM
(#41700500)
My dream would be if WebRTC Agents would experiment with Port Control Protocol.
I don't know if it is the answer, but a world without dependence on STUN servers sounds pretty amazing. I can see why it would feel like kludge, but how could would it be to remove that dependency.
My other wishlist item is to allow mDNS for signaling. Something like https://github.com/pion/offline-browser-communication. It is so silly that I need to exchange a Offer/Answer using a remote server to start a session with a IP Camera in my LAN.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by SahAssar on Monday September 30, 2024 @06:31PM
(#41702819)
> My other wishlist item is to allow mDNS for signaling.
If you load a webpage with from a mDNS address of the camera what other steps are needed? Your browser and the camera should be able to exchange SDP and connect without any third party.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by IgorPartola on Monday September 30, 2024 @06:55PM
(#41702985)
You know what’s easier than all this happy crappy? Goddamn IPv6. How many engineer-hours have been spent trying to work around NAT and IPv4 which could have been spent implementing IPv6? Every browser tab could have its own publicly routable address if we wanted to. And the more work arounds we create the less pressure there is to get over the hump and treat IPv4 as the weird legacy protocol instead of treating IPv6 as the weird new protocol.
I guess engineer activism is all there is really left to do. Enable dual stack, write your code to be IPv6-first (it can automatically do IPv4 connectivity if enabled so really you only need to support one stack and the OS will translate for you; this doesn’t mean you can avoid having IPv4 addresses if you want to have your service IPv4 accessible, just that your code can pretend like every address is an IPv6 address). Test your code without IPv4 connectivity. If you reference localhost, don’t use 127.0.0.1 preferring localhost instead. Don’t be the reason the next engineer has to say “well this codebase isn’t IPv6 compliant so we can’t enable it”.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by kelnos on Monday September 30, 2024 @09:28PM
(#41703829)
My network's firewall doesn't let random incoming IPv6 connections come in, and I wouldn't change that even if I didn't need NAT for IPv4.
Is there a safe protocol to allow applications inside a network to automatically ask edge firewalls for temporary port forwards (or port unblockings, which would be all that would be needed with routable IPv6)? I still can't see how that could be made safe, though: how would the firewall know that the request was coming from a user on the network, and not malware (or a user being duped by malware)?
Re:Peer Calls: WebRTC peer to peer calls for everyone
by LegionMammal978 on Monday September 30, 2024 @10:36PM
(#41704155)
As I understand it, that is basically the purpose of UPnP IGD [0], as well as the newer PCP [1]. But hardly anyone implements these protocols due to the usual concerns around incoming connections.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by IgorPartola on Tuesday October 01, 2024 @10:21AM
(#41708823)
Realistically STUN and TURN are still just ways to get around your firewall rules, are they not? Your firewall is already being bypassed. IPv6 wouldn’t change that fact.
Instead we could implement a better version of UPnP or just open a set of ports specifically used for P2P connections and allow the browsers to open those ports when they expect an incoming connection.
Firewalls serve a purpose but make no mistake they don’t prevent you from bypassing them. Clearly P2P connections are still made all the time.
Your specific question of “how do I know it’s not malware?” doesn’t make much sense. First most default firewalls allow outbound connections which is what malware would do. If you have malicious code running on your machine, the game is already lost.
The job of the firewall is two-fold. First it protects against unwanted flood of traffic to devices whose local resources are too limited to do the filtering themselves. The second is to keep ports closed to hosts outside of your LAN that they shouldn’t have access to. Say you misconfigured your NAS network file system and allow connections from anywhere. Oops. Your firewall protects against that.
But unless you effectively disconnect your laptop from the internet, the firewall won’t stop it from connecting to a remote host. At that point if you open a TCP port that is how you signal that you are requesting an incoming connection. Which is exactly what the current WebRTC system does except it also has to jump through a lot of hoops to establish the connection (steps that any malware would be able to take as well.)
Re:Peer Calls: WebRTC peer to peer calls for everyone
by IgorPartola on Monday September 30, 2024 @07:06PM
(#41703052)
Ship one that uses Tunnel Broker to enable IPv6. Back when Teredo was a thing I wrote an article about how to turn a Raspberry Pi into an add on router for your IPv4 network. Essentially it would get a Toredo IPv6 prefix, then advertise the prefix to your LAN via radvd for stateless auto configuration. The effect would be that soon as you plugged one of these in it would instantly give every device on your LAN IPv6 connectivity without having to do a single thing besides finding a USB and CAT5e cable. Mostly was a proof of concept of course though I did run it like this for a bit. It worked quite well even if it didn’t give you your full bandwidth at all times.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by ranger_danger on Monday September 30, 2024 @01:45PM
(#41699931)
I applaud the real support for TURN (and TCP ICE) and the emphasis on explaining the (IMO very common) issue properly unlike so many other WebRTC projects that think the majority of people will never need it.
I know Firefox now supports outgoing TCP ICE, but what about incoming TCP connections? I wasn't able to find an answer easily from googling.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by Sean-Der on Monday September 30, 2024 @01:53PM
(#41700034)
I don't think Chrome or FireFox support passive ICE-TCP Candidates.
The assumption is that two clients are in the same LAN they would use UDP anyway. If are in two differents NATs doing traversal with TCP isn't support. I have read that it is possible, not something I have tried myself though.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by toast0 on Monday September 30, 2024 @07:16PM
(#41703110)
I've setup TCP and TCP+TLS for an SFU, and at least for my client base, it's barely used, but it is used. Almost everyone can do UDP.
For 1:1 calling, I suspect the number of peers that can do peer to peer TCP, but not UDP is so small that it's not worth bothering.
But that doesn't answer your question, sorry. I know the application I work on doesn't listen for incoming tcp on clients, but I think there is support for it in the WebRTC library. (Not sure if Firefox pulls that in, or wrote their own implementation?)
Re:Peer Calls: WebRTC peer to peer calls for everyone
by toast0 on Monday September 30, 2024 @09:03PM
(#41703709)
Yeah, so your SFU or your TURN server needs to support TCP.
But if you're on public wifi, chances are you can't get inbound tcp to work. And the majority of the peers you might connect to probably can't either. It's not worth the effort to eek a tiny % more peer to peer when you have to build the relay server fallback anyway.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by m463 on Monday September 30, 2024 @08:31PM
(#41703541)
I think a lot of the nonsense on the internet happens because companies become a necessary intermediary for communication.
I believe this would be solved except...
"It is difficult to get a man to understand something, when his salary depends on his not understanding it."
So companies NEED to be intermediaries "for security", "for discovery", because we need TURN, (...and for subscriptions, for ad serving, for revenue idea of the week, etc)
If more folks were able to use peer to peer communications (think families, not phishing/trolling/etc) a lot of this nonsense would go away.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by dboreham on Monday September 30, 2024 @10:00PM
(#41704011)
Quick note that this isn't peer to peer (WebRTC never is) but is a project that allows you to host your own server to facilitate WebRTC channels between browsers you want to provide service for.
Re:Peer Calls: WebRTC peer to peer calls for everyone
by njtransit on Monday September 30, 2024 @10:32PM
(#41704140)
WebRTC can absolutely be peer to peer. You just need some out-of-band method of exchanging ICE candidates. The connections in WebRTC are literally called "peer connections."
I find the code base easy to understand since it’s built by one developer. It’s a consistent read and not sprawling/pointless duplication
It would be like a different timeline where a programming console is not a 'dev' feature and anyone is equal at using code. If our computers become smart like AI then all friction for programming could be erased.
It's hard to elaborate on a world where bookmarklets and user scripting becomes a normal thing where we freely tap into our browser's capabilities.
The Internet is a common public square now. Unfortunately the public is, statistically, an idiot.
For some people (behind CG-NAT), it may just not be possible to get an inbound port at all, so there may be two nodes that cannot directly communicate in the network.
The traditional solution is some kind of relay (see: TURN, skype's supernodes).
As far as I know, and maybe somebody can point me in the right direction, there is no technology available for a webrtc overlay mesh network where some nodes can relay for other nodes. I know webtorrent exists, so it should be possible.
You can see evidence of this problem in this project's README:
> When a direct connection cannot be established, it might be help to use a TURN server. The peercalls.com instance is configured to use a TURN server and it can be used for testing. However, the server bandwidth there is not unlimited.
What's needed, IMO, and please HN tell me why I'm wrong -- is a browser-to-browser mesh overlay system.
I would love to see an array of nodes (across varying levels of NAT) saturate their connections by all relaying to each other as a decentralized stress test that reports real-world p2p bandwidth between providers.
--
Btw, Tailscale has an excellent post on this topic: https://tailscale.com/blog/how-nat-traversal-works
If your side of NAT sucks and STUN fails, you'll probably only be able to connect to someone that has a NAT-traversal friendly configuration. But since you're able to reach them, they could act as a relay to the rest of the overlay network from behind your restrictive NAT.
Imagine I'm running one node that's willing to relay on a publicly accessible IP. If I'm the only node willing to relay on a public IP, then we've pretty much got TURN without the daemon.
If multiple nodes are willing to relay, then we have a general purpose mesh network within the browser sandbox that works on mobile?
Haven’t given up on the idea though!
If you think that method can become popular, then by all means... be the change.
I don't know if it is the answer, but a world without dependence on STUN servers sounds pretty amazing. I can see why it would feel like kludge, but how could would it be to remove that dependency.
My other wishlist item is to allow mDNS for signaling. Something like https://github.com/pion/offline-browser-communication. It is so silly that I need to exchange a Offer/Answer using a remote server to start a session with a IP Camera in my LAN.
If you load a webpage with from a mDNS address of the camera what other steps are needed? Your browser and the camera should be able to exchange SDP and connect without any third party.
I guess engineer activism is all there is really left to do. Enable dual stack, write your code to be IPv6-first (it can automatically do IPv4 connectivity if enabled so really you only need to support one stack and the OS will translate for you; this doesn’t mean you can avoid having IPv4 addresses if you want to have your service IPv4 accessible, just that your code can pretend like every address is an IPv6 address). Test your code without IPv4 connectivity. If you reference localhost, don’t use 127.0.0.1 preferring localhost instead. Don’t be the reason the next engineer has to say “well this codebase isn’t IPv6 compliant so we can’t enable it”.
Is there a safe protocol to allow applications inside a network to automatically ask edge firewalls for temporary port forwards (or port unblockings, which would be all that would be needed with routable IPv6)? I still can't see how that could be made safe, though: how would the firewall know that the request was coming from a user on the network, and not malware (or a user being duped by malware)?
[0] https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protoc...
[1] https://en.wikipedia.org/wiki/Port_Control_Protocol
Instead we could implement a better version of UPnP or just open a set of ports specifically used for P2P connections and allow the browsers to open those ports when they expect an incoming connection.
Firewalls serve a purpose but make no mistake they don’t prevent you from bypassing them. Clearly P2P connections are still made all the time.
Your specific question of “how do I know it’s not malware?” doesn’t make much sense. First most default firewalls allow outbound connections which is what malware would do. If you have malicious code running on your machine, the game is already lost.
The job of the firewall is two-fold. First it protects against unwanted flood of traffic to devices whose local resources are too limited to do the filtering themselves. The second is to keep ports closed to hosts outside of your LAN that they shouldn’t have access to. Say you misconfigured your NAS network file system and allow connections from anywhere. Oops. Your firewall protects against that.
But unless you effectively disconnect your laptop from the internet, the firewall won’t stop it from connecting to a remote host. At that point if you open a TCP port that is how you signal that you are requesting an incoming connection. Which is exactly what the current WebRTC system does except it also has to jump through a lot of hoops to establish the connection (steps that any malware would be able to take as well.)
I know Firefox now supports outgoing TCP ICE, but what about incoming TCP connections? I wasn't able to find an answer easily from googling.
The assumption is that two clients are in the same LAN they would use UDP anyway. If are in two differents NATs doing traversal with TCP isn't support. I have read that it is possible, not something I have tried myself though.
For 1:1 calling, I suspect the number of peers that can do peer to peer TCP, but not UDP is so small that it's not worth bothering.
But that doesn't answer your question, sorry. I know the application I work on doesn't listen for incoming tcp on clients, but I think there is support for it in the WebRTC library. (Not sure if Firefox pulls that in, or wrote their own implementation?)
But if you're on public wifi, chances are you can't get inbound tcp to work. And the majority of the peers you might connect to probably can't either. It's not worth the effort to eek a tiny % more peer to peer when you have to build the relay server fallback anyway.
I believe this would be solved except...
"It is difficult to get a man to understand something, when his salary depends on his not understanding it."
So companies NEED to be intermediaries "for security", "for discovery", because we need TURN, (...and for subscriptions, for ad serving, for revenue idea of the week, etc)
If more folks were able to use peer to peer communications (think families, not phishing/trolling/etc) a lot of this nonsense would go away.
most users won't leave the mindset of "there's an app for that"
Different topologies are better for different use cases. 1:1 vs group calls in this case!