是否可以合理地说,我请求数据的任何服务器,无论我是否落后于 Tor、VPN 等,实际上都可以在数据报的标头中找到我的源 IP,从而知道数据的真实来源要求。
在 IPv4 上没有。虚拟专用网络通过在您和 VPN 提供商之间连接一条隧道来工作,这样您就可以通过专用网络进行路由 - 10.0.0.0/8、192.168.0.0/24 或 172.16.0.0/16 地址空间之一。这就是为什么它是一个“私人网络”。虚拟位来自您实际上是通过公共互联网路由的事实。
然后,您对互联网的访问就像家庭路由器一样被“代理”,即网络地址转换。由于没有通往私有 IP 地址的路由,与公共 IP 地址不同,面向公众的路由器必须负责将数据包转发到 Internet 并跟踪回复的目的地。
一种方法是通过源端口,但这不是唯一的方法。在这种情况下,数据包的源端口以及接收回复的端口会告诉路由器要将数据包发送到哪个私有网络主机。
因此,您将“似乎”拥有 VPN 出口网关的 IP 到看到您的请求的服务器。
简化的 Tor 电路就像网关处理乘以 3。每个步骤都知道发送给谁以及返回给谁,但不知道其他任何事情,每个步骤都负责路由。所以,在你和互联网之间,你有一个 Tor 入口服务器、一个中继服务器和一个 Tor 出口节点。例如,中继服务器知道将数据包从入口服务器中继到出口节点,但仅此而已 - 它不知道只有出口知道的数据包的最终目的地,或者只有入口知道的源。
这与传统路由完全相反,传统路由在公共互联网上明确具有源 IP 和目标 IP。路由器不会重写它,而是简单地尝试计算最有效的“下一跳”(可以将数据包发送到的直接连接的硬件)。在典型的互联网通信中会发生多个这样的步骤(请参阅跟踪路由),并且由于 tor 节点是互联网通信,因此 tor 节点数据包还将通过具有已知源和目的地(关键仅是中继)的互联网通过不同路由的多个节点跳跃。
我写了很多文字,所以也许值得回顾一下 VPN 场景中数据包发生的步骤。假设我正在发送一个 HTTP 获取请求。
我连接到 VPN。这样做的过程会保留我的 VPN 流量路由,但会通过 VPN 网关创建默认路由并使我成为他们专用网络的一部分。我的 VPN 提供商的示例:
$ ifconfig
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.0.9.14 netmask 255.255.255.255 destination 10.0.9.13
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 48 bytes 23132 (22.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55 bytes 12215 (11.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ ip -4 route
0.0.0.0/1 via 10.0.9.13 dev tun0
default via 10.0.0.1 dev wlp2s0 proto static metric 1024
10.0.0.0/16 dev wlp2s0 proto kernel scope link src 10.0.0.109
10.0.9.1 via 10.0.9.13 dev tun0
10.0.9.13 dev tun0 proto kernel scope link src 10.0.9.14
notareal.ip.200.165 via 10.0.0.1 dev wlp2s0
128.0.0.0/1 via 10.0.9.13 dev tun0
如果你仔细看这个,你会发现有些奇怪。默认路由仍然存在,但其度量设置为高(低优先级),而 0.0.0.0/1 和 128.0.0.0/1 - 包括除 notareal.ip 行之外的所有 IPv4 - 通过 tun0 发送。该线路存在,以便 VPN 流量仍然可以通过正确的原始接口。
我制作一个分组并发送它。根据我上面提到的方案,当我说我想将此数据包发送到 stackexchange.com 时,我的路由表指示我将其转发到 VPN 网关,因为这是最高优先级的匹配路由。
- 在内部,VPN 软件执行其加密操作并将数据包写入 VPN 网关。这也在路由表中查找并通过实际网络。它在另一端展开。
- 在另一端,数据包到达网关并进行 NAT,或代理,或您的提供商使用的任何方案。然后他们离开公共互联网。
- 当通过已建立的 TCP 连接收到回复时,会发生相反的过程。
- 无论如何,UDP是无连接的;入站 UDP 和外部发起的 TCP 连接是不可能的,因为我没有公共路由。
本质上,这很像您的家庭网络 NAT,除了虚拟。
在这种情况下,我使用的是 OpenVPN;如果您尝试这些步骤,您会看到什么取决于您的提供商、VPN 软件等,并且本质上是相同的。
现在回答您的问题“VPN 真的会掩盖您的身份吗?” - 嗯,有很多如果、但是和 ummms,但这是我能想到的最简单的细分:
- 如果您是服务器运营商并且有人正在使用 VPN,那么您不太可能识别出他们。你会很容易地看到来自 VPN 提供商的流量,但你不会知道它最初来自谁,除非:
- 您是具有某种身份验证机制或能够在目标上存储持久“跟踪”cookie 的服务器操作员。在前一种情况下,您甚至可能知道他们是谁;在后一种情况下,您知道他们是一个独特的个体,您不会确切知道是谁。然而:
- VPN 提供商可以看到所有内容——您发出的 DNS 请求、数据包的去向等。从这个意义上说,它们现在是您的 ISP。即使您匿名向他们付款并将详细信息提供给完全隔离的角色,他们仍然知道您的数据包来自哪里。这样做的结果是与您的真实身份相关联,或者至少与支付互联网账单的人相关联。
因此,如果你给执法部门足够的动机,他们会很容易找到你。
IPv6 是一个有趣的领域。我不知道有多少人经常通过 VPN 路由 ipv6,主要是因为我唯一可以通过 IPv6 连接命名的人是我……但是,它可以做到。IPv6 没有私有地址空间的概念(有点谎言,它们确实存在),因为一切都应该是世界可路由的。事实上,有些人认为 NAT 打破了互联网作为单一全球可路由网络的最初概念设计。
无论如何,您可以在此处阅读有关它的更多信息- 您会获得分配给您的 IPv6 可路由块,而不是私有范围。
但是,如果您想知道,可公开路由并不一定意味着数据包会被接受,它只是意味着它们可以被定向到那里。仍然可能有防火墙阻止所有传入连接。
编辑:作为一个有趣的教育练习,尝试在 VPN 接口(在我的情况下为 tun0)上使用wireshark 与实际的硬件接口监听流量:)