每當裝入一個網卡驅動模塊,系統會為它分配一個設備名字,命名規則是:第一個以
太網卡是eth0,第二個是eth1,....以此類推。分配可以用dmesg命令顯示,例如:
rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/Linux/dri
vers/r
tl8139.Html
eth0: RealTek RTL8139 Fast Ethernet at 0xd800, IRQ 19, 00:50:ba:d0:8d:ec.
表明rtl8139的設備名字是eth0,MAC地址是十六進制0050bad08dec。
下面需要為設備分配IP地址和網絡廣播地址以便啟動TCP/IP。這要使用ifconfig命令
,其語法是
ifconfig [設備名][IP地址]netmask[網絡掩碼] broadcast [廣播地址] ....
例如,要為eth0分配ip地址202.199.248.145,掩碼為255.255.255.0,廣播地址是20
2.199.248.255,那麼命令是
/sbin/ifconfig eth0 202.199.248.145 netmask 255.255.255.0 broadcast 202.19
9.248.255
同樣的方式可以用來配置eth1,eth2,等等,通常netmask和broadcast只要設置一個
就可以了。
不帶參數的ifconfig命令可以顯示當前啟動的網絡接口:
[openlab]# ifconfig
eth0Link encap:EthernetHWaddr 00:50:BA:D0:8D:EC
inet addr:202.199.248.6Bcast:202.199.248.255Mask:255.255.255
.0
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:1930 errors:0 dropped:0 overruns:0 frame:0
TX packets:841 errors:0 dropped:0 overruns:0 carrier:0
collisions:1 txqueuelen:100
Interrupt:19 Base address:0xd800
loLink encap:Local Loopback
inet addr:127.0.0.1Mask:255.0.0.0
UP LOOPBACK RUNNINGMTU:3924Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
lo是look-back網絡接口,從IP地址127.0.0.1就可以看出,它代表“本機”。無論系
統是否接入網絡,這個設備總是存在的,除非你在內核編譯的時候禁止了網絡支持。
如果你只是關心某個設備是否正常,可以在ifconfig後面加上接口名字:
[openlab]# ifconfig eth0
eth0Link encap:EthernetHWaddr 00:50:BA:D0:8D:EC
inet addr:202.199.248.6Bcast:202.199.248.255Mask:255.255.255
.0
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:2284 errors:0 dropped:0 overruns:0 frame:0
TX packets:889 errors:0 dropped:0 overruns:0 carrier:0
collisions:1 txqueuelen:100
Interrupt:19 Base address:0xd800
表示eth0設備已經正常工作。
有時需要為某個設備接口配置多個IP地址,辦法是使用設備別名,例如,eth0設備可
以有eth0,eth0:0,eth0:1....多個別名,每個都可以有一個獨立的IP地址:
ifconfig eth0 202.199.248.2 netmask 255.255.255.0 broadcast 202.199.248.25
5
ifconfig eth0:0 202.199.248.3 netmask 255.255.255.0 broadcast 202.199.248.
255
這樣,202.199.248.2和202.199.248.3都會被綁定在eth0設備上,使用同樣的網絡設
備,不同的IP地址。
如果你要暫停某個網絡接口的工作,使用down參數:
ifconfig eth0 down
將取消eth0網絡接口。與之對應的是有一個參數up,不過由於是缺省值,所以從來不
用。
4.2.3 協議和路由配置
配置了網絡接口之後,通常本地網絡就可以通信了,通過ping命令可以顯示子網內能
否相互訪問:
[openlab]# ping 202.199.248.1
PING 202.199.248.1 (202.199.248.1) from 202.199.248.6 : 56(84) bytes of da
ta.
64 bytes from 202.199.248.1: icmp_seq=0 ttl=255 time=0.9 ms
64 bytes from 202.199.248.1: icmp_seq=1 ttl=255 time=0.9 ms
64 bytes from 202.199.248.1: icmp_seq=2 ttl=255 time=0.8 ms
64 bytes from 202.199.248.1: icmp_seq=3 ttl=255 time=0.8 ms
64 bytes from 202.199.248.1: icmp_seq=4 ttl=255 time=0.8 ms
64 bytes from 202.199.248.1: icmp_seq=5 ttl=255 time=0.8 ms
?--- 202.199.248.1 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.8/0.8/0.9 ms
注意ping命令會反復試驗直到你按下^C為止,上面的信息說明本地網的相互通信已經
正常了。但是如果你現在ping子網外面的機器,就會得到一個“網絡不可達”的信息,
因為還沒有設置路由:
[openlab]# ping 202.112.58.200
connect: Network is unreachable
路由路徑的設置是由route命令完成的,通常,你用ifconfig命令啟動一個網絡接口的
時候會啟動一個子網內的路由,這可以用route命令顯示出來:
[openlab]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric RefUse If
ace
202.199.248.0 * 255.255.255.0 U 000 et
h0
127.0.0.0 * 255.0.0.0 U 000 lo
這兩行表示目標地址在C類網202.199.248.0(也就是,202.199.248.0到202.199.248.
255)中的數據包要送到eth0設備去廣播,而目標為A類地址127.0.0.0的數據包直接送到
lo接口。
那麼,下一步需要給出目標地址不在這個子網內的數據包的遞送地址,route命令可以
用來加入這種靜態遞送路徑:
route [add/del] [-net/-host] [目標地址] [gw] 網關地址或者
route [add/del] default gw [網關地址]
route [add/del] –net [子網地址] dev [網絡接口]
add/del表示在路由表中增加還是刪除一條路徑,而-net或者-host則表示投遞的目標
地址是一個地址還是一個網絡,如果是網絡的話,可以使用netmask參數。gw後邊跟路由
器地址。例如,要把目標地址是202.118.x.x的數據包通過202.199.248.1路由出去,使
用
route add –net 202.118.0.0 netmask 255.255.0.0 gw 202.199.248.1
如果要撤銷這個路由路徑,照樣重敲一遍並且使用del替換add:
route del -net 202.118.0.0 netmask 255.255.0.0 gw 202.199.248.1
當然,實際上,大部分比較小的網絡使用缺省路由,即“除了本地地址,全都投遞到
路由器”,這可以使用default參數來完成,例如,我們的缺省路由器是202.199.248.1
,那麼,使用命令
route add default gw 202.199.248.1
有時也需要設定對某個主機的確定路由路徑,這可以把-net選項換成-host,另外主機
地址不能使用掩碼,其他和上面說的一樣。route命令還有一個特殊的參數metric,用來
設置路由器的缺省跳數,不過事實上沒有人用。
route的最後一個常用參數是dev,用於設定設備接口,這個功能一般用在你有多片網
卡的時候。例如,要強制讓所有目標地址是202.199.248.0的包通過eth0送出,使用
route add –net 202.199.248.0 netmask 255.255.255.0 dev eth0
最後可以用route和ping命令檢測一下是否正確:
[openlab]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric RefUse If
ace
202.199.248.0 * 255.255.255.0 U 000 et
h0
127.0.0.0 * 255.0.0.0 U 000 lo
default router.asnc.edu 0.0.0.0 UG000 et
h0
[openlab]# ping 202.112.58.200
PING 202.112.58.200 (202.112.58.200) from 202.199.248.6 : 56(84) bytes of
data.
64 bytes from 202.112.58.200: icmp_seq=0 ttl=247 time=586.0 ms
64 bytes from 202.112.58.200: icmp_seq=1 ttl=246 time=562.2 ms
64 bytes from 202.112.58.200: icmp_seq=2 ttl=246 time=617.6 ms
?--- 202.112.58.200 ping statistics ---
4 packets transmitted, 3 packets received, 25% packet loss
round-trip min/avg/max = 562.2/588.6/617.6 ms
一般來說,經過這樣的配置之後,Linux系統已經可以使用網絡了。但是,域名系統需
要額外配置,我們這裡不涉及DNS Server,相反,假定你已經有了一個可以使用的域名
服務器,並且知道它的IP地址,那麼,你需要修改一個文件,即/etc/resolv.conf,這
個文件用於尋找正確的DNS服務器地址:
[openlab]# cat /etc/resolv.conf
search asnc.edu.cn
nameserver 202.199.248.2
search子句定義了缺省的域名後綴,例如,現在這個配置中,當你輸入ping myhost時
,系統自動將myhost解釋成myhost.asnc.edu.cn。nameserver子句給出名字服務器的IP
地址,可以有多個nameserver子句。
接下來是/etc/host.conf和/etc/nsswitch.conf兩個文件,這兩個文件定義名字解析
的順序。需要指出的是不同的Linux內核可能使用不同的定義,有的使用/etc/host.con
f,有的使用/etc/nsswitch.conf,沒有確定的標准,目前的版本主要是使用/etc/nssw
itch.conf。一般系統安裝後這兩個文件的內容已經是正確的,不過為了完整,這裡解釋
一下:/etc/host.conf的內容是
order hosts,bind
multi on
第一個order子句用於說明域名的搜索順序,hosts其實就是/etc/hosts文件的內容,
這個文件用來定義某些需要在啟動時使用的地址,例如,一個典型的/etc/hosts文件的
內容是
[openlab]# cat /etc/hosts
202.199.248.6 localhost.localdomain localhost
202.199.249.2 openlab.asnc.edu.cn openlab
202.199.248.5 solaris7.asnc.edu.cnsolaris7
202.199.248.149 tvt.asnc.edu.cn tvt
每一行定義了一個ip地址、主機名和別名。
bind指代一個dns服務。連起來的意思就是先查找本地/etc/hosts文件,然後再查詢D
NS服務器。
multi on的含義是允許一個名字有多個ip。
/etc/nsswitch.conf文件比較長,你在其中應該能看到類似這樣的行:
hosts:files dns
這一行的效果和/etc/host.conf裡的order hosts,bind是類似的。
現在你有了一個可以使用網絡的系統了,但是除了resolv.conf和host.conf/nsswitc
h.conf之外,這些內容並沒有被記憶下來,而是一旦重起就會丟失,因此,很自然的想
法是把相關的命令放到啟動腳本中,一開機就自動執行。往系統的缺省運行級目錄裡寫
一個腳本是不錯的主意,或者寫在rc.inet1,rc.sysinit等等地方,但是,如果喜歡有
序,你可以看看基於菜單的配置工具。