使用一台 Linux 机器作为路由器和服务器,在通过私有子网路由的公共 IP 上托管网站

使用一台 Linux 机器作为路由器和服务器,在通过私有子网路由的公共 IP 上托管网站

我使用 Ubuntu 服务器作为路由器、NATing 路由器和 Web 服务器。该服务器通过公共 /29 子网连接到 ISP。我还在上面托管了一些重要的网站。我要求 ISP 提供 ipv6 地址块。他们说我的链路终止于 ISP 的路由器不支持 ipv6。所以他们说,如果我准备好通过私有 172.16.xx/30 子网连接到他们的边缘路由器,他们可以为我提供 ipv6 块。但是,他们会给我一个通过 172.16.xx/30 路由到我的公共 ipv4 /29,我可以使用它来托管我的网站。但我的问题是我不想再买一个路由器,这样我就可以将 172.16.xx/30 放在面向 ISP 的接口上,将公共 /29 放在面向我的服务器和 NATing 路由器的另一个接口上。

我想知道的是,我是否可以使用 172.16.xx/30 连接到 ISP,同时使用同一台 Ubuntu 服务器上的公共 /29 来托管网站并进行 NAT。我的路由器有 5 个以上的 NIC,我也可以使用 VLAN。

ISP 的边缘路由器支持 IPv6,但他们不能直接给我一个公共子网的原因是。目前我的链路终止于通过 172.16.xx 连接到边缘的交换机

答案1

如果在公共互联网上使用 RFC1918 地址进行路由器到路由器连接,尤其是在 ISP 和客户之间的接口上使用时(而不是在 ISP 网络内的两个路由器之间),则不建议使用 RFC1918 地址。这是因为这些地址会降低 traceroute 的实用性,因为某些站点会阻止所有发往或来自这些地址的数据包,并且无法通过 DNS PTR 记录为这些地址附加有意义的名称,因为它们会导致路由器发出无法追溯到其来源的 ICMP 消息,也可能还有其他原因。但是,听起来您的 ISP 打算使用 RFC1918 /30 来编号他们和您之间的接口。尽管建议不要这样做,但实际上这样做效果很好,并且您可以适应这种情况,但只有一个困难(见下文)。

ISP 抱怨子网大于 /30 时会出现 ARP 问题,这听起来很荒谬。路由器的性能确实会受到具有大型稀疏子网的接口上不存在地址的无用 ARP 请求的影响,但子网必须既大又稀疏(包含很多未使用的地址)才会发生这种情况。这是因为只有子网上未使用的地址的 ARP 请求才会无限超时和重复,这就是路由器陷入困境的原因。如果他们将您的接口升级到(公共)/29,它既不大也不稀疏(我假设您实际上会使用 /29 上的所有或几乎所有地址)。人们确实担心 /64 IPv6 子网的 ARP 问题(它们显然很大,而且总是很稀疏,因为子网上的主机数量永远不会接近最大值),但担心 /29 的问题听起来很荒谬。

此配置有一个好消息:由于 ISP 不会在任何接口上配置您的公共 /29,因此无需将该块的第一个和最后一个 IP 地址保留为广播地址,ISP 也无需在自己的路由器上使用其中一个地址。因此,您可以使用所有 8 个地址,而不仅仅是 5 个。

您可以执行以下操作:

  1. 使用 ISP 提供的 172.16.xx/30 地址配置面向 ISP 的接口。

  2. 将 /29 块添加到 lo 接口/etc/network/interfaces::

    iface lo inet loopback
            up ip addr add a.b.c.d/29 dev lo
    
  3. 将您的默认网关设置为该链路的 ISP 端 172.16.x.otherside。

    现在出现了我之前提到的困难:默认情况下,当您的服务器启动出站连接(DNS 请求、发送电子邮件、软件更新检查、与数据库的出站连接或您的服务器自行启动的任何其他操作,而不是由客户端联系服务器)时,服务器将使用 172.16.xx 作为数据包的源地址,因为这是与数据包将通过的接口关联的地址。当服务器尝试使用此源地址联系整个互联网上的目的地时,它显然不会成功。您需要为 route 命令提供一个选项,以安装具有自定义源地址的默认路由。

    省略正常gateway 172.16.x.otherside条目并改为在以下内容中进行配置/etc/network/interfaces

    iface ethSOMETHING inet static
            [other configuration directives]
            up ip route add default via 172.16.x.otherside src a.b.c.d
    

    对于a.b.c.d,从 /29 中选择一个您认为是服务器“主”地址的地址。

答案2

我要求 ISP 提供 ipv6 地址块。他们说我的链路终止于 ISP 的路由器不支持 ipv6。

我们都期待着这种情况消失的那一天,但不幸的是,这仍然是我所知道的世界的大部分情况。

因此他们说,如果我准备好通过私有 172.16.xx/30 子网连接到他们的边缘路由器,他们可以为我提供 ipv6 块。但是,他们会给我一个通过 172.16.xx/30 路由给我的公共 ipv4 /29,我可以使用它来托管我的网站。但我的问题是,我不想再买一个路由器,这样我就可以将 172.16.xx/30 放在面向 ISP 的接口上,将公共 /29 放在面向我的服务器和 NATing 路由器的另一个接口上。

哎呀,差不多。我读到的情况是这样的:他们的路由器会给你一个6转4隧道通过私有 IP 空间,下一跳是其网络中其他路由器。它还将使用内部路由协议,该协议声明您的私有空间系统是您的公共地址空间的下一跳地址。

我想知道的是,我是否可以使用 172.16.xx/30 连接到 ISP,同时使用同一台 Ubuntu 服务器上的公共 /29 来托管网站并进行 NAT。我的路由器有 5 个以上的 NIC,我也可以使用 VLAN。

ISP 的边缘路由器支持 ipv6,但他们无法直接给我一个公共子网的原因如下。目前我的链路终止于通过 172.16.xx 连接到边缘的交换机

在我看来,你应该做的是将你想要服务器服务的所有设备的外部地址通过一个连接到路由器的外部接口放置。将所有设备分配给 eth0 和各种子接口(eth0:0、eth0:1 等),并将你的默认网关设置为其路由器的接口。

相关内容