绕过 DS-Lite 限制以允许单个端口上的传入 IPv4 请求

绕过 DS-Lite 限制以允许单个端口上的传入 IPv4 请求

我最近搬家了,我的新 ISP 提供了 DS-lite/运营商 NAT 连接,因此我没有自己的 IPv4 地址,但我与许多其他人共用一个 IPv4 地址。因此,我无法获得传入的 IPv4 连接;调制解调器/路由器中甚至没有端口转发选项(我没有单独的路由器)。当然,因为我有自己的 IPv6 地址,所以问题就少了,尽管我认为端口转发不适用于 IPv6 地址,因为 IPv6 没有 NAT。如果我错了,请纠正我。

现在出现了一个问题:我有一些服务(特别是 PLEX 服务器)无法在 IPv6 上完全运行。服务器或多或少能够接收传入的 IPv6 请求,但一些(远程)客户端只能发出 IPv4 请求(4G 上的移动设备;chromecast;等等),因此这些设备无法访问服务器。此外,PLEX 服务器可以将内容服务器到 IPv6 地址,但通常所有客户端都会尝试在 IPv4 地址上进行身份验证,而 IPv4 地址是无法访问的。

我尝试列出一系列可能的规避措施:

  • 使用端口映射服务,例如费斯特-伊普将 (远程) IPv4 地址上的所有请求映射到 IPv6 地址。我可以在 PLEX 服务器中定义“自定义服务器 URL”,我相信这将允许任何客户端通过此远程 IPv4 地址进行访问/身份验证。可能存在的问题:受端口映射服务的网络速度限制,端口映射服务是付费订阅;仅在 Ipv4 网络上的客户端可能仍然无法实际访问?
  • 我可以访问另一个(远程)网络,该网络有自己的 IPv4 地址。我可以尝试在此位置设置端口映射服务。可能出现的问题:我不确定如何执行此设置,远程网络位于邻国,我不会经常进行现场管理等,以及上述所有考虑因素减去付费订阅费
  • 我可以在远程网络上的 Raspberry Pi 上设置 VPN 服务器,并利用其 IPv4 访问权限,在本地服务器上创建 VPN 客户端 docker 容器,然后将 PLEX 容器附加到该 VPN 客户端容器。我的想法/希望是,在本地网络上,我仍然可以通过 docker 主机访问 PLEX,并且对于外界来说,PLEX 服务器似乎位于远程位置。需要注意的是,PLEX 服务器的所有外部网络都必须通过远程位置进行路由。
  • 咬紧牙关,寻找一个能给我 IPv4 地址的更好的 ISP(不幸的是,在我目前居住的国家,这种地址极其罕见)。注意事项:互联网订阅费可能会更高。

为了应对第三种选择,我在远程位置的 Raspberry Pi Docker 主机上的 Docker 容器中设置了一个 wireguard 服务器(我目前就在那里)。如果第三种选择确实可行,我应该使用 Wireguard 吗?我应该使用 openVPN 吗?还是应该在另一个问题中提出这个问题?

提前谢谢了。

答案1

我认为端口转发不适用于 IPv6 地址,因为 IPv6 没有 NAT。如果我错了,请纠正我。

是的,但更准确地说,没有需要用于 IPv6 的 NAT。

IPv6 确实存在 NAT 实现,用于处理一些不幸的情况(例如托管服务提供商陷入按单独地址收费的 IPv4 思维模式)。

但是当您的主机拥有自己的全局地址时,NAT 和端口转发就变得多余了。

我可以访问另一个(远程)网络,该网络有自己的 IPv4 地址。我可以尝试在此位置设置端口映射服务。可能出现的问题:我不确定如何执行此设置,

如果您只需要 HTTP 和/或 HTTPS,那么您可以使用“反向代理”,它通过 IPv4 接受请求(就像 Web 服务器一样),然后通过 IPv6 将它们转发到您的 PLEX 服务器。这要求代理同时具有 IPv4 和 IPv6。

响应也将通过相同的中继返回——这是不可避免的。

我可以在远程网络上的树莓派上设置一个 VPN 服务器 [...] 需要注意的是,PLEX 服务器的所有外部网络都必须通过远程位置进行路由。

这不是 VPN 的要求。您可以让“默认”路由指向本地 ISP,同时仍能通过 VPN 连接接收连接并发送回复。如果您的服务器运行 Linux,请搜索“策略路由”和“ip 规则添加”。

如果第三种选择确实可行,我应该使用 Wireguard 吗?还是应该使用 openVPN?

其实没关系;两者都能轻松提供所需的功能,大多数其他 VPN 也如此。

但是,如果你正在使用 Wireguard,你可能需要避免wg-quick因为它可能会干扰“策略路由”设置(或者至少说服它停止自动添加不需要的路由,我认为选项是RouteTable = 0。)。

答案2

我建议你使用 VPS 上的 Rinetd。配置也非常简单:/etc/rinetd.conf (IPv4 of your Server) port/protocol (IPv6 of your Homeserver) port/protocol

例如: 127.0.0.1 80/tcp :: 80/tcp

相关内容