Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514326
  • 博文数量: 119
  • 博客积分: 5054
  • 博客等级: 大校
  • 技术积分: 1305
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-03 13:13
文章分类

全部博文(119)

文章存档

2011年(4)

2010年(115)

我的朋友

分类: LINUX

2010-01-03 14:43:50

FAQ:

Q:新安装的firestarter不管我怎么设置运行向导,都说我的防火墙启动失败,提示:The device is not ready.以前安装都没有问题的阿,为什么现在这样了?


以下是sevk大虾的解决方法

我和论坛里的很多朋友都遇到这样一个问题。启动Firestarter的时候,提示

“External network device $IF is not ready. Aborting..”

其中$IF是个变量,是当前使用的网络接口的名字。例如如果用eth0上网,那么显示的就是

“External network device eth0 is not ready. Aborting..”

这个问题也让我感到很困惑,并且至今没有发现有人解答。只好自己捣鼓。一番猜测和检查后,终于发现了问题所在。就此谈谈其原因和解决的办法。

在我的记忆中,该问题的发生,是在一次软件升级之后。在以前,我将firestarter设置为自启动,以方便随时查看防火墙的状态。它一直工作 得很好,就在

一次软件升级后,它出现了上述问题。为了查看我的eth0配置是否正确,当时便执行了ifconfig。结果发现软件升级 前,ifconfig输出信息都是英文。而升

级后,都是中文的了。当时并没有在意,觉得可能是安装了一些中文包的缘故。也并没有把这个变化和 Firestarter无法启动的事情联系到一起。在后续检

查中,发现虽然Firestarter提示错误,但iptables却运行正常。既然防火墙工 作正常,那么这个图形前端,不看也罢。于是将该问题就此搁置,直到今天又

想念这个图形前端了,才重新捡起来。

想到这两个变化,便做了一个推测。觉得可能是Firestarter的启动脚本比较愚蠢,会从ifconfig的输出信息中查找相关接口的配置信 息。以前它查找的肯定

是英文的字符串,现在由于ifconfig的输出信息变成了中文的,一些参数信息它可能无法获取了,所以导致启动失败。于是检查 Firestarter的启动脚本,发

现竟和我预料的一样。于是问题迎刃而解。

Firestarter 的启动脚本是/etc/init.d/firestarter,其中执行了/etc/firestarter/firestarter.sh来启动防火 墙,因此,其实Firestarter真正的启动脚本是/etc

/firestarter/firestarter.sh。

编辑/etc/firestarter/firestarter.sh

根据本机ifconfig的输出信息来修改以下几行代码:

IP=`/sbin/ifconfig $IF | grep inet | cut -d : -f 2 | cut -d -f 1`

MASK=`/sbin/ifconfig $IF | grep Mas | cut -d : -f 4`

BCAST=`/sbin/ifconfig $IF |grep Bcast: | cut -d : -f 3 | cut -d -f 1`

例如,我的系统使用eth0上网,就执行ifconfig eth0。其中IP地址依然可以通过以上代码的第一行获取,只是子网掩码和广播地址的获取会有问题。于是保

留第一行不做修改,将后两行代码中grep搜索的英文字符串改为相应中文字符串即可。

IP=`/sbin/ifconfig $IF | grep inet | cut -d : -f 2 | cut -d -f 1`

MASK=`/sbin/ifconfig $IF | grep 掩码: | cut -d : -f 4`

BCAST=`/sbin/ifconfig $IF |grep 广播: | cut -d : -f 3 | cut -d -f 1`

保存文件后,启动Firestarter。一切正常。

不知道别人遇到的问题是否和我的一样,记录下来,仅供参考吧。

Update:

无意中看到有人转载了我这个文章,内心竟萌生出一点责任感。

其实这个方法挺傻的。没有任何通用性可言。

于是把想到的一个更好一些的法子写到这里,献丑了。

sudo vi /etc/firestarter/firestarter.sh

找个合适的地方,例如在

# External network interface data

这行注释的上面,添加一行:

LANG=en_US

这样,ifconfig的输出就是英文的了,这个启动脚本也就可以从它的输出信息中搜索出需要的几个参数了。这个方法更加简单,并且感觉上通用性似乎好一点。

阅读(716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~