嗨 我有一台机器,配有两张以太网卡,两个C类网络,以及大约50个在不同设备上的IP别名。 这两个C类网络明显不同,即网络地址的MSB不同,并且都使用24位子网掩码。 为了方便讨论 eth0 设置在网络 1: 192.168.98.0 eth1 设置在网络 2 192.168.99.0 默认路由指向我们eth0上的路由器,地址是 192.168.98.10 到目前为止,一切都很好。 我们根据流量使用情况向客户收费,我编写了一个基于 libpcap 的软件包来跟踪网络使用情况,并计算每5分钟周期的聚合数据,并将这些数据刷新到磁盘。我最初是在一台运行 Solaris 2.5.1 的 Sun 机器上编写的。 这工作得相当好,我能够通过遍历以太网和 tcp/ip 头部来查找数据大小,从而统计所有流量。 我重写了这个软件包使其在 2.0.33 下运行,现在我有一个奇怪的问题:发送到特定地址的数据包在返回路径上都使用相同的地址。 如果,从我们网络中另一台地址为 192.168.98.15 的机器上,我使用记录路由 ping 这台有问题的机器上的一个地址,我看到
PING 192.168.98.42 (192.168.98.42): 56 data bytes 64 bytes from 192.168.98.42: icmp_seq=0 ttl=64 time=1.3 ms RR: 192.168.98.15 192.168.98.42 192.168.98.10 192.168.98.15 并且如果我从这台有问题的机器 traceroute 到我们本地网络上的另一台机器,并且那个地址在网络 2 上,它仍然通过网络 1 发送出去
traceroute -n 192.168.99.36 traceroute: Warning: Multiple interfaces found; using 192.168.98.10 @ eth0 traceroute to 192.168.99.36 (192.168.99.36), 30 hops max, 40 byte packets 1 192.168.99.36 0.704 ms 0.606 ms 0.604 ms 因此,这里的问题是我无法跟踪由特定网站产生的流量,因为所有出站流量的源地址不是网站的地址,而是 eth0 上的主地址 (192.168.98.10)。 我已经检查了 /proc/sys/net/ipv4/ip_forwarding,值是 0,所以我假设 ip_forwarding 是关闭的。 有没有办法使它正常工作,也就是说,如果我从特定地址请求数据,则发送时使用的地址也是正确的? 我还遗漏了什么或者应该寻找什么? 谢谢, Steve
|