由于各种原因,我家里有 3 个 WiFi 宽带路由器(或者说是我的个人业余黑客实验室)。在 WAN 端,一个是 FTTH,另一个是 ADSL,第三个是 4G-LTE。在 WLAN 端,它们被分配了 192.1.xx、192.2.xx、192.3.xx 子网,并且所有子网都配置为在 192.x.1.0 - 192.x.200.0 范围内为请求设备分配 DHCP IP 地址,192.x.200.0 范围以上的 IP 地址保留用于静态 IP 地址。
家庭(就像现在的许多人一样)有六部 Android 手机/平板电脑和几台 PC。所有设备都使用 DHCP 分配 IP 地址。但是,正如人们所想象的那样,设备可能连接到 3 个 WiFi 路由器中的任何一个,因此可能具有任何 IP 地址(在 192.x.1 ~ 192.x.200 范围内,其中 x = 1、2、3)。
我正在尝试开发一个 Android 应用程序,该应用程序需要使用 TCP/IP 与特定服务器通信。该服务器是一个 Linux 应用程序,在 Windows 10 笔记本电脑上的虚拟机(Ubuntu 32 位客户机,在 VMWare Workstation Pro 14 虚拟机管理程序上运行)内运行。笔记本电脑还动态分配了 IP 地址(DHCP)。Linux 虚拟机使用 NAT 模式虚拟 NIC。
问题是由于使用动态 IP 和显式 IP 地址(私有类,因此无法通过 DNS 管理),我不得不频繁地在 Android 客户端应用程序中重新配置服务器 IP 地址。一个简单的解决方案是切换到使用静态 IP 作为服务器——但是,我想知道是否有任何简单而优雅的替代方法?
答案1
尝试 DHCP 预留,前提是您的路由器固件支持它。对于 DHCPv4,您只需要一个 MAC 地址和所需的 IP 地址;预留可确保 DHCP 始终将预留的 IP 地址租给具有给定 MAC 地址的设备。
客户端将始终获得相同的地址,但请注意,它们仍然是 DHCP 客户端。如果 DHCP 离线时间超过 DHCP 的租约期限,它们将丢失该地址并恢复为 APIPA 地址。此外,需要静态 IP 地址的应用程序可能不满足于预留,因为 IP 地址仍处于租约状态(例如 ADDS)。
希望有所帮助。
答案2
这个问题分为两部分。第一部分是如何处理 3 个 WAN 连接,第二部分是如何查找分配的 IP 地址。
第二部分其实并不难:你应该为整个家庭设置一个 LAN 段,必要时使用路由器作为 Wifi 中继器。在该 LAN 段上,你需要一个 DHCP 服务器和一个 DNS 服务器。DHCP 服务器会记住 DHCP 请求中的客户端名称,并将它们提供给 DNS 服务器(或者你可以根据 MAC 地址分配名称)。
这样,您将能够通过名称访问家庭网络中的所有设备。有些路由器默认提供此类功能。
困难的部分是 3 个 WAN 连接。传统的 IP 协议不允许多宿主,因此您无法同时使用多个互联网连接。我不知道为什么您有 3 个 WAN 连接,也许您想要某种故障转移方案,或者您可能想要根据客户端设备来决定。
如果您不想要统一的解决方案,并且坚持使用 3 个路由器来管理 3 个子网,那么您仍然可以尝试为所有三个子网设置一个 DNS 服务器,但向该 DNS 服务器提供当前信息将更加困难。
分配静态 IP 当然也是一种解决方案,不过每次发生更改时你都必须编辑配置文件,这可能很麻烦。所以我更喜欢统一的集中解决方案。