我家里有“功能强大”的计算机,配备千兆互联网连接和大量漂亮的存储空间,但我只能获得一个公共 IP。
我想运行自己的公共服务,但我不想在家里暴露我的私人公共 IP,而且当我家里有完好的电脑时我也不想租用。
我想要做的是获得一个提供多个 IP 的廉价云 VM,并使用该 VM 为每个家庭服务器设置一个 Wireguard 接口,然后链接它们,这样我就可以使用云中的公共 IP,就像它是家里的公共 IP 一样。
我知道您无法将第 3 层 VPN 桥接到第 2 层接口,但这是我所知道的最好的表达方式。从我家里的 wg0 发出的所有内容都会通过云中的公共 IP 发出,反之亦然。
我该怎么做?谢谢帮助。:)
答案1
你可以路线通过 VPN 隧道将公共地址传输到您的家庭系统(它们实际上并未以某种方式绑定到 VPS),并直接将它们分配给您的家庭服务器,而不是分配给 VPS。(实际上不存在任何形式的“桥接”,它仍然完全符合 VPN 路由 IP 数据包的基本功能。)
ip route add 83.171.257.5 dev wg0
(您还需要更新 WireGuard“AllowedIPs”或定义 OpenVPN“iroute”。)
一旦地址被路由到您的家庭网络,您的家庭 VPN 端点也需要知道将它们路由到哪里(直接路由到您的 LAN 接口,或者通过您的服务器的 LAN 地址),最终将它们分配给服务器的接口。
根据数据中心的不同,额外的 IP 可能会被路由到 VPS 的“主”IP 地址,在这种情况下你不需要做任何特殊的事情(只是不要将它们分配给 VPS),或者它们可能是“在线的”,在这种情况下 VPS 需要运行代理地址解析协议并继续回答数据中心网关的 ARP 查询,尽管不再有地址。
(在服务器的主以太网接口上运行数据包捕获是找出其类型的一种方法。如果您看到对其他 IP 的 ARP 请求,那么某些东西必须回答它们 - 这意味着地址处于链接状态,您需要在 VPS 上启用代理 ARP。内核的内置代理 ARP 系统或“parpd”守护程序可用于此目的。)
另一种方法:
大多数基本的 VPN 配置已经包含 SNAT(又名伪装),以便来自 VPN 客户端的数据包将被分配 VPN 服务器的 IP 地址,就像离开家庭路由器的数据包被分配路由器的 IP 地址一样。
只需调整为实现 SNAT 而添加的防火墙规则,即可轻松将其扩展到多个 IP 地址。例如,您不必只制定一条匹配所有内容的规则,而是制定多条规则,每条规则都额外使用-s
或ip saddr
匹配您的某个服务器的 LAN 地址。
chain postrouting {
ip saddr 10.147.0.5 snat to 83.171.257.5
ip saddr 10.147.0.6 snat to 83.171.257.6
ip saddr 10.147.0.0/24 snat to 83.171.257.2
}
答案2
检查:https://github.com/mochman/Bypass_CGNAT/wiki
您可以使用 Oracle 免费套餐和自动脚本轻松且免费地完成此操作: https://github.com/mochman/Bypass_CGNAT/wiki/Oracle-Cloud-(Automatic-Installer-Script)