通过隧道将数据包从网关传输到服务器,无需改变源 IP

通过隧道将数据包从网关传输到服务器,无需改变源 IP

网络布局图像,无法嵌入

我有以下挑战:

我有一个动态 IP(几乎每天都会变化)并且想要一个静态 IP。

我需要静态 IP 用于某些服务,并且不能在 dns 级别使用 dyndns 或某些东西。

我迄今为止尝试或研究过的内容

首先,我尝试使用 iptables 转发将数据包从网关转发到调制解调器,但这会将数据包的源 IP 更改为网关 IP。

然后我尝试通过 ssh 隧道端口连接到我的服务器,但效果相同。

然后我尝试了 nginx、haproxy......但这会终止我的 ssl 连接,并且我在主机托管商处有证书,我对此并不满意。

然后我发现了 GRE、IPinIP、tincvpn、ipsec 传输模式,或者我想也许我必须自己实现一些东西,但我想先征求一下想法。

问题

我如何将传入的数据包(例如网关上的端口 80)传输到我的服务器,以便我可以看到客户端的源 IP,并且我的服务器可以回答该数据包,以便客户端获得响应?此外,如果我的家庭网络的公共 IP 发生变化,我希望该隧道重新连接(或类似)。如果您需要更多信息,我很乐意添加。

答案1

缺少封装(通常是隧道),您无法让实际数据包上的源 IP 保持原样。但是,您可以寻找其他方法来保留源 IP/端口。

通常情况下,您无法直接从动态地址响应,因为尝试伪造静态 IP 的本地系统应该会被上游丢弃。响应必须先返回到您的托管商,然后才能再次发出。有 IPVS 直接路由(也称为服务器返回)等解决方案,但它们需要与您的托管商 IP 位于同一物理网段上。

最简单的方法可能是 IVPS TUN,它在主机和您的服务器之间建立隧道。如何运行隧道由您决定,它只是让您在某种程度上伪造寻址。您必须在主机上拥有专用 IP 才能执行此操作。

在软件方面,由于网络修改较少,您不必在主机上终止 SSL。例如,您可以在纯 TCP 模式下使用 HAProxy,使用 PROXYv2 协议传送原始源 IP 数据。一个示例配置可能在主机上以 TCP 模式运行 HAProxy,明确使用 SSL 客户端证书安全地连接到最终服务器,并使用 PROXYv2 协议传送原始 IP 数据。

您仍然需要一种方法来让 HAProxy 可靠地连接到服务器,即使它的 IP 发生变化:这可以是动态 DNS(因此 HAProxy 会查找服务器的活动地址,并且永远不会向最终用户透露它),HAProxy 中的各种配置黑客用于动态服务器地址,或者在此时组合隧道解决方案(服务器连接到 HAProxy 主机以建立隧道,隧道内的寻址用于 HAProxy 连接回来)。

所有上述解决方案都会增加延迟和错误(考虑与服务器并行的 LAN 客户端,该客户端必须多次往返于主机之间)。

综上所述,你从来没有确定为什么要这样做。

我会考虑将服务移出“家庭网络”环境,而不是尝试将数据包放入其中,或者改进服务以支持 DNS(从而将其开放给各种动态 DNS 解决方案)。我确实知道有些情况可能不适用(例如服务器实际上控制着位于家庭网络范围内的某些物理设备)

相关内容