
我正在学习 Linux 中的 DNS 管理。我在办公室和家里都这样做。在办公室,我的 IP 范围是 10.xxx/21,而在家里,我的 IP 范围是 192.xxx/24。由于我正在通过实施 BIND DNS 来学习 DNS,所以我需要静态 IP。但问题是,假设我在办公室配置了静态 IP,现在我可以在办公室里做任何事情(连接到互联网、通过 SSH 连接到它等),但当我回家时,我无法 ssh 它,我无法连接到互联网。有什么好办法吗?我正在使用 virtualbox 进行虚拟化。
答案1
在我看来,这是一个经典案例XY问题,由一位对网络相当陌生的人提出。
我认为您真正想要的是拥有一台可以在两个网络上通信的机器(无论是虚拟机还是物理移动机器,都无关紧要)。
简单的方法是给同一台机器分配两个不同的 IP 地址(更具体地说,可能是同一个网卡/端口/接口)。
实际上,桥接与 IP 完全无关。真正的“桥接”接收“OSI 第 2 层”流量,即使用 MAC-48 地址传送的数据“帧”,并将该帧从另一个端口发送出去。因此,一个帧上的第 2 层流量会到达另一个网络。
另一方面,IP 寻址与“OSI 第 3 层”相关,并且专为路由而设计。路由的理念是邻居发现(在 IPv6 中称为 ND,在 IPv4 中称为 ARP)将第 3 层 (IP) 地址与第 2 层 (MAC-48) 地址进行匹配,然后将第 3 层数据包以第 2 层帧的形式发送到所需的第 2 层地址。如果 ND 无法找到目标 IP 的地址,则发送机器将对“网关 IP”地址进行邻居发现,并将流量发送到该地址。
因此,如果您想将流量发送到 192.0.0.0/8 内的 /24(如果您使用的是传统 IPv4 地址,则更具体地说是在 192.168.0.0/16 子网内),那么您要么需要在该子网中有一个地址(简单的方法),要么流量需要路由/转换以处理不属于同一 192.168.0.0/24 子网的地址。这可能意味着在具有同一(192.168.0.0/24)子网地址的路由器上实施 NAT 和/或调整路由表。这也许可以做到,但不是简单的方法!
只需将两个 IP 地址分配给一台机器即可。(大多数流行的 TCP/IP 实现都支持在单个接口上执行此操作。)
然后,当您尝试访问 10.0.0.0/8 范围内的“办公室”地址时,本地计算机的路由表可以将此类流量引导出您的网络接口。当您尝试访问 192.168.0.0/24 范围内的“家庭网络”地址时,本地计算机的路由表可以将此类流量引导出您的网络接口。这两种情况都可以使用相同的物理网络接口。这不仅可以正常工作,而且如果您这样做,其他机器将看到内部/可识别的同一子网地址,并且能够轻松回复。
顺便说一句,回复通常比您想象的更重要。例如,如果您发送 ICMP 流量(例如 ping),即使回复未成功发送回您,您也可能能够发送。但是如果您尝试使用 TCP(例如,HTTP 和 SMTP,包括 HTTPS 和 SMTPS 变体,使用 TCP,许多其他协议也是如此),那么需要回复来完成 TCP 的三次握手,然后才能使用 TCP 协议发送单个“有效负载”数据。
关于您描述的 Virtualbox 设置,您可能希望 Virtual Box 计算机的 [虚拟] 网络适配器 [虚拟] 硬件通过软件桥与物理计算机的网络接口之一进行通信。(这是一种做事的方法,与其他可能的设置方法相比,它有一些优点和缺点。)如果您希望能够通过 SSH 进入 Virtual Box 计算机,那么您将希望 Virtual Box 计算机的接口在两个子网中分配一个 IP 地址(以便实现此答案的基本建议)。
替代方案:您可能只想将 Virtual Box 计算机设置为使用 DHCP,然后在每次切换网络时以某种方式(可能手动)续订租约。如果您拥有由 DHCP 服务器保留的“保留地址”,则可以在 192.168.0.0/24 网络上获得一致的 IP 地址。(这需要控制处理 192.168.0.0/24 网络的 DHCP 服务器,或与控制该服务器的任何人合作,以设置 DHCP 保留)。同样,如果您能够设法让 DHCP 服务器为您的 MAC-48 地址保留,您可以在 10.0.0.0/8 地址内的网络上保留。这在技术上当然是可行的,但是,作为警告,许多系统管理员可能认为这没有必要,因此选择不为您设置这样的保留。因此,这通常不太可行,尤其是对于办公室网络。
由于我正在通过实施 BIND DNS 来学习 DNS,所以我需要静态 IP。
可能不是。首先,“静态 IP”一词确实有不同的用法。我接受的传统培训是,“静态 IP”是指不使用任何自动地址分配协议的手动分配地址。有些人认为“保留地址”也是静态 IP。
无论如何,另一种选择可能是使用 DDNS(这可能涉及 BIND 数据的自动更新)。对于您在最终用户工作站上处理地址的特定场景,这可能有意义,也可能没有意义。但即使没有,DDNS 在其他可能使用 BIND 的场景中也很有用,所以不要认为 BIND 只能用于静态 IP 地址。