一块arm开发板,带有以太网口,还有一个在京东上买的usbwifi模块,wifi模块在ubuntu上直接可以用,输入lsusb,发现其使用的wifi模块竟然是realtek的8192,于是想用这两个网口实现无线路由的转发功能,即板子的以太网接到局域网,以太网与wifi的wlan0直接存在一定转发规则,然后手机或者笔记本连上8192的AP即可上网。
实现这一功能稍微有些繁琐,需要移植和配置一些东西,这里只说一下步骤与注意细节,不再详细的去写过程。
1以太网部分。我的板子文件系统是nfs的,挂到虚拟机192.168.1.248,板子以太网ip是192.168.1.100;
2AP部分。先移植8192驱动,把固件放到指定位置,insmod 8192.ko,出现wlan0节点。ifconfig wlan 192.168.0.1 ,指定wlan0的ip地址。然后让8192作为AP,需要移植hostapd,配合配置文件,配置文件里主要是创建ap的一些参数,如ap名称、密码、加密方式等,然后运行hostapd,此时用手机扫描wifi出现 “rtwap”。8192的hostapd在驱动源码里有。
3ip分配与获取。通过udhcpd与udhcpc实现,udhcpd一般运行在路由器端,负责分发ip,udhcpc运行与终端,负责获取ip,只有当路由器端运行了udhcpd,终端才可以通过udhcpc获取ip,否则你是获取不到ip的,移植udhcpd,编写配置文件,配置文件描述了ip分发规则,当有客户端连上AP后,udhcpd会跟据配置文件的规则自动分配一个IP地址。例子中的配置文件ip分配从 192.168.0.2开始,这样一般第一个连上的ip是192.168.0.2,下一个是192.168.0.3......。waln0的ip是192.168.0.1相当于路由器的网关。
4ip转发。路由器具有路由和ip转发功能,这里我们只实现转发功能。ip转发依赖于内核的防火墙,需要先在内核里选上相关配置选项,然后移植iptables,由iptables去实现。
移植iptables的时候需要注意,移植的时候库使用什么路径,那么文件系统里要把库放到和移植时相同路径,否则提示某些参数命令找不到。iptables移植好之后,即可进行转发规则设置。
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
iptables -A FROWARD -s 192.168.0.0/24 -j ACCEPT
iptables -A FROWARD -d 192.168.0.0/24 -j ACCEPT
有这四条命令后,会将192.168.0.0网段的ip伪装成eth0的192.168.1.x通过eth0转发 。
5客户端的设置。pc连上rtwap,获取到ip 192.168.0.2,ping 192.168.1.248,但是ping超时,为什么? 因为一般的笔记本有以太网口和无线网口,默认 192.168.1.x ip通过以太网发出去,而我们想让192.168.1.248通过192.168.0.1发出去,这样192.168.1.248到192.168.0.1网关之后,iptables进行转发,然后选择相应路由。指定ip地址由哪个网口发出去,要看pc的路由表,所以ping 不通的原因是我们没有在本地添加相应路由。
sudo route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
这样设置以后,ping 192.168.1.248 就可以ping 通,然后 ssh linux@192.168.1.248 ,输入密码后可以登上虚拟主机。
6调试工具。 移植tcpdump,可以对指定网卡抓包。tcpdump -i wlan0 -v 可以显示wlan0的数据传递情况。我当时一直没有ping通,后来通过tcpdump发现是pc端路由设置不对。
7备注。具体各个工具的移植网上资料较多,不再赘述。
来源:CSDN
作者:杨幂的咪
链接:https://blog.csdn.net/Hsu_smile/article/details/39121205