我遇到路由+ NAT的以下问题: 如果我有两个ISP,并且我在两个ISP链路上使用MASQUERADE的默认路由中使用两个nexthop,我看到路由缓存重新生成,但有时发送到新链路的数据包(在缓存重新生成后)使用错误的源地址进行伪装。 / p>
这是配置。
我通过两个不同的提供商与外界建立了两个链接: eth1 和 eth2 eth0是局域网
$ ip a(输出的一部分,因为我们还有3个接口禁用)
2: eth1 :mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.1.254/24 brd 192.168.1.255范围全球eth1
3: eth2 :mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.2.254/24 brd 192.168.2.255范围全球eth2
6:eth0:mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.5.1/24 brd 192.168.5.255 scope global eth0
旋转表:
$ ip r 192.168.5.0/24 dev eth0 proto内核范围链接src 192.168.5.1
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.254
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.254
默认 nexthop via 192.168.1.1 dev eth1 weight 1
nexthop via 192.168.2.1 dev eth2 weight 1$ ip r s t eth1
默认通过192.168.1.1 dev eth1$ ip r s t eth2
默认通过192.168.2.1 dev eth2
规则:
$ ip ru
0:来自所有查找本地
32450:从192.168.2.254查找eth2
32717:从192.168.5.124查找eth1
32766:来自所有查找主
32767:来自所有查找默认值
Q1 :如果我从局域网中的两台PC进行ping操作:5.137和5.147,那么相同的IP(195.60.1.1)如何通过不同的链接进行ping操作( ping 195.60.1.1 在两台计算机上运行)?
$ ip r g 195.60.1.1 来自192.168.5.137 iif eth0
195.60.169.6 from 192.168.5.137 via 192.168.1.1 dev eth1 src 192.168.5.1
cache mtu 1500 advmss 1460 hoplimit 128 iif eth0$ ip r g 195.60.1.1 来自192.168.5.147 iif eth0
195.60.169.6 from 192.168.5.147 via 192.168.2.1 dev eth2 src 192.168.5.1
cache mtu 1500 advmss 1460 hoplimit 128 iif eth0
我的案例中的路由应该对所有用户都相同。它应该始终通过相同的链接将数据包发送到同一目的地(即使源IP不同)。不是吗?
Q2 :有时我在外部接口的tcpdump中看到路由缓存已重新生成。这可以通过 ip r f t cache 强制执行。这有时会导致我的ping链接发生变化。但两台机器中的一台突然断开连接。从 tcpdump 我发现这是因为路由决定使用另一个链接,但MASQUERADE没有更新:
$ tcpdump -i eth1
IP 192.168.2.254 > 195.60.1.1:ICMP回应请求,id 10677,seq 242,length 64
IP 192.168.1.254> 195.60.1.1:ICMP echo请求,id 37387,seq 244,length 64 IP 195.60.1.1> 192.168.1.254:ICMP echo reply,id 37387,seq 244,length 64
第二个和第三个数据包是来自/到5.137的请求 - 回复
第一个数据包是来自.5.147的请求,由于MASQUERADE在路由缓存清除后没有更新,因此该接口上的错误的源地址 - 因此,没有回复,因为MASQUERADEd数据包的源地址是错的。
这是我的MASQUERADE设置
$ iptables -L -t nat
Chain POSTROUTING(策略接受752K包,48M字节)
pkts bytes target prot选择输出源目的地
全部2840K 256M MASQUERADE - 任何eth1 192.168.5.0/24随时随地 2491K 229M MASQUERADE all - 任何eth2 192.168.5.0/24随时随地
我知道我可以使用conntrack标记数据包,但它有点复杂。我更愿意使用目标IP作为路由的关键。这种情况有什么问题?为什么路由缓存清除不通知NAT引擎有关路由的变化?
答案 0 :(得分:3)
好的,终于找到了使用搜索引擎的答案。
这种特殊行为是Linux内核中至少自2005年以来就已知的错误.Julian Anastasov编写了一个补丁来解决此错误(请参阅http://www.ssi.bg/~ja/#routes)
无论如何,发现所选择的具有负载平衡和NAT的方案并不好,因为它可能会破坏某些站点的授权,并且由于路由的重新调整导致Jabber和Skype闪烁,导致每个目的地的路由发生变化(从那以后)我们使用NAT,外部IP也发生了变化,Skype和其他服务认为您是从另一台计算机登录的。)
通过大型办公室共享多个链接的更好方法是按渠道分割用户。因此,我们为网络中的每台计算机分配了一个首选频道,如果该频道未启动,我们会为计算机选择任何其他频道。此策略为我们网络中的每台计算机保留相同的外部IP(NATing后)。设置首选渠道使我们能够通过更快的渠道发送关键员工,同时员工通过低cos宽但通道较慢的方式处理大文件。我们使用4个频道,因为我们地区的所有ISP每周至少下降2次,持续数小时。