The HyperNews Linux KHG 讨论页面

问题: 数据包和默认路由与直连路由

论坛: Linux内核黑客指南
日期: 1998年5月14日 12:28:23 GMT
发件人: Steve Resnick <steve@ducksfeet.com>

我有一台机器,配有两张以太网卡,两个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