我有以下设置:
+-----------+ SSH Tunnels Over Socks5 Proxy +--------------+
| | | |
| Linux PC +------------------------------------+ Proxy Server |
| | | |
+-----------+ +--------------+
|
| SSH Tunnels
+-------------------------+
| |
| |
+-----------+ +-----------+
| | | |
| PI A | | PI B |
| | | |
+-----------+ +-----------+
| |
| WAN / Internet | WAN / Internet
| |
v v
首先:我并不是想破解操作系统指纹识别技术这里或者在 SuperUser 上的其他问题中。我在整个链/堆栈中使用 Linux,并不介意被这样识别。
背景: 由于审查制度,我在另一个国家/地区访问互联网。我在两个不同的住宅地点(不同的 ISP)拥有两台相同的 Raspberry PI(型号 3B+、克隆的 SD 卡,仅修改了 IP 以在各自的 LAN 中工作)。我彼此独立地使用它们,它们充当住宅代理来访问互联网。
流量通过 SSH 隧道路由到 PI。这些 SSH 隧道本身通过代理服务器通过加密的 Socks5 隧道传输(两个 PI 都一样),以隐藏它们免受本地国内审查/IP 阻止。
到目前为止,一切正常。
问题: 当我运行测试时https://browserleaks.com/ip和https://doileak.com我得到了“PI A”和“PI B”不同的结果。
对于“PI A”,我获得 MTU 1500 和连接类型“以太网或调制解调器”,而对于“PI B”,我获得 MTU 1440 和连接类型“通用隧道或 VPN”。
我希望它们都被标识为连接类型“以太网或调制解调器”,以隐藏它们是代理的事实。根据我的研究,这些测试似乎使用 p0f 的 TCP/IP 指纹识别。
两个 PI 的接口均设置为 MTU 1500,iptables 配置也相同。它们具有相同的硬件,“PI B”中的 SD 卡基本上是“PI A”的克隆。两个 PI 都通过以太网直接连接到各自的路由器。此外,对于 Linux PC 和代理服务器,MTU 设置为 1500(如果我没记错的话,这应该没什么区别)。
鉴于 PI 的设置相同,我遗漏了什么?
PS:标题可能不太理想,但我不知道如何用几句话来描述这个问题
答案1
PI A 和 PI B 中配置的 MTU 为 1500,是以太网数据包的默认 MTU。此 MTU 是仅有的第一个路由器(您拥有的互联网路由器)和 PI 之间。
PI 连接的路由器(路由器 A)连接到下一个路由器(路由器 B)。然后路由器 B 连接到另一个路由器(路由器 C)。依此类推。此路由终止于目的地(例如 browserleaks.com 的服务器)。此路由取决于您的地理位置,并且有点随机。它还会随时间而变化。
路由器 A 和路由器 B 之间的 MTU 可能 >= 1500,但这不能保证。如果它小于 1500,那么您的数据包将被拆分,如您所见这里。browserleaks.com 还会显示较小的 MTU。
结论:
browserleaks.com 显示支持的最大 MTU在整个路线上从客户端到服务器。
PI A 和 PI B 获得不同的 MTU 是正常的,因为它们可能采用不同的路线。
要验证他们是否使用不同的路线,您可以运行(在您的 Linux PC 上):
traceroute browserleaks.com
这将列出您和服务器(以及服务器)之间的所有路由器。为每个 PI 运行一次。
还要注意,IPv6 上的数据包不能被拆分。