我有以下设置:
- 我的局域网是 10.56.8.0/23
- 我有一个可访问互联网的网关(INETIP-A)和 LAN IP 10.56.9.1
- 我有另一个可访问互联网的网关(INETIP-B)和 LAN IP 10.56.9.15
- 我有一台 PC,用作网络上每个主机的默认网关,其 IP 为 10.56.9.5。我想在这里进行所有更改。
默认的互联网连接是通过 10.56.9.15(它更快),但我只能控制 10.56.9.1,因此对于某些特定主机,这应该是路由。为了以一般方式实现这一点,我将 10.56.9.5 设置为路由器,将 10.56.9.15 确立为默认网关,并为需要通过 10.56.9.1 访问的主机添加特定路由。
我现在需要打开从互联网到主机 VNC 服务器的访问。我遇到了这个问题。
- 我将 10.56.9.1 上的 5900 端口转发到 VNC 服务器
- 某个互联网主机 A 尝试连接到 10.56.9.1 外部接口 (INETIP-A),端口 5900
- VNC 服务器的默认网关为 10.56.9.5,其默认网关为 10.56.9.15,因此连接的应答会通过 10.56.9.15 外部接口 (INETIP-B) 路由回来。
- 当应答包到达目的地(互联网主机 A)时,它会被丢弃,因为它来自与预期不同的主机(INETIP-B 而不是 INETIP-A)
有没有一种方法可以通过特定网关路由回数据包,而无需声明源 IP,也无需在终端主机上进行任何特定设置(仅在路由器和网关上)?
答案1
是的,可以,这取决于您的网关是否允许配置。
您在网关上设置了一个 NAT 规则,以将 VNC 流量的源地址转换为进入时的本地网关 IP 地址(或者更具体地说,在 Linux 中,在离开内部接口时)。
最好在 gw 接口上使用别名 ip 地址(或地址池),这样您就可以识别并将混乱的流量与正常流量区分开来。留出一个位于本地地址空间中的地址或子网,但在信任方面被视为外部地址,例如 10.56.9.254
另外,在 NAT 之前进行记录也很有用,这样您就可以识别流量的真正来源,因为您的 VNC 盒现在将看到所有连接的本地内部地址。
当流量到达 VNC 时,它会看到一个本地源地址,该地址将始终被路由回您为其指定的任何位置(流量源自的 nat gw),然后流量将沿其进入的方式返回,并在出去的途中被解除损坏。
在 Linux 世界中,地址和 nat 规则将如下所示:
ip address add 10.56.9.254 dev intnic0
iptables -t nat -A POSTROUTING -o intnic0 -p tcp --destination 10.56.9.vnc --dport 5900 -j SNAT --to 10.56.9.254
您可以在另一个 GW 上使用另一个 IP(例如 253)执行相同操作,然后可以通过任一方式进行连接。
如果您逐步完成连接过程,这实际上就是您的 NAT 在从内部网络传出时所做的事情。修改源 IP,发送数据包,并在数据包返回时将其映射回去。您只想针对特定连接和相反方向执行此操作,这就是网关配置的作用所在。它允许您配置它的功能吗?
编辑:如果您通过 10.56.9.5 路由 VNC 流量并且可以识别数据来自的互联网网关,则可以在默认网关 10.56.9.5 上实施相同的 NAT 规则。也许通过在通过网关或进入默认网关的途中标记数据包,您仍然可以知道数据包来自何处。