路由协议aodv-uu-0.9.6在Linux系统实现上多跳出现问题

时间:2021-03-23 03:58:44
我先详细描述下我的情况以及遇到的问题:
我想搭建的场景为:模拟组建一个ad hoc网络,有一个主控节点可以通过路由协议来控制其他几个节点的移动性。具体实现:3个arm板置于可以有轮的小车上,通过电路的连接,arm板可以通过程序来控制小车的移动。
我们现在是四个节点组成的ad-hoc网络,所用的路由协议为aodv-uu-0.9.6。一个节点是台式电脑(以下成为节点1),另外三个节点都是ARM板(mini6410)+Linux系统(以下成为节点2,3,4)置于小车上来实现移动性,我们将kaodv.ko编译进了内核然后放入了ARM中,网络的配置也都是按照网上所说,模式为ad-hoc,网络都配置在了一个网段192.168.1。然后将四个节点启动
aodvd应用程序,每个节点都能搜到剩余的三个相邻节点(因为几个arm板位置比较近),查看路由表也能看到邻节点的路由,但都是一跳的;
起初我们用iptables的方式屏蔽了节点1发往节点2的数据,然后节点1和节点2就不能ping通了(也就是不能找到中间节点进行转发),然后我们人为的在节点1的路由表中加入了经由 节点3  中继,目的节点为节点2的路由表项,此时节点1和 节点2 就可以
ping通了。 
后来我们用了远距离断开链路的方式将节点1和节点2的一跳链路断开,节点3 放在了他们之间,保证节点1,2都能分别和节点3
 ping通,但是就是不能寻找到节点1 和节点2的路由,ping的时候一直显示目的节点不可达。你看这是什么问题呢?
      另,我觉得有必要把我们前期的编译工作说明一下,看是否是前期出了问题:

版本相关:
Linux 系统        Fedora9
内核        Linux2.6.38
交叉编译器        arm-linux-gcc-4.5.1
路由协议        aodv-uu-0.9.6.tar
(1)下载tar包后对其进行解压。
(2)PC版本和ARM版本分别执行命令make和make arm生成aodvd。
(3)进入lns文件夹执行make命令生成kaodv.ko。
(4)网络环境配置搭建如下所示:
#iwconfig wlan3 mode ad-hoc essid aodv-test
#ifconfig wlan3 192.168.1.1 up
# insmod kaodv.ko
    #./ aodvd
跪求大神给予指导~~跪谢!!

30 个解决方案

#1


楼主,请问你是怎么解决的?遇到同样的问题了

#2


引用 1 楼 cjjb09010405 的回复:
楼主,请问你是怎么解决的?遇到同样的问题了

还没能解决,来这里寻求大神给予指导呢~~你也在做类似的东西么?多交流交流~~

#3


Linux内核版本、路由协议版本、交叉编译器版本都和你的一样,我直接用iptables命令过滤,使得1和3之间不能直接通信,运行aodv协议后想通过2实现转发,协议运行后,能发现邻居节点并添加到路由表,但是1和3还是ping不通,不知道哪里有问题,很捉急

#4


引用 3 楼 cjjb09010405 的回复:
Linux内核版本、路由协议版本、交叉编译器版本都和你的一样,我直接用iptables命令过滤,使得1和3之间不能直接通信,运行aodv协议后想通过2实现转发,协议运行后,能发现邻居节点并添加到路由表,但是1和3还是ping不通,不知道哪里有问题,很捉急

那你1和3的路由表中有没有经过2中继的这条路由呢?跟你的问题很像呢~~我是自己手动添加了这条转发路由,就能ping通了  但这种手动的办法也不是办法啊~~

#5


我感觉运行路由协议后我的路由表不正确,我的1\2\3都是ARM板,运行aodv后用route命令查看时,1和3显示目的节点都是2,你是怎么手动添加路由的啊,ARM板上好像不能手动添加带有中继的路由。看很多资料都是运行了aodv后可以直接实现路由转发啊,为啥就不能ping通呢 ,求指导   

#6


AODV路由配置都很简单,
首先转发要打开Linux内核的转发功能,ip_forward = 1

#7


引用 5 楼 cjjb09010405 的回复:
我感觉运行路由协议后我的路由表不正确,我的1\2\3都是ARM板,运行aodv后用route命令查看时,1和3显示目的节点都是2,你是怎么手动添加路由的啊,ARM板上好像不能手动添加带有中继的路由。看很多资料都是运行了aodv后可以直接实现路由转发啊,为啥就不能ping通呢 ,求指导   

我觉得你的路由表是对的,因为你用iptables屏蔽了,1和3之间就没有路由了   只有到2的路由。。就是没有实现转发功能~~
手动添加路由的具体命令我也忘了   你可以搜下  不过也没啥意义、。
你可以看下6楼的回复,试试如何~~

#8


好的,谢谢两位,是直接用命令配置linux下的转发功能就行?楼主有试过吗  你的问题解决了吗

#9


请问6楼,我想运行路由协议实现三个节点之间的转发,还需要怎么配置啊,能不能给我说的详细点儿啊,非常感谢~~

#10


引用 8 楼 cjjb09010405 的回复:
好的,谢谢两位,是直接用命令配置linux下的转发功能就行?楼主有试过吗  你的问题解决了吗

还没试   我明天查看下默认的是不是0   

#11


没懂这个ip_forward在哪里查看和设置,求指导,囧~~

#12


引用 11 楼 cjjb09010405 的回复:
没懂这个ip_forward在哪里查看和设置,求指导,囧~~

其实大部分Linux的VPN模块(ppp),基本上都采用了路由转发。当然,如果想用Linux实现最基本的路由(交换机)功能,前提也需要开启内核转发服务。在进行Linux内核转发时,需要在proc文件系统的proc/sys目录设置转发的参数,可以使用下面的方法查看该参数的值 cat   /proc/sys/net/ipv4/ip_forward
1、开启Linux内核转发

echo "1" > /proc/sys/net/ipv4/ip_forward


SSH执行以上命令,1为开启,0为关闭。
2、保持开机自动启动

vi  /etc/sysctl.conf


修改以下字符

# Controls IP packet forwarding
net.ipv4.ip_forward = 0 #0为关闭,1为开启

修改后保存即可,下次开机后可自动加载。
关于如何实现NAT功能,可以配合iptables或ppp,具体请参考以后的教程。
试试~~

#13


楼主你试过了吗?你问题解决了没啊?我用命令查看ip_forward原来是0,设置为1以后,终端1和3之间想通过2转发还是ping不通啊,请问你解决了吗?

#14


引用 13 楼 cjjb09010405 的回复:
楼主你试过了吗?你问题解决了没啊?我用命令查看ip_forward原来是0,设置为1以后,终端1和3之间想通过2转发还是ping不通啊,请问你解决了吗?
第一,先看路由表中是否有路由。
第二,ip_forward必须在内核编译打开router选项,设置ip_forward=1才有效

#15


你好,查看路由表有一跳可达的路由地址,没有转发可达的目标地址;在编译内核时打开router选项是指在内核编译用make menuconfig命令进行配置时,需要把router选项选进去,这样设置ip_forward=1才有效????求回复,非常感谢!!!

#16


引用 14 楼 LouisScola 的回复:
Quote: 引用 13 楼 cjjb09010405 的回复:

楼主你试过了吗?你问题解决了没啊?我用命令查看ip_forward原来是0,设置为1以后,终端1和3之间想通过2转发还是ping不通啊,请问你解决了吗?
第一,先看路由表中是否有路由。
第二,ip_forward必须在内核编译打开router选项,设置ip_forward=1才有效

您的意思是说  即使没有打开router选项和设置ip_forward=1,路由表中也应该有转发的路由项?

#17


引用 15 楼 cjjb09010405 的回复:
你好,查看路由表有一跳可达的路由地址,没有转发可达的目标地址;在编译内核时打开router选项是指在内核编译用make menuconfig命令进行配置时,需要把router选项选进去,这样设置ip_forward=1才有效????求回复,非常感谢!!!
想问这么多自己去单独开个贴

#18


引用 15 楼 cjjb09010405 的回复:
你好,查看路由表有一跳可达的路由地址,没有转发可达的目标地址;在编译内核时打开router选项是指在内核编译用make menuconfig命令进行配置时,需要把router选项选进去,这样设置ip_forward=1才有效????求回复,非常感谢!!!

你尝试用以下方式设置ip_forward的值了么?
保持开机自动启动

vi  /etc/sysctl.conf


修改以下字符

# Controls IP packet forwarding
net.ipv4.ip_forward = 0 #0为关闭,1为开启

修改后保存即可,下次开机后可自动加载。
为何我的找不到/etc/sysctl.conf文件

#19


我的ARM板etc配置文件下也没有sysctl.conf文件,我试了简单的设置,用命令sysctl net.ipv4.ip_forward查看,sysctl -w net.ipv4.ip_forward=1将其设置为1,但是这个重启后不能保存,这个方法设置后仍然不能转发,不知道是不是我的内核编译时没有打开router选项

#20


引用 19 楼 cjjb09010405 的回复:
我的ARM板etc配置文件下也没有sysctl.conf文件,我试了简单的设置,用命令sysctl net.ipv4.ip_forward查看,sysctl -w net.ipv4.ip_forward=1将其设置为1,但是这个重启后不能保存,这个方法设置后仍然不能转发,不知道是不是我的内核编译时没有打开router选项

额。。这样呀,我也只是修改了一下,没有试能否转发,话说make meunconfig中有router这个选项么。。不能没选吧,要不怎么能实现一跳呢。。好惆怅,过年要回家了,来年再战,有了新的情况及时来更新哦~~

#21


引用 19 楼 cjjb09010405 的回复:
我的ARM板etc配置文件下也没有sysctl.conf文件,我试了简单的设置,用命令sysctl net.ipv4.ip_forward查看,sysctl -w net.ipv4.ip_forward=1将其设置为1,但是这个重启后不能保存,这个方法设置后仍然不能转发,不知道是不是我的内核编译时没有打开router选项

多跳问题解决了没?

#22


没有呢,就是不能自动转发,最近刚回到学校在忙其他事儿的,你的搞得怎么样啦

#23


引用 22 楼 cjjb09010405 的回复:
没有呢,就是不能自动转发,最近刚回到学校在忙其他事儿的,你的搞得怎么样啦

我也刚回来两天,我突然想起来我这边用了iptables以后,路由表中就没有转发的路由,这是不是说明路由协议没有运行正确呢。。留下你的QQ或者邮箱什么的吧,方便联系~~

#24


好的啊  我的QQ是1430429215  我也是用了iptables命令过滤之后,再运行aodv协议时,用route查看路由表  里面没有转发的路由,只有可以直达的一跳路由    不知道是路由协议没有运行正确 还是不能转发的问题  

#25


有谁解决了吗?我的也不能实现转发!

#26


请问楼主解决了吗?

#27


我觉得iptables是不是和aodv-uu冲突啊??我是靠拉长距离可以实现多跳,但是我想在板子(tiny6410)上使用NAT,但内核编译一加入NAT的功能后,aodv-uu就不能正常运行了,无法找到邻居节点。。你的内核是编译了哪些模块?

#28


请问下:现在有没有人做出来呀,遇到什么问题了?大家都交流交流呗....

#29


我现在边编译都通不过了!!!!!!
楼主可否把AODV的两层目录下的Makefile分享一下!

#30


大家有没有在linux内核3.5以上编译过这个路由协议啊,
今天试了下出现了好多的错误,没有头绪了,网上基本都是在2.6内核版本上进行的

#1


楼主,请问你是怎么解决的?遇到同样的问题了

#2


引用 1 楼 cjjb09010405 的回复:
楼主,请问你是怎么解决的?遇到同样的问题了

还没能解决,来这里寻求大神给予指导呢~~你也在做类似的东西么?多交流交流~~

#3


Linux内核版本、路由协议版本、交叉编译器版本都和你的一样,我直接用iptables命令过滤,使得1和3之间不能直接通信,运行aodv协议后想通过2实现转发,协议运行后,能发现邻居节点并添加到路由表,但是1和3还是ping不通,不知道哪里有问题,很捉急

#4


引用 3 楼 cjjb09010405 的回复:
Linux内核版本、路由协议版本、交叉编译器版本都和你的一样,我直接用iptables命令过滤,使得1和3之间不能直接通信,运行aodv协议后想通过2实现转发,协议运行后,能发现邻居节点并添加到路由表,但是1和3还是ping不通,不知道哪里有问题,很捉急

那你1和3的路由表中有没有经过2中继的这条路由呢?跟你的问题很像呢~~我是自己手动添加了这条转发路由,就能ping通了  但这种手动的办法也不是办法啊~~

#5


我感觉运行路由协议后我的路由表不正确,我的1\2\3都是ARM板,运行aodv后用route命令查看时,1和3显示目的节点都是2,你是怎么手动添加路由的啊,ARM板上好像不能手动添加带有中继的路由。看很多资料都是运行了aodv后可以直接实现路由转发啊,为啥就不能ping通呢 ,求指导   

#6


AODV路由配置都很简单,
首先转发要打开Linux内核的转发功能,ip_forward = 1

#7


引用 5 楼 cjjb09010405 的回复:
我感觉运行路由协议后我的路由表不正确,我的1\2\3都是ARM板,运行aodv后用route命令查看时,1和3显示目的节点都是2,你是怎么手动添加路由的啊,ARM板上好像不能手动添加带有中继的路由。看很多资料都是运行了aodv后可以直接实现路由转发啊,为啥就不能ping通呢 ,求指导   

我觉得你的路由表是对的,因为你用iptables屏蔽了,1和3之间就没有路由了   只有到2的路由。。就是没有实现转发功能~~
手动添加路由的具体命令我也忘了   你可以搜下  不过也没啥意义、。
你可以看下6楼的回复,试试如何~~

#8


好的,谢谢两位,是直接用命令配置linux下的转发功能就行?楼主有试过吗  你的问题解决了吗

#9


请问6楼,我想运行路由协议实现三个节点之间的转发,还需要怎么配置啊,能不能给我说的详细点儿啊,非常感谢~~

#10


引用 8 楼 cjjb09010405 的回复:
好的,谢谢两位,是直接用命令配置linux下的转发功能就行?楼主有试过吗  你的问题解决了吗

还没试   我明天查看下默认的是不是0   

#11


没懂这个ip_forward在哪里查看和设置,求指导,囧~~

#12


引用 11 楼 cjjb09010405 的回复:
没懂这个ip_forward在哪里查看和设置,求指导,囧~~

其实大部分Linux的VPN模块(ppp),基本上都采用了路由转发。当然,如果想用Linux实现最基本的路由(交换机)功能,前提也需要开启内核转发服务。在进行Linux内核转发时,需要在proc文件系统的proc/sys目录设置转发的参数,可以使用下面的方法查看该参数的值 cat   /proc/sys/net/ipv4/ip_forward
1、开启Linux内核转发

echo "1" > /proc/sys/net/ipv4/ip_forward


SSH执行以上命令,1为开启,0为关闭。
2、保持开机自动启动

vi  /etc/sysctl.conf


修改以下字符

# Controls IP packet forwarding
net.ipv4.ip_forward = 0 #0为关闭,1为开启

修改后保存即可,下次开机后可自动加载。
关于如何实现NAT功能,可以配合iptables或ppp,具体请参考以后的教程。
试试~~

#13


楼主你试过了吗?你问题解决了没啊?我用命令查看ip_forward原来是0,设置为1以后,终端1和3之间想通过2转发还是ping不通啊,请问你解决了吗?

#14


引用 13 楼 cjjb09010405 的回复:
楼主你试过了吗?你问题解决了没啊?我用命令查看ip_forward原来是0,设置为1以后,终端1和3之间想通过2转发还是ping不通啊,请问你解决了吗?
第一,先看路由表中是否有路由。
第二,ip_forward必须在内核编译打开router选项,设置ip_forward=1才有效

#15


你好,查看路由表有一跳可达的路由地址,没有转发可达的目标地址;在编译内核时打开router选项是指在内核编译用make menuconfig命令进行配置时,需要把router选项选进去,这样设置ip_forward=1才有效????求回复,非常感谢!!!

#16


引用 14 楼 LouisScola 的回复:
Quote: 引用 13 楼 cjjb09010405 的回复:

楼主你试过了吗?你问题解决了没啊?我用命令查看ip_forward原来是0,设置为1以后,终端1和3之间想通过2转发还是ping不通啊,请问你解决了吗?
第一,先看路由表中是否有路由。
第二,ip_forward必须在内核编译打开router选项,设置ip_forward=1才有效

您的意思是说  即使没有打开router选项和设置ip_forward=1,路由表中也应该有转发的路由项?

#17


引用 15 楼 cjjb09010405 的回复:
你好,查看路由表有一跳可达的路由地址,没有转发可达的目标地址;在编译内核时打开router选项是指在内核编译用make menuconfig命令进行配置时,需要把router选项选进去,这样设置ip_forward=1才有效????求回复,非常感谢!!!
想问这么多自己去单独开个贴

#18


引用 15 楼 cjjb09010405 的回复:
你好,查看路由表有一跳可达的路由地址,没有转发可达的目标地址;在编译内核时打开router选项是指在内核编译用make menuconfig命令进行配置时,需要把router选项选进去,这样设置ip_forward=1才有效????求回复,非常感谢!!!

你尝试用以下方式设置ip_forward的值了么?
保持开机自动启动

vi  /etc/sysctl.conf


修改以下字符

# Controls IP packet forwarding
net.ipv4.ip_forward = 0 #0为关闭,1为开启

修改后保存即可,下次开机后可自动加载。
为何我的找不到/etc/sysctl.conf文件

#19


我的ARM板etc配置文件下也没有sysctl.conf文件,我试了简单的设置,用命令sysctl net.ipv4.ip_forward查看,sysctl -w net.ipv4.ip_forward=1将其设置为1,但是这个重启后不能保存,这个方法设置后仍然不能转发,不知道是不是我的内核编译时没有打开router选项

#20


引用 19 楼 cjjb09010405 的回复:
我的ARM板etc配置文件下也没有sysctl.conf文件,我试了简单的设置,用命令sysctl net.ipv4.ip_forward查看,sysctl -w net.ipv4.ip_forward=1将其设置为1,但是这个重启后不能保存,这个方法设置后仍然不能转发,不知道是不是我的内核编译时没有打开router选项

额。。这样呀,我也只是修改了一下,没有试能否转发,话说make meunconfig中有router这个选项么。。不能没选吧,要不怎么能实现一跳呢。。好惆怅,过年要回家了,来年再战,有了新的情况及时来更新哦~~

#21


引用 19 楼 cjjb09010405 的回复:
我的ARM板etc配置文件下也没有sysctl.conf文件,我试了简单的设置,用命令sysctl net.ipv4.ip_forward查看,sysctl -w net.ipv4.ip_forward=1将其设置为1,但是这个重启后不能保存,这个方法设置后仍然不能转发,不知道是不是我的内核编译时没有打开router选项

多跳问题解决了没?

#22


没有呢,就是不能自动转发,最近刚回到学校在忙其他事儿的,你的搞得怎么样啦

#23


引用 22 楼 cjjb09010405 的回复:
没有呢,就是不能自动转发,最近刚回到学校在忙其他事儿的,你的搞得怎么样啦

我也刚回来两天,我突然想起来我这边用了iptables以后,路由表中就没有转发的路由,这是不是说明路由协议没有运行正确呢。。留下你的QQ或者邮箱什么的吧,方便联系~~

#24


好的啊  我的QQ是1430429215  我也是用了iptables命令过滤之后,再运行aodv协议时,用route查看路由表  里面没有转发的路由,只有可以直达的一跳路由    不知道是路由协议没有运行正确 还是不能转发的问题  

#25


有谁解决了吗?我的也不能实现转发!

#26


请问楼主解决了吗?

#27


我觉得iptables是不是和aodv-uu冲突啊??我是靠拉长距离可以实现多跳,但是我想在板子(tiny6410)上使用NAT,但内核编译一加入NAT的功能后,aodv-uu就不能正常运行了,无法找到邻居节点。。你的内核是编译了哪些模块?

#28


请问下:现在有没有人做出来呀,遇到什么问题了?大家都交流交流呗....

#29


我现在边编译都通不过了!!!!!!
楼主可否把AODV的两层目录下的Makefile分享一下!

#30


大家有没有在linux内核3.5以上编译过这个路由协议啊,
今天试了下出现了好多的错误,没有头绪了,网上基本都是在2.6内核版本上进行的