none
Windows Server 2012 R2 RRAS/路由与远程访问无法对IP分片/TCP分段正确执行NAT RRS feed

  • 问题

  • Hi All,

    我在使用Windows Server 2012 R2的路由和远程访问服务创建NAT时,发现IP分片无法被正确NAT。具体拓扑及抓包:

    客户机:192.168.1.10
    NAT内网:192.168.1.1,外网:10.0.0.10

    客户机使用 ping -l 2000 12.34.56.78 发送超过MTU的ping包后,在NAT服务器外网网卡上抓到如下IP分片数据包:
    IP src: 192.168.1.10, IP dst: 12.34.56.78
    而如果直接 ping 12.34.56.78 则可以抓到如下包:
    IP src: 10.0.0.10, IP dst: 12.34.56.78

    可见IP分片的数据包并没有正确的被NAT,其IP src没有被修改为NAT服务器的外网地址,导致ping的回复无法到达NAT服务器,进而客户机收不到任何应答。
    2014年5月11日 13:14

答案

  • 您好,

    我做了测试,如果发送的包大于MTU的时候源地址确实没有被改过来。

    请问您的NAT是用于与外网的通信吗?如果只用于内网之间通信,作为一种应变的方法可以添加路由去实现。

    2014年5月13日 5:39
    版主

全部回复

  • 进一步,如果在NAT服务器上开启了VPN,另外一台Windows Server 2012 R2 RRAS路由器连接到NAT服务器后,路由器下面的客户机浏览网页时也会出现异常,抓包看到:

    客户机发起的TCP请求中,MSS值为1460(MTU为1500),路由器正确路由,NAT正确执行,其后的握手及客户机发起的HTTP GET请求都正确处理。但当服务器返回HTTP响应时,首个数据包因为IP包过大且设置了Don't Fragment(VPN的MTU默认为1400),NAT会返回Fragmentation Needed ICMP包。因为HTTP响应较长,服务器会发送多个TCP Segment且符合MTU要求的数据包,然而在客户机上抓包看到,只有最后一个TCP包经过NAT和路由器到达了客户机,中间的多个TCP Segment都丢失了,这导致客户机只发送了一个ACK,服务器认为丢包,并执行了TCP重转,周而复始,客户机无法打开网页。

    2014年5月11日 13:23
  • 您好,

    我做了测试,如果发送的包大于MTU的时候源地址确实没有被改过来。

    请问您的NAT是用于与外网的通信吗?如果只用于内网之间通信,作为一种应变的方法可以添加路由去实现。

    2014年5月13日 5:39
    版主