用RPi做的无线路由已经用了一周,发现了一些问题,记录一下问题的解决办法。 1、ADSL连接失败ADSL在每次系统启动时都会由systemd调用pppoe-start进行连接。而有时因为Modem和RPi一起开机的时候,可能RPi已经启动了,但Modem还没有获取到动态IP。此时RPi无法连接上ADSL,进而导致无线客户端即使连接上RPi也无法上Internet。 看了一下systemd的man pages,找到了解决办法。在/usr/lib/systemd/system/adsl.service文件的[Service]段里加入下面一行: 便可以在ADSL连接失败,即在pppoe-start执行失败后,自动重试。这样就避免手工重新进行ADSL连接的麻烦。 2、找不到无线网卡这种情况一般在重新启动RPi后发生,也在冷启动RPi的时候出现过。起初也想通过上述systemd脚本失败重试的方法来解决。不过发现不行,因为这不是初始化命令运行失败,而是找不到无线网卡(即找不到硬件)的缘故,没法通过重试来解决。后来看了看了Realtek的驱动包中一份关于节电模式的文档,再通过dmesg看了一下,原来网卡打开了节电模式。突然感觉可能是节电模式引起的问题。于是找出了驱动源码,将Makefile文件中的CONFIG_POWER_SAVING改为n,并重新编译驱动。安装驱动重新启动后,再dmesg看了一下已经关闭了节电模式。完成这个后,近3天都没有出现找不到无线网卡的情况了。 3、没有公网防火墙当时在设置ADSL连接时选择了不要防火墙一项,所以RPi连上ADSL后,就完全暴露在Internet上。任何人只需知道IP就可以任意地ping和访问上面的所有端口。某天在用ssh登录RPi时发现有个类似病毒的.exe文件。可能是新手吧,竟然向Linux主机上传.exe木马文件。当时就意识到没有防火墙还是比较危险的,便在iptables里加上了一些限制远程访问RPi的过滤规则: - [root@alarmpi ~]# iptables -A INPUT -p udp -i ppp0 --dport 0:1023 -j LOG
- [root@alarmpi ~]# iptables -A INPUT -p tcp -i ppp0 --dport 0:1023 -j LOG
- [root@alarmpi ~]# iptables -A INPUT -p udp -i ppp0 --dport 0:1023 -j DROP
- [root@alarmpi ~]# iptables -A INPUT -p tcp -i ppp0 --dport 0:1023 -j DROP
- [root@alarmpi ~]# iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j DROP
复制代码上述的规则就是对端口为0至1023的tcp和udp协议的数据包进行日志记录并抛弃,还有禁止远程机器ping RPi。
最后就是保存iptables的规则保存至启动时用于恢复iptables的文件/etc/iptables/iptables.rules中: - [root@alarmpi ~]# iptables-save > /etc/iptables/iptables.rules
复制代码 4、存储卡容量扩展失败最近安装软件时提示空间不足,用df -h查看了一下,发现根文件系统的空间只有1.8G,和刚刷完系统的时候一样。在做无线路由之前就已经用fdisk和resize2fs来扩展过存储卡的容量,现在却又还原到原来的数值。感觉应该是在pacman进行系统升级时升级了内核造成的。因为升级内核之后,发现存储卡中的config.txt变了,arm128_start.elf之类的文件也消失了。所以分区也应该是那时被改了。于是再次通过fdisk和resize2fs来扩展分区的容量,却发现resize2fs失败,无法进行on-line扩展,提示的原因是没有权限。 google了一下,也找不到解决的办法,不过在一些技术博客里看到没有权限的原因可能是已经被加载了。但也说不通,因为on-line模式就是用在被加载后的分区进行容量修改的。尝试在RPi上umount根文件系统,结果失败,原因可能是因为有服务在上面运行,不能umount。于是想既然要umount,就是不能从存储卡的根文件系统启动了。便在笔记本上打开Ubuntu,并把存储卡插入笔记本,用gparted打开存储卡,并umount掉其中的根文件系统,用鼠标手动其容量边界到存储卡空间的最后,然后应用修改。再把存储卡插入RPi中启动系统,正常,而且用df -h查看容量,恢复到了7.2G。 5、限制客户端为了无线路由的安全起见,最好还要限制一下能够使用该路由的客户端。虽然客户端连接时都需要用密码,但密码有被破解的风险,所以可以通过限制客户端来增加无线路由的安全性。
在hostapd的配置文件/etc/hostapd/hostapd.conf中可以设置macaddr_acl属性来实现,它是通过匹配客户端的MAC地址来判断该客户端是否能够连接无线路由。这个属性的默认值为0,即除开黑名单文件(通过deny_mac_file属性定义)中的MAC地址,其他都可以连接。将该属性改成1,就可以限制只允许白名单文件(通过accept_mac_file属性定义)中的MAC地址连接了。而macaddr_acl的值还可以设置为2,即使用外部RADIUS服务器来完成验证。
文章来自:http://gutspot.com |