在上图示的双线中,网通和电信直接相连的路由器以及左侧用户接入用的双线路由器中,均会针对网通和电信IP端做路由表。当网通用户请求访问最左侧的双线路由器及其内部服务器的电信IP时, 请求通信数据包到达“网通骨干路由器”时,由于目的地址是电信网络段上的,因此将数据包交付给与自己相连的“电信骨干路由器”,最终网通用户请求访问双线 路由器及其内部服务器的电信IP的通信的路径为上图红色箭头所示路径。双线路由器应答这个来自网通用户的请求时,应答数据包的目的地址为网通网络段(网通 用户的IP),由于双线路由器上有策略路由,因此应答时的数据通信路径为上图紫色箭头所示路径。
这样,访问通信就不是“从哪里来,还从哪里回”了。
从哪里来,却不从那里回,对于包通信来说,这并没有什么问题。互联网网际层正是利用包传递可多路径性来保证某些链路失效时,包仍然可以选择另外一条链路来完成通信的。
但实际中为什么会遇到通信不能完成的情况呢,产生的原因可能如下:
1、网通驻地路由器上做了禁止数据包的源IP地址为电信网段的包通过网通路由器。
一般,在骨干网络上,路由设备不会对包通信做任何限制或者检测,骨干网上的路由器会根据路由表对包做尽可能快的转发。访问控制,一般都发生在驻地网设备上。
2、网通或电信路由设备上的路由表,缺少了某些到达彼此网络的路由条目。
此种情况会发生在有“中国特色”的网络中(多家运营商之间恶性竞争,相互限制)。
3、应答通信经过的线路中,某些设备开启了“状态保持(检测)”功能,发现“没从我这儿进,缺想从我这儿出”的通信就禁止掉。
此种情况也一般发生在驻地网设备中。
4、包途中经过的网络设备做了三层、四层的过滤。
此种情况一般发生在网络边缘。
总上述,如果驻地网做了上述的任何一种配置,要想保证通信的完成,就需要双线路由器记住:请求从哪里来,应答就得从哪里回。也就是记住外部主动连接的状态(一般记录这种状态的方法是根据IP+端口),以便有此连接的应答通信时,还走原路。
一、发布内部的服务器:
在 【原创之NAT】在ROS中做NAT时指明IP或接口和不指定时的差异 一文中我们知道,当向外发布内部服务器时,外部与内部之间的数据包的源和目的IP地址可能经过多次更改,这样就给记录某个连接带来了难度(记录连接基于IP+端口,通信由于NAT包的IP会多次变化,使得连接状态变化多次,不利于记录)【2011年9月10日后记:上述关于NAT时,连接变化,NAT后返回的连接与先前的标记不一致的说法是错误的,NAT时连接有变化,但正是由于NAT映射条目的存在,NAT条目记录对应了此变化,当连接返回到NAT设备时,连接将恢复为先前的连接】。此时,我们可以通过给内部服务器和双线路由器配置两套内部IP地址,一套内部地址对应发布到一个公网IP,外部与内部服务器间的通信细化到两个独立的通信体系中,每个通信体系按照常规的发布服务器配置即可。在ROS中的具体配置如下:
1、给服务器和ROS的LAN接口配置两套内部IP地址(也可以使用一个网段的两个不同IP):
服务器:192.168.1.11/24和192.168.10.11/24
ROS的LAN:192.168.1.1/24和192.168.10.1/24
2、发布ROS的网通IP服务器,共两条NAT:
1)DST-NAT配置:
DST-NAT,Dst address 为ROS网通公网地址 in interface为接网通线路接口
2)SRC-NAT配置:
SRC-NAT,Dst-add为内部服务器IP,In-Interface为ROS的LAN
SRC-NAT,TO address为ROS对应于发布服务器IP的那组内部地址
上述SRC-NAT配置方式,是为了将外部与内部服务器间的通信,变为由ROS代理,这样内部服务器可不配置网关,对于内部服务器来说,它不能主动的与外部通信,只能被动的与ROS通信。内部服务器与外部的通信全变为与ROS之间的通信,这样可增强服务器的安全性。此问题在 【原创之NAT】通过NAT技术来增强内部服务器的安全性(应用举例:ISA) 一文中有详细说明。
3、发布电信线路上的服务器:
上 面是针对发布到网通公网IP的配置,使用的内部地址组为192.168.1.0/24,发布到电信公网IP的配置,将192.168.1.1用 192.168.10.1代替,192.168.11用192.168.10.11代替即可(如果使用一个网段的两个IP,就分别代替原来的IP即可)。
4、针对两套地址的服务器应答外部的通信,做策略路由,注意,只对源端口为80的服务器通信做路由,这样可避免服务器与外部其他通信受其影响。如果服务器使用一个网段的两个IP,那么src address就是服务器设置的那两个IP。
做策略路由时,应该按“新建连接”做,不可按如下图直接对服务器的80通信做,如果这样做的话,会导致策略路由表无限止的增大,产生性能问题。
路由标记:针对发布到网通线路的服务器的通信(注:此配置为说明问题的错误方式)
正确的配置如下:
连接状态选择:new; In .Interface选择 电信出口
上几图中为了精确标记随后策略路由所作用的接口,应指定 in. Iterface接口。Connection State应该选择:new
本策略路由的目的是:增加一个优先级比网通电信静态路由表优先级高的策略路由,以便让外部电信用户访问内部网通服务器的本应从电信接口出去的应答数据走网通出口,因此路由作用的接口应该是电信接口,也就是in. Interface选择TEL电信。
二、双线路由器上的服务与外部通信
外部到路由器的通信较单一,可以很明确的标记出某个连接,且此连接不会经过ROS变换。下面展示了ROS中,不管电信或网通用户都可以使用ROS的电信或网通IP远程连接到WINBOX的配置。
注:上图请务必要选择Connection State:new,否则可能会因为大量策略路由导致ROS性能问题
到ROS的通信,chain 要选择input,根据IP-端口对连接做标记
从ROS出站的通信,Chain选择 output
上图中如果选Out.Interface,应该选电信接口(原因在上面已经说明)
对原来做过标记的连接做路由标记
上面几图中,虽然没有指定In. Interface和Out.Interface,但不影响结果。实际上,在做路由标记时,应该指定相应的In. Interface和Out.Interface。针对上图的标记路由,接口应该选择电信。
最后将做了路由标记的数据包送到指定的网关中:
上面是针对外部用户通过网通IP来访问ROS上的服务时做到“从哪里来就从哪里回”的配置。外部用户通过电信IP来访问ROS上的服务的配置和上面一样,只要更改对应的电信IP即可。