我使用 BTGuard VPN,刚刚随机收到 Little Snitch 发出的连接拒绝弹出窗口。LS 中的条目注释如下:
2019年5月29日,vpn.btguard.com 尝试与 openvpn 建立传入连接。由于这种连接不能延迟,因此请求被自动拒绝。
答案1
这可能是您上次连接时遗留的数据包。例如,OpenVPN 客户端已重新启动,但服务器仍尝试通过上一次会话发送数据。
OpenVPN(默认情况下,在 BTGuard 的配置中)通过 UDP 运行,UDP 是一种无状态传输协议,其中不明确的“建立连接”或“断开连接”数据包,没有序列号,除了一对端口号之外什么都没有。
在 TCP 中,主机和防火墙在看到 SYN(握手)数据包后立即开始跟踪连接。但在 UDP 中,由于不存在任何类型的“连接”数据包(只有数据包),因此防火墙只是在以下情况下开始跟踪“连接”:任何他们看到的包。
在 TCP 中,主机和防火墙在看到 FIN(断开连接)数据包后会立即忘记连接。但在 UDP 中,由于不存在任何类型的“断开连接”数据包,因此防火墙必须使用超时来使旧的“连接”过期(例如,只要空闲 60 秒、180 秒或 10 分钟或类似时间,就会删除该条目)。
诸如 OpenVPN 之类的程序当然可能在其应用层协议中有“连接”/“断开连接”命令,但防火墙对此一无所知 - 它只能看到包含一些数据的 UDP。
因此有时会发生以下情况:
OpenVPN 重新启动/退出,防火墙忘记与旧进程相关的所有条目,或者 VPN 连接空闲时间过长,防火墙因达到到期时间而忘记它。
但是,BTGuard 服务器尚未收到 OpenVPN“断开连接”数据包,并且也没有因为超时而忘记连接,因此它会尝试通过旧会话将一些数据发送回给您。
防火墙看到传入的数据包,并无法知道它是一个新的“连接”还是属于以前建立的连接。(并且它也无法知道它最初是向外建立的还是向内建立的。)
由于防火墙不记得这个端口对(因为在第 1 部分中忘记了它),它只是假设它必须是新的。而且由于它是一个传入数据包,防火墙会显示有关“传入连接”的警告。
虽然这只是猜测,但这是一个合理的猜测。