具有单个网络的Linux多网关

时间:2015-08-15 21:27:24

标签: java linux sockets networking

我有一个非常奇怪的问题。首先,我想向您解释一下我的系统布局。我有一台服务器将连接2个motorola无线电作为USB,但它们实际上是网络接口,当我们输入ifconfig时你可以看到usb0和usb1。现在一个无线电的IP为192.168.10.2,另一个有192.168.20.2。我在路由表中使用命令

提供了一个条目
  

route add -net 12.0.0.0/ gw 1​​92.168.10.1

现在我的服务器程序是用JAVA编写的,我为这两个IP打开了一个UDP套接字。我有一台IP 12.0.0.20的设备,当该设备在192.168.10.2上发送数据时,我的服务器能够监听数据,我可以处理这些数据。但是当设备尝试通过192.168.20.2发送数据时,wireshark会显示目标为192.168.20.2的数据,但我的程序无法侦听该数据。但是如果我添加另一个条目

  

route add -net 12.0.0.0/8 gw 1​​92.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也有关于传入数据的信息。所以请任何人建议我有什么问题。

我真的很喜欢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

这两条路线发生冲突,因为它们都说将所有数据发送到以12.x.x.x开头的任何IP地址到不同的位置。
删除两个路由 route del -net 12.0.0.0/8 gw 1​​92.168.20.1 route del -net 12.0.0.0/8 gw 1​​92.168.10.1

添加特定于这些主机的路由: route add -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定义网络。