Webrtc 常规计算机的静态和公共IP地址

Webrtc 常规计算机的静态和公共IP地址,webrtc,ipv6,p2p,nat,ipv4,Webrtc,Ipv6,P2p,Nat,Ipv4,我想用WebRTC在浏览器上做一个消息传递应用程序,但我想摆脱像STUN和TURN服务器这样的第三方(我也想摆脱信令服务器,但首先要做的是)。我希望用户在浏览器localStorage中以键值方式保留联系人:人名=>IP地址 我真的不在乎用户如何找到自己的公共IP地址(他们可以做一个ipconfig,因为没有web API来检索它),也不在乎他们如何分发它(他们可以使用像Messenger这样的集中式服务将公共IP地址提供给朋友,或者他们可以在名片上使用二维码) 但我的主要问题是,我希望这些公共

我想用WebRTC在浏览器上做一个消息传递应用程序,但我想摆脱像STUN和TURN服务器这样的第三方(我也想摆脱信令服务器,但首先要做的是)。我希望用户在浏览器
localStorage
中以键值方式保留联系人:人名=>IP地址

我真的不在乎用户如何找到自己的公共IP地址(他们可以做一个
ipconfig
,因为没有web API来检索它),也不在乎他们如何分发它(他们可以使用像Messenger这样的集中式服务将公共IP地址提供给朋友,或者他们可以在名片上使用二维码)

但我的主要问题是,我希望这些公共IP地址是静态的,因为我不想在每次网关更改我的公共IP地址时通知我的所有朋友更新他们的联系文件

在IPv4中,可用地址太少(只有40亿),所以公共静态地址都保留给网站和住宅网关。每当我想访问Internet时,我的网关都会为我的计算机打开一个特定的端口。例如,如果我的网关具有公共地址
1.2.3.4
,则我的计算机的“公共地址”将暂时为
1.2.3.4:3000
。这个过程称为NAT。要找到自己的“公共地址”,必须向STUN服务器发送请求,该服务器将用它看到的IPv4地址和端口进行响应。但是网关会在某个点关闭端口的连接,所以这不是我想要的公共静态地址

但在IPv6中,它是不同的,可能的地址数量高得离谱(2^128),因此理论上我们可以给世界上每台计算机一个静态公共地址。NAT基本上是无用的(我这里不是说防火墙)。但同样存在一个问题,在IPv6中,有一个地址是静态的但不是公共的,还有一个或多个地址是公共的但不是静态的。所以IPv4并没有真正改变什么,它仍然不能解决我的问题

我有两个问题:

  • 如何为普通计算机提供公共和静态地址?我不希望我的用户干预他们的路由器/ISP或在他们的计算机上安装任何东西
  • 为什么我们都没有静态和公共IPv6地址?这背后有设计选择吗

谢谢您的帮助。

您的问题不是真正的编程问题,因此我假设您需要了解这一点,因为您正在开发使用IPv6的软件。从应用程序的角度来看:

  • 你不需要轮流去发现你自己的公共广播。没有NAT,您的地址不会被网络更改,您的本地地址是您的公共地址。您只需要让您的软件询问操作系统当前配置的地址是什么

  • 使用IPv6,它通常不是向连接的设备发送地址的网关。网关只将网络前缀(a/64)传送到网络,所有设备都选择自己的地址(通常每个设备有多个地址)

  • DHCPv6确实存在,但通常不用于在设备上配置IPv6地址。它可以在无状态模式下用于配置域名、DNS解析程序等,但这与分配地址无关

    因此,设备在网关通信的前缀内选择自己的地址。它如何选择

    最初,设备使用其接口MAC地址作为后缀(使用改进的EUI-64算法)。问题是,如果你有一圈,例如,你连接的在线服务可以跟踪你的设备。因为无论您连接到哪个网络,地址的最后64位都将包含您唯一的MAC地址。通过这种方式,您可以从工作地点跟踪您的设备,从家里跟踪到您最喜欢的咖啡馆等

    如今,操作系统使用隐私扩展使您的IPv6地址无法追踪。通常有一个稳定的地址链接到网络前缀,因此每次连接到同一网络时,您都会得到相同的地址。该地址对于点对点通信非常有用

    但他们走得更远。通常还存在一组随时间(半)随机变化的隐私地址。您的设备可能每天甚至每小时生成一个新地址。这使得在线服务更难确定是否有一台设备更改了其隐私地址,或者是否有多台设备。因为这个地址会随着时间的推移而改变,所以对于短期的出站连接来说是很好的,但是对于在服务器上接受入站连接来说并不是很有用。为此,请使用我在上一段中提到的稳定地址

    最困难的可能是如何向操作系统询问可用地址。看着我自己的macOS机箱,我看到:

    en2: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether c8:e0:eb:5c:af:61
        inet6 fe80::1074:8568:e447:d9e3%en2 prefixlen 64 secured scopeid 0x12
        inet6 2a02:xxxx:xxxx:xxxx:3e:873f:837:1417 prefixlen 64 autoconf secured
        inet6 2a02:xxxx:xxxx:xxxx:b19c:71c5:1de8:8fde prefixlen 64 autoconf temporary
    
    en2:flags=8863 mtu 1500
    乙醚c8:e0:eb:5c:af:61
    inet6 fe80::1074:8568:e447:d9e3%en2预桥64安全作用域ID 0x12
    inet6 2a02:xxxx:xxxx:xxxx:3e:873f:837:1417预桥64自动锁紧
    inet6 2a02:xxxx:xxxx:xxxx:b19c:71c5:1de8:8fde预桥64自动连接临时
    
    您可以看到长期
    安全
    地址和短期
    临时
    地址


    如果不知道您开发的是哪种操作系统和哪种编程语言,我将无法进一步帮助您。请调整您的问题以包含该信息。

    “…住宅网关不会将静态公共IPv6地址分配给与其连接的计算机…”现代主机操作系统用于IPv6寻址。可以禁用该功能,但主机配置在这里是离题的。谢谢您的回答。对不起,我的问题一点也不清楚,我已经对它进行了大量的编辑。现在几乎是同一个问题了。