2015-08-15 38 views
2

我有一个很奇怪的问题。首先,我想解释一下我的系统布局。我有一个服务器,它将连接2个摩托罗拉收音机作为USB,但它们实际上是网络接口,当我们键入ifconfig时,您可以看到usb0和usb1。现在一个广播有IP 192.168.10.2,另一个有192.168.20.2。我公司提供的路由表命令条目Linux多个网关与单一desination网络

路由添加-net 12.0.0.0/ GW 192.168.10.1

现在我有我的服务器程序,用JAVA写的,我有一个UDP套接字开放这两个IP。我有一个IP地址为12.0.0.20的设备,当该设备向我发送192.168.10.2上的数据时,我的服务器能够监听数据,并且我可以处理这些数据。但是当设备尝试通过192.168.20.2发送数据时,wireshark会显示目标地址为192.168.20.2的数据,但我的程序无法收听数据。但是,如果我添加其他的记录

路由添加-net 12.0.0.0/8 GW 192.168.20.1

然后程序可以收听该数据。但之后我无法通过192.168.10.2进行通信。请任何人给我建议如何处理这个问题。我想下面的命令

的sysctl -w net.ipv4.conf.all.arp_filter = 1

但没有奏效。我的JAVA程序很好,netstat -plu显示我的JAVA程序为这些IP打开了UDP套接字。但我认为Linux路由表有一些输入和输出数据的机制。我只想在路由表中保留192.168.10.1条目,因为这只是我发送数据的一种方式,而另一个192.168.20.2只是将数据发送到我的服务器,所以我不想在我的路由表中保留该条目。根据我的理解,路由表仅用于传出数据路由,但在这里Linux也有一些与传入数据有关的内容。所以请任何人建议我有什么问题。

我真的很熟悉任何帮助。谢谢。

回答

0

这两条路由发生冲突,因为它们都表示将所有数据发送到以12.x.x.x开头的任何IP地址到不同的位置。
删除两条路线与 路线德尔-net 12.0.0.0/8 GW 192.168.20.1 路线德尔-net 12.0.0.0/8 GW 192.168.10.1

添加特定于这些主机的路由: 路由添加-host 12.0.0.20 gw 1​​92.168.10.1 route add -host 12.0.0。 gw 192.168.20.1

我没有在问题中看到第二个设备的IP。所以我把?标记。 如果IP地址不止一个,您可以使用-net来代替,但您仍然需要确保网络的前n位不同,您使用/ n定义网络。