我在 LAN (192.168.1.0/24) 中有一个服务器,其静态 IP 地址为 192.168.1.100,现在我希望同一 LAN (192.168.1.0/24) 中的主机可以使用 192.168.100.100 访问此服务器上的所有服务,例如,当尝试访问 192.168.100.100:1234 时,请求由 192.168.1.100:1234 处理。我该如何实现?
arp -s 192.168.100.100 m:ac:of:se:rv:er
我尝试修改路由器上的ARP ,但没有成功。
我也尝试将 iptables 应用于路由器:iptables -t nat -A PREROUTING -d 192.168.100.100 -j DNAT --to-destination 192.168.1.100
。Ping 服务器导致超时。
背景:我以前在 LAN 192.168.100.0/24 中的 192.168.100.100 上托管文件和媒体服务,现在我暂时将主机迁移到另一个 LAN 192.168.1.0/24。客户端使用 192.168.100.100 访问服务器,修改客户端上的所有应用程序的工作量太大。显然,使用主机名比使用 IP 地址更好,但在我的环境中,客户端使用本地主机 DNS,忽略路由器的 DNS。我对 IP 知之甚少。
答案1
问题是需要访问 192.168.100.100 的主机是在 192.168.1.0/24 上还是在其他地方。如果是后者,则您在路由器上添加的规则(假设它获取发往 192.168.100.100 的流量)应该足够了(当然您还需要启用转发,但我认为这对路由器来说是显而易见的)。
如果这些主机来自 192.168.1.0/24 网络并尝试访问 192.168.100.100,那么情况会稍微复杂一些。它们将向目标 192.168.100.100 发送源地址为 192.168.1.x 的请求,然后发送到路由器,路由器将执行 DNAT 并将数据包发送至 192.168.1.100,回到同一网段。问题是响应的源 IP 为 192.168.1.100,目标 IP 为 192.168.1.x,不会通过路由器返回以恢复 DNAT 的效果。原始主机收到的数据包将与任何已知连接不匹配,并将被丢弃。要解决这个问题,您还需要对路由回此网段的数据包进行 SNAT:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 --ctstate DNAT -j SNAT --to-source 192.168.1.r
其中 192.168.1.r 是 192.168.1.0/24 子网上路由器的 IP 地址。
答案2
这就是您从一开始就需要使用 DNS 的原因。
192.168.1.0/24
我看到的唯一解决方案是在和网络之间添加一个路由器192.168.100.0/24
。然后指定192.168.1.0/24
网络上的主机需要192.168.100.100/24
通过路由器发送数据包,反之亦然。