如何隐藏您的 IP 地址

如何隐藏您的 IP 地址

正如我之前在关于 隐私浏览和公共 WiFi 的帖子中提到的,如果您确实希望将您在互联网上的活动保密,您需要某种方法来保护您的 IP 地址(即互联网上的机器用来与之通信的地址)您的计算机)以及您要访问的服务器的 IP 地址。您可以使用多种不同的技术来实现此目的,但它们的属性略有不同。这篇文章对各种选项的描述可能过于冗长。

基础

像往常一样,对于任何安全问题,我们都需要从威胁模型开始。我们关注两种主要的攻击模式:

  • 服务器学习用户的 IP 地址并使用它来识别用户或关联他们的活动。 本地网络了解用户要去哪些服务器。
  • 服务器使用根据您的 IP 地址确定的明显地理位置来限制对某些类型内容(足球、BBC 等)的访问。
  • 当然,您是否认为最后一项实际上是一种应该防御的攻击形式取决于您的观点以及您是《神秘博士》粉丝的程度。

防御威胁 (1) 和 (3) 的基本技术是通过某种匿名中继推送流量:
请添加图片描述
如上图所示,客户端连接到中继并告诉它连接到哪里。然后,它将流量发送到中继,中继将其转发到服务器。中继将客户端的 IP 地址替换为自己的 IP 地址,因此服务器只能看到中继的地址。一般来说,中继会为相当多的客户端提供服务,因此服务器将很难区分哪个客户端是哪个(k-匿名)。

这个简单的版本清楚地解决了威胁 ,并且如果中继运营商允许您选择自己所在地理区域之外的 IP 地址,则还可以解决威胁 。为了防御威胁 ,您还需要加密到中继的流量,以便网络上的攻击者无法看到您正在连接到哪个服务器以及您发送到它的流量(请参阅此处了解更多信息 )这种形式的数据泄露)。理想情况下,您还可以对到服务器的端到端流量进行加密(使用 TLS 或 QUIC),但这只是一般的良好做法,对于中继提供的隐私而言,不需要这样做。

中继选项

这种基本设计是每个中继系统的核心,但细节在重要方面有所不同。变化主要有三个轴:

  1. 发生中继的网络层
  2. 网络中的跳数
  3. 商业模式

我们将在下面介绍其中的每一个。

网络层

第一个主要变化点是中继发生的层。要理解这一点,需要了解一些有关互联网网络协议如何工作的背景知识。

IP

毫不奇怪,Internet 上最基本的协议就是所谓的Internet 协议 (IP)。IP 是所谓的“分组交换”协议,这意味着基本单位是称为分组的独立消息。数据包就像一封信,它有源地址和目标地址。这意味着当您在网络上发送 IP 数据包时,Internet 可以通过查看数据包来自动将数据包路由到目标地址,而无需了解任何计算机的其他状态。简化的 IP 数据包如下所示:
请添加图片描述
数据包中的主要内容是从源发送到目的地的实际数据,也称为有效负载。有效负载的长度可变,最大通常约为 1500 字节。该数据包还有一个下一个协议字段,它告诉接收者如何解释有效负载(稍后会详细介绍)和一个长度字段,以便可以知道整个数据包的长度,包括可变长度有效负载。

使用 IP 非常简单:您的计算机在线路上传输 IP 数据包,然后 Internet 使用目标地址来确定将其路由到何处。当有人想要传输给你时,他们也会做同样的事情。

TCP

如果您想要做的只是从一台机器向另一台机器发送一千个左右的字节,那么单个 IP 数据包可能没问题,但实际上这几乎不是您想要做的。特别是,想要发送比 1500 字节长得多的数据流(例如文件)是很常见的。在较高的层面上,这是通过将数据分解为一系列较小的块并在单个数据包中发送每个块来完成的。但当然,生活并不那么简单。例如:

  1. 数据包可能会丢失,并且必须重新传输以便接收者收到它们。
  2. 数据包可能会被重新排序,接收者必须知道将它们放入哪个顺序。
  3. 一般来说,网络无法一次处理整个大文件,因此数据必须随着时间的推移逐渐传输。发送者必须有某种方法来确定适当的发送速率。

传输控制协议(TCP)负责处理这些问题。TCP 的细节太复杂,无法在这篇博客文章中介绍,但在较高的层次上,数据流被分成段,每个段都有一个长度和一个序列号,它告诉您它在流中的位置。每个段都在 IP 数据包中发送。当接收器获得一个分段时,它可以查看序列号以重建流,并能够检测数据包丢失的间隙。TCP 还包括一个确认机制,接收方告诉发送方它已收到哪些数据段;这允许发送方重新传输丢失的数据包并适当调整其发送速率。TCP需要在两个端点之间设置状态;这种状态称为“TCP 连接”。

当然,除了 TCP 之外,还有其他可以在 IP 上运行的协议(例如,稍后提到的 UDP)。这就是为什么您需要 IP 中的“下一个协议”字段:告诉接收者 IP 有效负载中的协议是什么。

传输层安全协议

TCP 是一个非常古老的协议,与大多数较旧的互联网协议一样,它是在加密广泛使用之前设计的。从安全角度来看,这显然是个坏消息,最终人们开始修复它。标准解决方案是通过传输层安全性 (TLS)传输数据。TLS 基本上提供了 TCP 连接之上的加密且经过身份验证的数据流的抽象。与 TCP 一样,您需要设置某种状态才能使用 TLS,这称为“TLS 连接”。我可以无休止地谈论 TLS,但我不会在这里这样做。

UDP 和 QUIC

应用程序本身并不实现 TCP。相反,它内置于操作系统中,特别是所谓的操作系统内核,即操作系统中始终运行并负责管理整个计算机的部分。客户端应用程序告诉操作系统创建到服务器的 TCP 连接,这会在客户端创建所谓的“套接字”。客户端向套接字写入数据,内核自动将其打包成 TCP 报文段并发送给对方,负责重传、速率控制等。内核还从对方读取 TCP 报文段,并将其提供给对方。要阅读的应用程序。通常,应用程序本身实现 TLS,或更可能使用某些现有的 TLS 库。

这很方便,因为应用程序不需要携带自己的 TCP 实现,但不方便,因为它不灵活:假设应用程序想要对 TCP 进行一些更改以使其更高效?如果不更改操作系统,就无法做到这一点。相比之下,只需发布​​新版本的应用程序即可轻松更改 TLS 行为。这在 2010 年代末变得尤为突出,当时人们想要增强 TCP 的性能,但由于操作系统的发展速度不够快而无法实现。解决方案是发明一种可以完全在应用程序中实现的新协议:QUIC。

QUIC 有点像 TCP 的更高级版本和 TLS 加密技术的组合(事实上,它在内部使用了 TLS 的许多部分)。然而,由于它可以完全在应用程序中实现,因此可以非常快速地进行更改。不幸的是,在大多数操作系统中,应用程序不允许直接写入IP数据包,因此QUIC通过称为用户数据报协议(UDP)的协议运行。UDP 是一种非常简单的协议,它只允许应用程序通过 IP 发送单个数据单元(数据报)。因此,QUIC 运行在 UDP 上,UDP 运行在 IP 上。

协议栈

通常将其视为协议“堆栈”,并将其可视化在称为“层图”的图片中,如下所示:
请添加图片描述
TCP/IP 层图

我还根据该图绘制了哪些部分是在应用程序中实现的,哪些部分通常是操作系统的一部分。当应用程序想要写入数据时,它从堆栈顶部开始,数据向下移动到网络。当数据从网络传入时,它会在堆栈中向上移动到应用程序。

就数据在网络上出现的方式而言,每一层通常在数据之前或之后添加自己的封装。下图显示了两个示例。第一个是通过 TCP 发送的数据,在本例中为字符串“四分七年前”。TCP 添加自己的标头以及序列号等,然后将其传递到 IP 层,IP 层添加带有源地址和目标地址的 IP 标头。第二个示例是通过 TLS 发送相同的数据。TLS 层对数据进行加密(如剖面线所示)并添加自己的标头。然后将其传递给 TCP,TCP 添加自己的标头等。接收进程反转这些操作。

需要了解的重要一点是 TCP 和 TLS 提供数据流的抽象,而不是一组记录。这意味着应用程序只需写入数据,TLS 堆栈或 TCP 堆栈会将这些块合并为一个记录(数据包)或在方便时将它们分解。TCP 堆栈甚至可能使用两个不同的帧发送相同的数据两次。例如,假设应用程序写入“Hello”,然后内核在单个数据包中发送它。当数据包在传输过程中时,应用程序会写入“Again”。如果两个数据包都丢失,并且内核必须重新传输它们,它可能会将它们写入单个 TCP 段(“HelloAgain”)。

哪一层

以此为背景,我们准备讨论多样性的一大要点:我们在哪一层中继流量?至少对于中继加密流量来说,有两个主要选项。

  1. 中继IP层流量
  2. 中继应用层流量(即通过 UDP 或 TCP 传输的数据)
    我在下面介绍了这两个内容。

中继 IP 流量

在网络层 (IP) 加密流量是解决网络安全问题的明显方法之一,因为它具有重要的优势,一旦设置完毕,它就可以保护 两个端点之间的所有通信。这方面的工作可以追溯到 20 世纪 70 年代,但 IETF 于 1992 年开始为此目的标准化技术,名称为 IPsec。最初的想法实际上并不是我上面讨论的那种中继系统,而是对相互通信的两台机器之间的流量进行加密。因此,举例来说,假设我的客户端想要与您的服务器进行通信,我们会获取想要发送的 IP 数据包,对其进行加密,然后直接发送。

与我们上面讨论的协议一样,IPsec 是一种封装 协议,这意味着要加密从 A 到 B 的 IP 数据包,我们需要获取整个原始数据包,对其进行加密,然后将其填充到另一个 IP 数据包中,如下所示:

请添加图片描述
在我上面讨论的场景中,内部(加密)IP 标头和外部(明文)IP 标头将具有相同的寻址信息,但当然可以让它们具有不同的寻址信息,这对于创建所谓的虚拟专用网络(VPN)。这里的动机是,您有两个网络(例如同一家公司的两个办公室),并且您希望将它们连接起来,就好像它们位于同一位置一样。在办公室内,您相信电线没有被篡改(这是在 WiFi 之前),因此您不会加密所有数据(我知道,这现在听起来很天真),所以您真正想要的只是连接办公室 1 和办公室 2 的线路。这种专用连接(过去称为“租用线路”)的购买成本非常昂贵,而您实际上拥有的是 Internet 连接,可以让您连接到每个人。但是,如果您对办公室 1 和办公室 2 之间的流量进行加密,那么您可以模拟拥有自己的专用线路。因此虚拟专用网络。典型的拓扑如下所示:
请添加图片描述
在此场景中,您有两个办公室,每个办公室都有一个“VPN 网关”,用于检测从办公室 1 到办公室 2 的流量,并在发送之前对其进行加密。其他流量(比如 Facebook)保持不变。当远端 VPN 网关收到数据包时,它只是删除封装并将其丢弃到网络上。效果就好像只有一个网络而不是两个网络。

也可以在更简单的场景中部署这种东西,其中单个用户通过 VPN 连接到他们的办公室网络,例如,如果您在酒店远程工作,如下图所示:
请添加图片描述
这里的效果是,就像您在办公室一样,但实际上并非如此。但这带来了一个真正的问题,即远程用户的计算机没有正确的 IP 地址:它有一个与用户的家庭或办公室关联的 IP 地址(上图中的 192.0.2.1),但您希望它看起来在办公室,这意味着它必须有一个办公室 IP 地址(以 203.0.112 开头)。

有两种主要方法可以实现这项工作。首先,VPN 网关告诉用户设备它希望其具有什么 IP 地址,然后用户设备将其放入内部IP 标头中,同时让外部 IP 标头具有实际地址。例如,内部(加密)IP 标头将具有 203.0.11.50,外部(明文)IP 标头将具有 192.0.2.1。另一种方法是让两个标头都具有用户的实际 IP 地址,并让 VPN 网关将该地址转换 为适合办公网络的本地地址(并在回程时以其他方式进行转换)。请注意,在这两种情况下,网关都需要做一些工作,在第一种情况下要跟踪分配的地址并强制客户端使用正确的地址,在第二种情况下要进行转换。

有了这个背景,我们终于可以讨论我们开始的问题陈述,即隐藏用户行为。毫不奇怪,您可以使用与远程访问相同的技术,不同之处在于 VPN 网关直接位于 Internet 上,而不是某个企业网络上,如下所示:
请添加图片描述
对于服务器来说,这看起来就像用户正在从 VPN 网关进行连接,无论 VPN 网关的 IP 地址是什么。客户端的本地网络只看到与 VPN 服务器的连接,但不知道数据最终去往何处。

在这里,我重点讨论了 IPsec,但使用哪个加密层协议来承载 IP 数据包并不重要:它们只是被封装并端到端传输。在实践中,我们看到 VPN 部署了多种传输协议,包括 DTLS、 OpenVPN、 WireGuard 和QUIC。从用户的角度来看,这些协议的属性基本相同。大多数标有“VPN”的产品都使用这些协议中的一种或多种来保护 IP 层的流量。

中继应用层流量

如上所述,在 IP 层保护流量的好处在于它可以保护系统上的所有流量。但不好的是,保护IP层流量需要操作系统的配合。这会产生一些不良后果:

  1. 您的代码不可在操作系统之间移植。
  2. 许多操作系统需要某种管理员访问权限才能安装或配置在 IP 层运行的内容。
  3. 您通常受限于操作系统为您提供的任何功能。例如,您可能无法轻松保护某些流量而不是其他类型的流量。

这些问题可以通过应用层而不是 IP 层的中继来解决。这可以完全在应用程序中实现,无需接触操作系统;应用程序只是连接到中继(例如,通过 TCP)并将流量发送到中继(希望加密到服务器)。中继与服务器建立自己的传输级连接,并将应​​用程序级流量发送到服务器,如下所示。
请添加图片描述
请注意,在此图中有两个 TCP 连接,一个在客户端和中继之间,一个在中继和服务器之间。客户端通过 TLS 连接到中继,然后创建到服务器的端到端 TLS 连接(当然,您可以不加密传输到服务器的数据,但不要这样做)。

这种设计的一大优点是它可以轻松地中继某些类型的流量,而不是其他类型的流量。作为一个具体示例,请考虑安全浏览,它将有关用户浏览历史记录的信息泄漏到安全浏览服务器。您可能想要代理安全浏览检查(可以非常便宜地完成,因为流量不多),但不代理一般浏览流量(流量大得多,因此更昂贵)。这对浏览器来说很容易做到,因为它知道哪个流量是哪个流量,但对于 IP 层系统来说则更困难,因为它必须以某种方式区分不同类型的流量。这不一定是不可能的,但工作量要大得多。例如,如果安全浏览使用与 Google 其余部分不同的 IP 地址,那么您可以仅中继该流量,但如果它共享相同的 IP 地址,那么您也将加密人们的搜索流量。

许多IP隐藏系统在应用层进行中继,包括Tor、Apple的iCloud Private Relay和Firefox Private Network。通常,这样的系统被称为“代理”。Apple 的系统很有趣,因为它在操作系统中主要是通过挂钩 Apple 的更高级别的网络 API 来实现的。即便如此,它仅适用于 Safari,不适用于其他应用程序。

有多少跳?

无论采用何种中继技术,最终中继都需要将流量发送到服务器,这意味着它必须知道您正在连接到哪个服务器。但这会产生一个新的隐私问题:您连接到中继,然后告诉它要连接到哪个服务器。这意味着,虽然您已经阻止服务器了解您的身份,但中继本身仍然存在隐私问题。中继将有一些关于如何处理这些信息的隐私政策(理想情况下,根本不保留日志),但这只是您必须信任他们的事情。更好的是有某种形式的技术保护。

这里提供技术保护的标准方法是采用多层中继,如下图所示:
请添加图片描述
其工作原理是客户端连接到中继 1。然后它告诉中继 1 将其连接到中继 2。与我们的单跳系统一样,该数据通过加密通道发送到中继 1,并且本身会加密到中继2. 然后,客户端告诉中继 2 将其连接到服务器。因此,发送到服务器的数据由客户端以嵌套方式加密三次:一次发送到服务器,然后发送到中继 2,然后发送到中继 1。每个跃点都会剥离一层加密并将其传递到下一跳。

结果是没有任何一个实体(除了客户端)能够同时看到用户 的身份和它所连接的服务器的身份。这是每个人看到的:

请注意,如果两个中继串通,它们可以一起揭露客户端的地址和服务器的地址。然而,如果其中任何一个是诚实的,那么客户端的隐私应该受到保护,因为两者都不能轻易与服务器串通以了解此信息:中继 2 因为它不知道客户端的地址,而中继 1 因为(希望)客户端与中继的连接2 是在此时间段内与中继 2 建立的众多连接之一。最后一部分的工作效果取决于系统的运行规模、客户端保持连接的时间长短、是否重用中继 2 的连接来连接多个服务器等。

当然,为了使其发挥作用,继电器需要由不同的实体来操作。否则就无法有效保证不串通。这包括不在同一云服务提供商(例如 AWS)上运行。有时您会听说多跳 VPN,但如果同一家公司提供两个 VPN 服务器,那么这并没有什么帮助。iCloud Private Relay 的一个很好的功能是,您的帐户在 Apple 上,但他们会与不同的提供商安排多个跃点,因此您无需担心细节。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值