+ -
当前位置:首页 → 问答吧 → 请教高人解释一下gentoo手册中配置网卡的这几步到底是为什么?

请教高人解释一下gentoo手册中配置网卡的这几步到底是为什么?

时间:2007-08-21

来源:互联网

当年装gentoo时,照着手册配网卡,先链接,再设置net文件,但是回头想想发现有点不对,于是开始在网上搜索linux网卡的配置方法说明,发现每个版本的linux的网卡配置方法并不一样,gentoo也是独一份,而我现在遇到一些使用问题,更让我对gentoo配置网卡的做法产生了一些疑问,特此请教:

按照官方安装文档,不管你有几个网卡,哦,错了,应该说了不管有几个网络连接界面-iface(ppp拨号产生的也算),你都得这么设置

举例
首先,产生一个链接

ln -s net.lo net.eth1

这样/etc/init.d/的下面就出现了net.eth1的启动脚本

然后在/etc/con.f/net里设置关于这个界面的配置,包括IP网关等,

最后,如果你要让它开机就能启动,你还必须

rc-upade add net.eth1 default

我现在不理解的地方在于第一步,第一步,为什么要这么干,这么干到底是做什么的?难道说回环界面lo的启动脚本可以复制一个给eth1,ppp0等直接使用吗?

我之所以如此问是我发现了一些奇怪的问题,那就是我的机器按照上面这一套做下来后,如果把网卡加入了开机启动,那么,哪怕你以后运行了
rc-update del net.eth1 default
把它从默认启动里删除,它仍然能开机启动,而且,从启动时滚动的命令行显示的信息可以很明显的看到eth1是紧跟着lo启动的,等他启动后,后面才开始出现default里的启动项目,这让我大惑不解,开始怀疑gentoo的开机启动模式的设计……

另外,最近发现了第二个问题,我设置了ppp0这个拨号上网的界面并且开机自启动后,ssh被卡住了,每次启动时,总会提示shh必须等待ppp0启动完后才能启动,然后即使ppp0启动完毕连上网,ssh服务也没能启动起来,远程登录无效,必须手动启动

这让我进一步怀疑ln -s net.lo net.xxx这个命令到底做了什么,请高人指点……

作者: abcbuzhiming   发布时间: 2007-08-21

引用:
作者: abcbuzhiming
我之所以如此问是我发现了一些奇怪的问题,那就是我的机器按照上面这一套做下来后,如果把网卡加入了开机启动,那么,哪怕你以后运行了
rc-update del net.eth1 default
把它从默认启动里删除,它仍然能开机启动,而且,从启动时滚动的命令行显示的信息可以很明显的看到eth1是紧跟着lo启动的,等他启动后,后面才开始出现default里的启动项目,这让我大惑不解,开始怀疑gentoo的开机启动模式的设计……
我和zhoukb也为此郁闷过,有高手出来解释一下就再好不过了

作者: 杨珂   发布时间: 2007-08-21

/sbin/rc 文件是系统启动的shell脚本,不满意可以改,启动不了不要找我,哈哈~~~

作者: 抽烟斗的狗   发布时间: 2007-08-21

引用:
作者: 抽烟斗的狗
/sbin/rc 文件是系统启动的shell脚本,不满意可以改,启动不了不要找我,哈哈~~~
这个解释很奇怪吧,网卡启动的脚本明明依赖的是init.d下的net.xxx,只是这个net.xxx被添加到了/etc/runlevels/default下面去了而已,当default下面已经没有这个脚本以后,脚本仍然能自动启动,这实在让人费解,gentoo的启动模式到底是怎么回事……

作者: abcbuzhiming   发布时间: 2007-08-21

rc-upade add net.eth1 default
这个命令已经把网卡的启动加进系统的runlevels,runlevels是gentoo启动时的控制,也就是随系统的安排在启动时启动,而init.d是系统已经启动后的控制,你可以在启动后来关闭和启动网卡:
/etc/init.d/net.eth0 stop
/etc/init.d/net.eth0 start
是两个阶段的控制,我的理解,哈哈~~~~
为何不能删除runlevels的设定,我不会,没需要如此做过.

作者: 抽烟斗的狗   发布时间: 2007-08-22

引用:
作者: 抽烟斗的狗
rc-upade add net.eth1 default
这个命令已经把网卡的启动加进系统的runlevels,runlevels是gentoo启动时的控制,也就是随系统的安排在启动时启动,而init.d是系统已经启动后的控制,你可以在启动后来关闭和启动网卡:
/etc/init.d/net.eth0 stop
/etc/init.d/net.eth0 start
是两个阶段的控制,我的理解,哈哈~~~~
为何不能删除runlevels的设定,我不会,没需要如此做过.
你似乎没有弄明白我的意思,rc-upade add net.eth1 default这个命令等于说把net.eth1这个启动脚本调入了runlevels,由系统在启动时调用并启动,这好比我在windows下的开始——启动里增加了一个程序的快捷方式,然后奇怪的就在这里,凭什么当我把这个快捷方式从runlevel里删除以后,这个快捷方式所指向的设备或者程序,仍然能随着系统启动,这很可怕的,这意味这gentoo的启动模式对我来说不透明,试想一下如果你把QQ的快捷方式从windows的开始——程序——启动里删除后,再次启动后你的机器仍然自动蹦出一个QQ的登陆框,一般人看到这会怎么想?——“该死的,我的机器是不是中毒了”……老实说我第一次发现这个问题时就产生了同样的怀疑,为什么我已经把这设备从runlevels里删除了,它仍然能在系统启动时自动运行,至于后面的什么
/etc/init.d/net.eth0 stop
/etc/init.d/net.eth0 start
的不是我们讨论的范畴,我们现在讨论的焦点就一个——gentoo的启动程序设备加载机制是怎么回事?要么,这个网卡只要设置好链接和net文件里的设置,实际上不需要rc-upade add net.eth1 default就能够自己启动(其实我考虑过这种可能,因为在设置好eth1的IP,mask,route参数以后,等于eth1这个界面已经被我定了,这有点类似windows XP下的给网卡指定IP这个设置,被指定了IP的联网界面开机时会自动起效并完成网络连接),rc-upade add net.eth1 default这个命令是在你没有给定联网界面时的强行启动方式……要么就是gentoo启动时加载的方式仍然有秘密。

顺便说一下,我这个人有系统洁癖,我不能容忍系统背着我干任何我不明白的事情,曾经有个叫dhcpcd的程序,因为他会莫名其妙的,在我根本没在net文件里设置任何网卡用dhcp得到IP的情况下,如果我的一块网卡没IP时,启动系统居然能看见它自己启动起来给我那个没IP的网卡分配IP……当我看到这一情况又搞不清楚这dhcpcd为何会自己启动的情况下(连windows都可以禁用dhcp client服务,你个小样居然敢不经我允许启动),我立马把这程序踢出了我的系统,如果我找不到资料能解释gentoo会自动启动我网卡的合理解释,那我最后只能把他踢出我的电脑了……

作者: abcbuzhiming   发布时间: 2007-08-22

引用:
作者: 杨珂
我和zhoukb也为此郁闷过,有高手出来解释一下就再好不过了
感觉是udev的功劳,不知是否对否?
现在我已将 /etc/init.d/net.eth*全部删除,用networkmanger来管理,具体可参考这篇文章http://gentoo-wiki.com/NetworkManager

作者: zhoukb   发布时间: 2007-08-22

引用:
作者: zhoukb
感觉是udev的功劳,不知是否对否?
现在我已将 /etc/init.d/net.eth*全部删除,用networkmanger来管理,具体可参考这篇文章http://gentoo-wiki.com/NetworkManager
貌似我并没有启动udev,
不过有一点你倒是说对了,就是如果删除了etc/init.d/net.eth*,那么eth*就真的无法自动启动了……

我觉得最重要的是搞清楚gentoo的这种启动机制到底怎么工作的,否则有一天被黑客利用了怎么办?

作者: abcbuzhiming   发布时间: 2007-08-22

引用:
作者: zhoukb
感觉是udev的功劳,不知是否对否?
现在我已将 /etc/init.d/net.eth*全部删除,用networkmanger来管理,具体可参考这篇文章http://gentoo-wiki.com/NetworkManager
又从你这学到东西了
才搬了个家 网络有点问题 一空就试试

作者: 杨珂   发布时间: 2007-08-22

行了,回到正题上来吧,为什么这个东西会自动启动,至于什么第三方程序以后再说吧

作者: abcbuzhiming   发布时间: 2007-08-22

网卡能用和网卡参数能用是两回事.网卡能用是内核和模块的事,网卡参数是rc和init的事.
一句话:你设定了网卡参数,有两个地方可以调用
1.rc-upade add net.eth1 default 命令,随机启用.
不使用rc-upade add net.eth1 default命令,网卡可用,因为大多数情况下网卡模块随系统启动,但参数不起用,ifconfig 会找到网卡,但找不到网卡的ip地址.
2./etc/init.d/net.eth0 start 命令调用.

作者: 抽烟斗的狗   发布时间: 2007-08-22

看看以下命令的输出:
rc-update show

作者: tell   发布时间: 2007-08-22

引用:
作者: abcbuzhiming

我之所以如此问是我发现了一些奇怪的问题,那就是我的机器按照上面这一套做下来后,如果把网卡加入了开机启动,那么,哪怕你以后运行了
rc-update del net.eth1 default
把它从默认启动里删除,它仍然能开机启动,
你说的“把网卡加入了开机启动”是什么意思?
怎么加入开机启动的?

作者: tell   发布时间: 2007-08-22

引用:
作者: 抽烟斗的狗
网卡能用和网卡参数能用是两回事.网卡能用是内核和模块的事,网卡参数是rc和init的事.
一句话:你设定了网卡参数,有两个地方可以调用
1.rc-upade add net.eth1 default 命令,随机启用.
不使用rc-upade add net.eth1 default命令,网卡可用,因为大多数情况下网卡模块随系统启动,但参数不起用,ifconfig 会找到网卡,但找不到网卡的ip地址.
2./etc/init.d/net.eth0 start 命令调用.
其实现在的根源在于:/etc/init.d/这个目录下记录的类似快捷方式一样的东西到底是什么,据说是启动脚本,这些文件我都打开看过,遗憾的是看不明白。

1.网卡模块随系统启动应该是他的硬件层面被驱动了,但是软件层面就未必了,我的理解是如果软件层面没有启动,ifconfig里就看到不到这个eth1,另外就是:网卡的IP地址等参数都记录在/etc/conf.d/net这个文件里,我的估计是如果这个文件已经记录了eth1的相关IP等参数,那么在硬件层面驱动的时候会自动加载,ifconfig就能看到eth1这个软界面,只有这样才解释的通,因为从启动记录里可以看到,很明显eth1不是在default组里启动的,rc-upade add net.eth1 default仅仅是把net.eth1启动加入到runlevel里,和把QQ快捷方式加到windows的开机程序启动没有区别,我前面也说了,如果以前rc-upade add net.eth1 default过了,即使后来运行了rc-upade del net.eth1 default,把net.eth1赶出runlevel的default组,重新启动后net.eth1仍然启动了,ifconfig仍然能看见网卡IP,很明显网卡被启动了……当然这需要懂行的人解释

2.现在最关键的问题是搞清楚一件事就是/etc/init.d/net.eth0 start这个命令到底启动了些什么,或者说/etc/init.d/net.eth0 stop到底停止了什么。

作者: abcbuzhiming   发布时间: 2007-08-22

ln -s net.lo net.eth1 —— 这一步一般不需要,网卡驱动配好后一般自动出现/etc/init.d/net.eth0
还有,你是在哪里执行的上述命令?/etc/init.d还是/etc/runlevels/{boot,default}?
/etc/init.d中存放一些脚本,可以用于开机时执行,但这些脚本要链接到/etc/runlevels下开机时才会真正执行,
rc-update所做的就是这件事,添加/删除/etc/runlevels下的链接而已

redhat有/etc/rc.d/rc.{0,1,2,3,4,5,6}这几个目录,这是经典的启动目录排列方式,
gentoo用了自己的一套,只剩下/etc/runlevels/{boot,default,nonetwork,single}
好像新版ubuntu也用了它自己的一套启动方式

作者: tell   发布时间: 2007-08-22

也许跟这里有关
/etc/conf.d/rc

# RC_NET_STRICT_CHECKING allows some flexibility with the 'net' service.
# The following values are allowed:
# none - The 'net' service is always considered up.
# no - This basically means that at least one net.* service besides net.lo
# must be up. This can be used by notebook users that have a wifi and
# a static nic, and only wants one up at any given time to have the
# 'net' service seen as up.
# lo - This is the same as the 'no' option, but net.lo is also counted.
# This should be useful to people that do not care about any specific
# interface being up at boot.
# yes - For this ALL network interfaces MUST be up for the 'net' service to
# be considered up.

RC_NET_STRICT_CHECKING="no"

作者: SDE   发布时间: 2007-08-22

引用:
作者: tell
看看以下命令的输出:
rc-update show
明天我看看

引用:
作者: tell
你说的“把网卡加入了开机启动”是什么意思?
怎么加入开机启动的?
你看gentoo官方中文安装手册里讲“配置你的网络”那章就知道了,rc-upade add net.eth1 default,就是把net.eth1这个文件给添加到/etc/runlevels/default下,随系统启动而启动,而现在问题的焦点在于如果做过rc-upade add net.eth1 default这一步,那么将来即使rc-upade del net.eth1 default,net.eth1不存在/etc/runlevels/default下时,net.eth1仍然能在开机时启动,这一点尤其古怪
代码:
配置你的网络

在准备说“嘿,我们已经配置过网络”之前,你应该记得在开始安装Gentoo之初所设置的网络配置是仅仅为了安装而设置的。现在你所要设置的是Gentoo系统的永久网络配置。 

注意: 更多关于网络配置的详细信息,包括网卡绑定、网桥、802.1Q VLANs和无线网络在内的高级配置会在Gentoo网络配置这一部分介绍. 
 

/etc/conf.d/net当中收集了所有的网络信息。尽管这个文件采用直接易懂的语法,如果你还是因为觉得不够直观而完全不知道如何手动进行网络配置的话,请不用担心,我们将一一解释。在/etc/conf.d/net.example中有一个详细注释过的例子,它涵盖了许多种类不同的配置。 

系统默认使用DHCP。如果使用DHCP的话,你需要安装一个DHCP客户端。这个将在稍后的安装必要的系统工具部分介绍。但是不要忘记安装一个DHCP客户端。 

如果你需要配置你的网络连接,不管是因为你是需要指定DHCP选项还是你根本不想采用DHCP,请使用你喜欢的编辑器(在这个例子中用的是nano)打开/etc/conf.d/net: 

代码 7: 打开/etc/conf.d/net准备编辑
 
# nano -w /etc/conf.d/net
 

你会看到以下的文件: 

代码 8: 默认的/etc/conf.d/net
 
# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d. To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).
 

为了输入你自己的IP地址,子网掩码和网关,你需要设置config_eth0和routes_eth0: 

代码 9: 手动为eth0设置IP信息
 
config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default via 192.168.0.1" )
 

如果你使用DHCP并且想设定DHCP选项,请定义一下config_eth0和dhcp_eth0: 

代码 10: 让eth0自动获得IP地址
 
config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"
 

请阅读/etc/conf.d/net.example以得到所有选项的列表。 

如果你有多个网络接口,那么重复之前对于config_eth1、config_eth2等的操作步骤。 

现在可以保存配置并且退出,继续下面的安装和配置。 

在启动时自动启用网络

为了在启动时自动激活网络接口,你必须添加这些到default运行级别。 

代码 11: 添加net.eth0到默认的运行级别
 
# rc-update add net.eth0 default
 

如果你有多个网络接口,你需要为他们创建合适的net.eth1、net.eth2等启动脚本。你可以用ln来做这个。 

代码 12: 创建额外的启动脚本
 
# cd /etc/init.d
# ln -s net.lo net.eth1
# rc-update add net.eth1 default
 
就上面这段红色部分

其实现在想想,还有一个奇怪的地方,理论上,linux里的eth*仅仅是一个联网界面他可以不存在,也可以不启动,比如如果我在eth0上ppp拨号,我认为系统应该只显示ppp0,而不应该显示eth0(如果eth0没有被配置IP等设定并启动的话),然而现实是ppp0建立时必须先启动eth0,也就是说这个eth0本身既是一个虚拟的联网界面,同时也代表网卡的硬件界面,这个定义就很模糊了,当年我想了有一个星期才想明白:网卡硬件代号——联网界面代号之间的区别,现在又糊涂了……

作者: abcbuzhiming   发布时间: 2007-08-22

我是怀疑你
rc-update add net.eth1 boot

那么
rc-upade del net.eth1 default
自然没用,
所以,贴下
rc-update show

还有你rc-upade写错了,我从你那段拷下来发现*_*

作者: tell   发布时间: 2007-08-22

引用:
作者: abcbuzhiming
貌似我并没有启动udev,
不过有一点你倒是说对了,就是如果删除了etc/init.d/net.eth*,那么eth*就真的无法自动启动了……

我觉得最重要的是搞清楚gentoo的这种启动机制到底怎么工作的,否则有一天被黑客利用了怎么办?
你研究一下/etc/udev/rules.d吧。

还有就是看一下你启动runlerels中的脚本中depend() 段是否包括need net,这样net也会随着这个脚本启动的。

作者: zhoukb   发布时间: 2007-08-22

go to bed

作者: tell   发布时间: 2007-08-22

引用:
作者: tell
ln -s net.lo net.eth1 —— 这一步一般不需要,网卡驱动配好后一般自动出现/etc/init.d/net.eth0
还有,你是在哪里执行的上述命令?/etc/init.d还是/etc/runlevels/{boot,default}?
/etc/init.d中存放一些脚本,可以用于开机时执行,但这些脚本要链接到/etc/runlevels下开机时才会真正执行,
rc-update所做的就是这件事,添加/删除/etc/runlevels下的链接而已

redhat有/etc/rc.d/rc.{0,1,2,3,4,5,6}这几个目录,这是经典的启动目录排列方式,
gentoo用了自己的一套,只剩下/etc/runlevels/{boot,default,nonetwork,single}
好像新版ubuntu也用了它自己的一套启动方式
需要,如果你有第二块网卡的话,比如一块eth0,一块eth1,默认的net.eth0可能已经存在/etc/init.d下,但是eth1是绝对不存在的,这一点我已经反复把gentoo装了不下20编

在哪里执行这些命令?我不懂你的意思,我用命令时全部写的绝对路径,,我现在奇怪的就在这,rc-dpdate仅仅是添加了一个链接,为什么这个链接被删除后他代表的东西还能启动呢,虽然从启动命令行的滚动来看不是在default组启动的


/etc/rc.d/rc.{0,1,2,3,4,5,6}
这是不是linux的通用启动目录,是不是说记录在其中的可以在系统启动时启动,真是的话我要好好研究一下了,gentoo手册上没有提到这点
引用:
作者: SDE
也许跟这里有关
/etc/conf.d/rc

# RC_NET_STRICT_CHECKING allows some flexibility with the 'net' service.
# The following values are allowed:
# none - The 'net' service is always considered up.
# no - This basically means that at least one net.* service besides net.lo
# must be up. This can be used by notebook users that have a wifi and
# a static nic, and only wants one up at any given time to have the
# 'net' service seen as up.
# lo - This is the same as the 'no' option, but net.lo is also counted.
# This should be useful to people that do not care about any specific
# interface being up at boot.
# yes - For this ALL network interfaces MUST be up for the 'net' service to
# be considered up.

RC_NET_STRICT_CHECKING="no"
看明白了,难道真是这个,要去研究一下

引用:
作者: tell
我是怀疑你
rc-update add net.eth1 boot

那么
rc-upade del net.eth1 default
自然没用,
所以,贴下
rc-update show

还有你rc-upade写错了,我从你那段拷下来发现*_*
这是不可能的,为了验证,我亲自去/etc/runlevels下的default目录和boot目录确认过

作者: abcbuzhiming   发布时间: 2007-08-22

看/etc/conf.d/rc里的这几个选项

RC_HOTPLUG="yes"
如果是yes,表示如果插上硬件,而且你有驱动,驱动自动加载(此即hotplug),之后此硬件相关的服务会自动启动

RC_COLDPLUG="yes"
和hotplug类似,不过只是指开机时检测加载硬件驱动

RC_PLUG_SERVICES="net.eth0 !net.*"
如此就表示不管是hot还是coldplug,只有eth0会自动启动,其他任何网络界面都不会启动

而我自己则做的更绝,我根本不让系统加载我的8139cp模块——我只用无线网卡

作者: zhllg   发布时间: 2007-08-22

引用:
作者: zhllg
看/etc/conf.d/rc里的这几个选项

RC_HOTPLUG="yes"
如果是yes,表示如果插上硬件,而且你有驱动,驱动自动加载(此即hotplug),之后此硬件相关的服务会自动启动

RC_COLDPLUG="yes"
和hotplug类似,不过只是指开机时检测加载硬件驱动

RC_PLUG_SERVICES="net.eth0 !net.*"
如此就表示不管是hot还是coldplug,只有eth0会自动启动,其他任何网络界面都不会启动

而我自己则做的更绝,我根本不让系统加载我的8139cp模块——我只用无线网卡
差不多明白了,不过我对gentoo的内核编译还了解的不深,所以我编译的时候网卡驱动不是以M形式编译进去的,是完全塞进内核里的

不过最后有个问题,那就是eth*这东西到底是一个硬件层面上的东西,还仅仅是一个软件的网络界面,我们都知道类似ppp0这样的只是一个软件界面而已,可是为什么当ppp0从eth*这块网卡上拨号时,系统仍然会启动eth*呢,eth*到底仅仅是一个网络界面,还是包含硬件层面的东西?

作者: abcbuzhiming   发布时间: 2007-08-22

当然eth0是和硬件对应的,network interface就是网卡,直译就是网络界面
如果你用ADSL,ppp0就会依赖于eth0,因为ADLS是ppp over ethernet
如果你用56K modem,那ppp0就代表modem

作者: zhllg   发布时间: 2007-08-22

引用:
作者: zhllg
当然eth0是和硬件对应的,network interface就是网卡,直译就是网络界面
如果你用ADSL,ppp0就会依赖于eth0,因为ADLS是ppp over ethernet
如果你用56K modem,那ppp0就代表modem
啊?那不对了,看来我的理解还是有问题,那如果一块网卡上绑定多个IP,这每个IP代表什么?我记得曾经听说过linux可以做策略路由,一块网卡绑定多个IP,然后内网的机器以不同的IP出去,这个时候这些IP代表的是什么?代表这块网卡,还是每个IP算一个网络界面?

作者: abcbuzhiming   发布时间: 2007-08-22

ip代表通信地址,这是没有疑义的

An IP address (Internet Protocol address) is a unique address that certain electronic devices use in order to identify and communicate with each other on a computer network utilizing the Internet Protocol standard (IP)

不过我的回帖可能让你有些糊涂了,不好意思
我第一个回帖里的网络界面指的是服务,也是这个服务所代表的通信节点,就是网络地址,就是IP
第二个我又说是指网卡,我其实是忘记看了我的第一个回帖
这两种理解都正确,不过要看具体环境
http://en.wikipedia.org/wiki/Network_interface

ppp0, eth0这些东西一般都和具体硬件一一对应,不过ADSL是特殊的,ADSL是pppoe,也就是运行在以太网之上的ppp协议,ppp0此时就和eth0重叠,对应同一个物理硬件。或者你想象成是一个虚拟硬件,但下面依赖于实体物理硬件。

作者: zhllg   发布时间: 2007-08-22