具有多个网关的NAT

我有以下设置:

  • 我的Lan是10.56.8.0/23
  • 我有一个互联网接入网关(INETIP-A)和局域网IP 10.56.9.1
  • 我有另一个互联网接入(INETIP-B)和局域网IP 10.56.9.15
  • 对于IP为10.56.9.5的networking中的每台主机,我都有一台PC用作默认网关。 我想在这里做所有的改变。

默认的互联网连接是通过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服务器
  • 某些Internet主机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,并没有在terminal主机(只在路由器和网关)进行任何特定的设置?

是的,你可以根据你的网关的configuration允许。

你可以在网关上设置一个NAT规则,把VNCstream量的源地址转换成本地网关的IP地址(或者更具体地说,在Linux中,在你的内部接口上)。

在gw接口上使用一个别名ip地址(或者它们的池)是很好的,这样你就可以识别和分离来自正常的stream量。 留出本地地址空间中的地址或子网,但如信任外部地址那样处理,比如说10.56.9.254

在NAT之前logging也很有用,因此您可以确定stream量真正从哪里来,因为您的VNC框现在将看到所有连接的本地内部地址。

当stream量到达VNC时,它会看到一个本地源地址,该地址始终会被路由回到您指定的地方(stream量源自该stream量),然后stream量将以其进入的方式返回,并被重新解压出路。

在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 

你可以在另外一个IP上用另一个IP做同样的事情,比如253,然后你可以通过任何一个连接。

如果您逐步完成连接过程,则这基本上就是您的NAT在从内部networking出来的路上正在做的事情。 修改源IP,发送数据包并在数据包返回时映射它们。 你只是想做一个特定的连接和相反的方向,这是网关configuration进来的地方。它是否让你configuration它的能力?

编辑:如果您通过10.56.9.5路由VNCstream量,并且可以识别数据来自于互联网,您可以在默认网关10.56.9.5上实施相同的NAT规则。 也许可以通过网关标记数据包,也可以将数据包标记为默认gw,您仍然可以知道数据包来自哪里。