網路軟體的手動組態應該永遠是最後的替代方案。 建議使用 YaST。 不過,這個有關網路組態的背景資訊也可協助您使用 YaST。
所有內建的網路卡以及熱插式網路卡 (PCMCIA、USB、一些 PCI 卡) 會透過熱插方式進行偵測到並加以設定。 系統將網路卡視為兩種不同的項目,首先是視為實體設備,再來是視為介面。插入設備或偵測到設備時則會觸發熱插事件。 此熱插事件使用程序檔 hwup 觸發設備的起始化。 起始化網路卡作為新的網路介面時,核心會產生另一個熱插事件,使用 /ifup 觸發介面的設定。
核心根據介面名稱註冊的暫時順序加以編號。 起始化順序是指定名稱的決定因素。 如果數個網路卡中的一個失敗,所有依序起始化網路卡的編號就會改變。 對於真正的可熱插式網路卡,設備連接的順序才是決定因素。
為了讓組態具有彈性,已經分開設備 (硬體) 及介面的組態,而且不再以介面名稱來管理組態與設備和介面之間的對應。 設備組態位於 /etc/sysconfig/hardware/hwcfg-*。 介面組態位於 /etc/sysconfig/network/ifcfg-*。 組態名稱是以描述設備及其關聯介面的方式來指定的。 因為之前驅動程式與介面名稱的對應需要靜態介面名稱,所以此對應不再發生於 /etc/modprobe.conf。 在這種新的概念中,此檔案中的別名項目造成不想要的副作用。
組態名稱 (hwcfg- 或 ifcfg- 之後的任何項目) 都可以透過插槽、設備專用 ID 或介面名稱來描述設備。例如,PCI 卡的組態名稱可以是 bus-pci-0000:02:01.0 (PCI 插槽) 或 vpid-0x8086-0x1014-0x0549 (廠商和產品 ID)。 相關聯介面的名稱可以是 bus-pci-0000:02:01.0 或 wlan-id-00:05:4e:42:31:7a (MAC 位址)。
若要指定特定網路組態到任何特定類型的卡 (一次僅能插入一種) 而不是特定卡,請選取較不特定的組態名稱。 例如,bus-pcmcia 可以用於所有 PCMCIA 卡。 在另一方面,之前的介面類型會限制名稱。 例如,wlan-bus-usb 可以指定給連接到 USB 埠的 WLAN 卡。
系統永遠使用最佳描述介面或提供介面之設備的組態。 搜尋最適用組態是由 getcfg 處理的。 getcfg 的輸出會傳達可以用來描述設備的所有資訊。有關組態名稱規格的詳細資料,請參閱 getcfg 的手冊頁。
透過描述的方法,即使網路設備不一定永遠以相同的順序起始化,網路介面還是可以具有正確的組態設定。 不過,介面的名稱仍然取決於起始化順序。 有兩種方式可以確保確實存取特定網路卡介面:
getcfg-interface configuration name 傳回相關聯網路介面的名稱。因此,可以輸入一部份的組態名稱 (例如,防火牆、dhcpd、路由、各種虛擬網路介面 (通道)) ,取代介面名稱,因為這種名稱並不是永久不變的。
永久介面名稱會自動指定給每個介面。 您可以自行調整以符合您的需要。 建立介面名稱時,請依照 /etc/udev/rules.d/30-net_persistent_names.rules 中概述的方式執行。 然而,永久名稱 pname 不能與核心自動指定的名稱相同。 所以,不允許 eth*、tr*、wlan* 等名稱。 相反地,請使用 net* 或是 external、internal、dmz 之類的描述名稱。 必須確定不要重複使用相同的介面名稱。 介面名稱中可用的字元僅限於 [a-zA-Z0-9]。 永久名稱僅能在註冊後立即指定給介面,這表示必須重新載入網路卡的驅動程式或執行 hwup device description。針對此用途,僅使用指令 rcnetwork restart 是不夠的。
重要: 使用永久介面名稱
永久介面名稱的使用尚未測試於所有方面。 因此,一些應用程式可能無法自由地處理選取的介面名稱。
ifup 需要現有介面,因為它不會起始化硬體。 硬體的起始化是由指令 hwup (由 hotplug 或 coldplug 執行) 處理的。 起始化設備時,會透過 hotplug 自動為新介面執行 ifup,如果開始模式是 onboot、hotplug 或 auto,就會設定介面,而且會啟動 network 服務。 之前,是使用指令 ifup interfacename 來觸發硬體起始化。現在已經反轉此程序。 首先,會起始化硬體元件,接著是所有其他的動作。 採取這種方式,則永遠可以使用現有的組態集,儘可能以最佳的方式設定不同數目的設備。
表 30-5總結了與網路組態相關的最重要程序檔。只要可能,會依硬體和介面區分程序檔。
表 30-5 手動網路組態程序檔
|
組態階段 |
指令 |
函數 |
|---|---|---|
|
硬體 |
hw{up,down,status} |
hw* 程序檔由熱插式子系統執行,用來起始化設備、復原起始化、或查詢設備狀態。詳細資訊請參閱 hwup 的手冊頁。 |
|
介面 |
getcfg |
getcfg 可以用來查詢與組態名稱或硬體描述相關聯的介面名稱。 詳細資訊請參閱 getcfg 的手冊頁。 |
|
介面 |
if{up,down,status} |
if* 程序檔會開啟現有網路介面或傳回指定介面的狀態。 詳細資訊請參閱 ifup 的手冊頁。 |
有關熱插拔和永久設備名稱的詳細資訊,請參閱節 21.0, 使用 udev 進行動態核心設備管理。
本節提供網路組態檔的概觀,並說明其用途和使用的格式。
這些檔案包含網路卡及其他設備的硬體組態; 其中包含所需的參數,如核心模組、啟動模式和程序檔關聯。 詳細資訊請參閱 hwup 的手冊頁。 無論現有硬體為何,啟動 coldplug 時會套用 hwcfg-static-* 組態。
這些檔案包含網路介面的組態; 其中包含啟動模式和 IP 位址等資訊。 可以使用的參數請參閱 ifup 的手冊頁。 此外,如果一般設定僅用於一個介面,則檔案 dhcp、wireless 和 config 中的所有變數都可以用於 ifcfg-* 檔案。
檔案 config 包含 ifup、ifdown、和 ifstatus 行為的一般設定;dhcp 則包含無線區域網路介面卡之 DHCP 和 wireless 的設定。 所有三個組態檔中的變數都已註解,而且可以在 ifcfg-* 檔案中使用,以更高優先順序處理。
TCP/IP 封包的靜態路由在此決定。 您可以將各種系統工作所需的靜態路由都輸入 /etc/sysconfig/network/routes 檔案:主機的路油、透過閘道前往主機的路由,以及網路的路由。對於需要個別路由的介面,請定義額外的組態檔案:/etc/sysconfig/network/ifroute-*。以介面的名稱取代 *。 在路由組態檔中的項目看起來就像這樣:
# Destination Dummy/Gateway Netmask Device # 127.0.0.0 0.0.0.0 255.255.255.0 lo 204.127.235.0 0.0.0.0 255.255.255.0 eth0 default 204.127.235.41 0.0.0.0 eth0 207.68.156.51 207.68.145.45 255.255.255.255 eth1 192.168.0.0 207.68.156.51 255.255.0.0 eth1
路由的目的地是在第一個資料欄。 這個資料欄可能包含網路或主機的 IP 位址,這是指「可到達的」名稱伺服器、完整合格的網路或主機名稱。
第二個資料欄包含預設的閘道或是可以存取主機或網路的閘道。 第三個資料欄包含在閘道後面的網路或主機的網路遮罩。 例如,遮罩為 255.255.255.255,供在閘道後面的主機使用。
第四欄只與連線至本地主機的網路相關,例如迴路、乙太網路、ISDN、PPP 以及虛擬設備。 必須在這裏輸入設備名稱。
第五欄 (可選) 可指定路由的類型。 不需要的欄位必須包含 - 減號,以確保解析程式可正確解譯指令。 如需詳細資訊,請參閱 routes(5) 線上文件。
主機所屬的領域指定於此檔案 (關鍵字 search); 另外也會列出要存取的名稱伺服器位址的狀態 (關鍵字 nameserver)。 可以指定多個領域名稱。 解析不完整的名稱時,會嘗試附加個別 search 項目產生一個名稱。 透過輸入數行且每行都以 nameserver 開頭的方法,可使用多個名稱伺服器。 在註解前加上 # 符號。YaST 在此檔案中輸入指定名稱伺服器。範例 30-5 顯示出 /etc/resolv.conf 可能的樣子。
範例 30-5 /etc/resolv.conf
# Our domain search example.com # # We use sun (192.168.0.20) as nameserver nameserver 192.168.0.20
一些如 pppd (wvdial)、ipppd (isdn)、dhcp (dhcpcd 和 dhclient)、pcmcia 及 hotplug 之類的服務會修改檔案 /etc/resolv.conf,方法是使用程序檔 modify_resolvconf。如果檔案 /etc/resolv.conf 已經由此程序檔暫時修改,它會包含預先定義的註解,提供的資訊包含修改它的服務、原始檔案的備份位置以及如何關閉自動修改機制。 如果數次修改 /etc/resolv.conf,檔案會以巢狀形式包含所作的修改。 即使反轉時使用與修改順序不同的順序,還是可以完全反轉此程序。 需要這種彈性的服務包括 isdn、pcmcia、hotplug。
如果沒有以正常的方式終止服務,可以使用 modify_resolvconf 還原原始檔。 另外,在系統開機時,會執行檢查,看看是否有沒有清理、已修改的 resolv.conf (例如,系統當機後),在這種情況下,會還原原始 (未修改) 的 resolv.conf。
YaST 使用指令 modify_resolvconf check 找出是否已修改 resolv.conf,接著將警告使用者還原檔案會遺失所有變更。 除此之外,YaST 不會依靠 modify_resolvconf,意即會透過 YaST 變更 resolv.conf 的影響與手動變更的影響是一樣的。 無論是哪種情形,變更永遠是有效的。 上述提及的服務所需的修改只是暫時的。
在此檔中 (請參閱 範例 30-6),IP 位址是指定給主機名稱。 如果沒有執行任何名稱伺服器,將使用此 IP 連線設定的所有主機將列示於此。 對於每個主機,分別在檔案中輸入一行包含 IP 位址、完整主機名稱及主機名稱的項目。 IP 位址必須在行的開頭,然後以空格和定位點分隔這些項目。 註解的前面永遠是 # 符號。
範例 30-6 /etc/hosts
127.0.0.1 localhost 192.168.0.20 sun.example.com sun 192.168.0.1 earth.example.com earth
在此檔中,網路名稱會轉換為網路位址。 格式與 hosts 檔案格式相似,但是網路名稱在位址前。請參閱範例 30-7。
範例 30-7 /etc/networks
loopback 127.0.0.0 localnet 192.168.0.0
名稱解析,即透過解析程式庫 (Resolver Library) 翻譯主機及網路名稱,是由此檔案控制的。該檔案僅用於與 libc4 或 libc5 連結的程式。 對於目前的 glibc 程式,請參閱 /etc/nsswitch.conf 中的設定。 每個參數必須永遠是獨立一行。 註解的前面是 # 符號。表 30-6 顯示出可用的參數。 /etc/host.conf 範例是顯示在 範例 30-8。
表 30-6 /etc/host.conf 的參數
|
order hosts, bind |
指定名稱解析時服務的存取順序。可用的引數有 (以空格或逗號分隔): |
|
hosts:搜尋 /etc/hosts 檔案 |
|
|
bind:存取名稱伺服器 |
|
|
nis:使用 NIS |
|
|
multi on/off |
定義在 /etc/hosts 中所輸入的主機是否可以有多個 IP 位址。 |
|
nospoof on spoofalert on/off |
這些參數會影響名稱伺服器 spoofing,但除此之外,並不會對網路組態有任何影響。 |
|
trim domainname |
指定的領域名稱在主機名稱解析後會與主機名稱分隔 (只要主機名稱包括領域名稱)。 只有在本地領域分離出來的名稱位於 /etc/hosts 檔案,但是仍然使用附加的領域名稱進行辨識時,這個選項才有用。 |
範例 30-8 /etc/host.conf
# We have named running order hosts bind # Allow multiple addrs multi on
GNU C Library 2.0 的介紹伴隨名稱服務切換 (NSS,Name Service Switch) 的介紹。 詳細資訊請參閱 nsswitch.conf(5) 一文和GNU C Library 參考手冊。
查詢的順序定義於檔案 /etc/nsswitch.conf。 nsswitch.conf 範例是顯示在 範例 30-9。 註解從 # 符號開始。 在此範例中,hosts 資料庫下的項目表示要求是透過 DNS 傳送到 /etc/hosts (files)。
範例 30-9 /etc/nsswitch.conf
passwd: compat group: compat hosts: files dns networks: files dns services: db files protocols: db files netgroup: files automount: files nis
NSS 上可用的資料庫
列示於 表 30-7。此外,將來應該還有 automount、bootparams、netmasks、和 publickey。 NSS 資料庫的組態選項將列於表 30-8。
表 30-7 透過 /etc/nsswitch.conf 的可用資料庫
|
aliases |
sendmail 所執行的郵件別名;請參閱 man 5 aliases。 |
|
ethers |
乙太網路位址。 |
|
群組 |
getgrent 所使用的使用者群組。請參閱 group 的 man 頁面。 |
|
hosts |
gethostbyname 及類似功能所使用的主機名稱與 IP 位址。 |
|
netgroup |
在網路中有效的主機與使用者清單,以利控制存取權限,請參閱 netgroup(5) 一文。 |
|
networks |
getnetent 所使用的網路名稱與位址。 |
|
passwd |
getpwent 所使用的使用者密碼;請參閱 passwd(5) 一文。 |
|
protocols |
getprotoen 所使用的網路通訊協定;請參閱 protocols(5) 一文。 |
|
rpc |
getrpcbyname 及類似功能所使用的遠端程序呼叫名稱與位址。 |
|
服務 |
getservent 使用的網路服務。 |
|
shadow |
getspnam 所使用的使用者遮蔽密碼;請參閱 shadow(5) 一文。 |
表 30-8 NSS資料庫
的組態選項
|
檔案 |
直接存取檔案,例如 /etc/aliases |
|
db |
透過資料庫存取 |
|
nis、nisplus |
NIS,請參閱節 33.0, 使用 NIS |
|
dns |
只能做為 hosts 與 networks 的延伸 |
|
compat |
只能做為 passwd、shadow 以及 group 的延伸 |
此檔案用來設定 nscd (名稱服務快取精靈)。 請參閱 nscd(8) 與 nscd.conf(5)。 依預設,passwd 與 groups 的系統項目是由 nscd 快取。 這對於目錄服務 (如 NIS 和 LDAP) 的效能而言是很重要的,否則每次存取名稱或群組時都需要使用網路連線。預設是不會快取 hosts,因為 nscd 快取主機的機制會造成本地系統無法信任轉寄以及反向查詢檢查。 不要要求 nscd 快取名稱,而是設定快取 DNS 伺服器。
如果啟用 passwd 的快取,通常需要 15 秒,才能辨識新增的本地使用者。 使用指令 rcnscd restart 重新啟動 nscd,縮短這段等待時間。
這是沒有附加領域名稱的主機名稱。 機器開機時數個程序檔會讀取該檔案。 它可以只包含一行,其中設定了主機名稱。
將組態寫入您的組態檔案之前,可先進行測試。 若要設定測試組態,請使用 ip 指令。 若要測試連線,請使用 ping 指令。 同時也可使用較舊的組態工具,如 ifconfig 和 route。
ip、ifconfig 和 route 等指令會以不儲存組態檔案的方式直接變更網路組態。除非您將組態輸入正確的組態檔案,否則重新開機之後網路組態的變更就會遺失。
ip 這個工具可顯示設定路由、網路裝置、原則路由和通道。 它是用來取代 ifconfig 和 route 等舊工具用的。
ip 是非常複雜的工具。 其一般語法是 ip optionsobjectcommand。 您可使用下列物件:
此物件代表網路裝置。
此物件代表裝置的 IP 位址。
此物件代表 ARP 或 NDISC 快取項目。
此物件代表路由表格項目。
此物件代表路由原則資料庫中的規則。
此物件代表多重廣播位址。
此物件代表多重廣播路由快取項目。
此物件表示 IP 上的通道。
若未提供指令,會使用預設指令,通常是 list。
您可使用 ip link set device_name command 指令變更裝置狀態。例如,若要停用裝置 eth0,請輸入 ip link set eth0 down。 若要重新啟用,請使用 ip link set eth0 up。
啟動裝置之後,就可加以設定。 若要設定 IP 位址,請使用 ip addr add ip_address + dev device_name。例如,若要將介面 eth0 的 IP 位址以標準廣播 (選項 brd) 設定為 192.168.12.154/30,請輸入 ip addr add 192.168.12.154/30 brd + dev eth0。
若要具備作用中連線,必須設定預設閘道。 若要為您的系統設定閘道,請輸入 ip route get gateway_ip_address。若要轉換某個 IP 位址,請使用 nat: ip route add nat ip_address via other_ip_address。
若要顯示所有裝置,請使用 ip link ls。 若只希望顯示運作中介面,請使用 ip link ls up。 若要列印裝置的介面統計值,請輸入 ip -s link ls device_name。若要檢是您裝置的位址,請輸入 ip addr。 在 ip addr 的輸出中同時也可找到您裝置的 MAC 位址相關資訊。 若要顯示所有路由,請使用 ip route show。
如需使用 ip 的詳細資訊,請輸入 ip help 或參閱 ip(8) 線上文件。help 選項也適用於所有 ip 物件。 例如,假設您要閱讀 ip addr 的說明,請輸入 ip addr help。請在 /usr/share/doc/packages/iproute2/ip-cref.pdf 中尋找 ip 的手冊。
ping 指令是測試 TCP/IP 連線運作的標準工具。其使用 ICMP 通訊協定,將小型資料封包 ECHO_REQUEST 傳送至目的地主機,要求立即回應。 如果有作用,ping 會顯示訊息,指示網路連結基本上是正常的。
ping 所做的不僅止於測試兩台電腦之間的連線狀態,它還可以提供某些有關於連線品質的基本資訊。您可在 範例 30-10 中看到 ping 輸出的一些範例。 倒數第二行包含已傳送封包數、遺失封包數、執行 ping 總時間等資訊。
對於目的地,可使用主機名稱或 IP 位址,例如 ping example.com 或 ping 130.57.5.75。程式會持續傳送封包,直到您按下 Ctrl ++C 為止。
若您只需要檢查連線功能性,您可以 -c 選項限定封包數目。 例如,若要將 ping 限制在三個封包,請輸入 ping -c 3 192.168.0。
範例 30-10 指令 ping 的輸出
ping -c 3 example.com PING example.com (130.57.5.75) 56(84) bytes of data. 64 bytes from example.com (130.57.5.75): icmp_seq=1 ttl=49 time=188 ms 64 bytes from example.com (130.57.5.75): icmp_seq=2 ttl=49 time=184 ms 64 bytes from example.com (130.57.5.75): icmp_seq=3 ttl=49 time=183 ms --- example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2007ms rtt min/avg/max/mdev = 183.417/185.447/188.259/2.052 ms
兩個封包之間的預設間隔為一秒。 若要變更間隔,ping 提供了選項 -i。 例如,若要將 ping 間隔增加到十秒,請輸入 ping -i 10 192.168.0。
在具備多網路裝置的系統中,透過特定介面位址傳送 ping 非常實用。 若要執行此功能,請使用所選裝置名稱加上 -i 選項,例如 ping -I wlan1 192.168.0。
如需使用 ping 的選項與詳細資訊,請輸入 ping -h 或參閱 ping (8) 線上文件。
ifconfig 是傳統網路設定工具。 與 ip 相反,此指令只能用於介面組態。 若您希望設定路由,請使用 route。
附註: ifconfig 和 ip
ifconfig 這個程式已過時。 請改用 ip。
無疑的,ifconfig 會顯示目前作用中介面的狀態。 如同您在 範例 30-11 中所見,ifconfig 具有排列整齊而詳盡的輸出。 輸出第一行亦包含您裝置的 MAC 位址、HWaddr 數值等資訊。
範例 30-11 ifconfig 指令的輸出
eth0 Link encap:Ethernet HWaddr 00:08:74:98:ED:51
inet6 addr: fe80::208:74ff:fe98:ed51/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:634735 errors:0 dropped:0 overruns:4 frame:0
TX packets:154779 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:1000
RX bytes:162531992 (155.0 Mb) TX bytes:49575995 (47.2 Mb)
Interrupt:11 Base address:0xec80
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8559 errors:0 dropped:0 overruns:0 frame:0
TX packets:8559 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:533234 (520.7 Kb) TX bytes:533234 (520.7 Kb)
wlan1 Link encap:Ethernet HWaddr 00:0E:2E:52:3B:1D
inet addr:192.168.2.4 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20e:2eff:fe52:3b1d/64 Scope:Link
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:50828 errors:0 dropped:0 overruns:0 frame:0
TX packets:43770 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:45978185 (43.8 Mb) TX bytes:7526693 (7.1 Mb)
如需使用 ifconfig 的選項與詳細資訊,請輸入 ifconfig -h 或參閱 ifconfig (8) 線上文件。
route 是操作 IP 路由表格的程式。 您可使用此指令檢是您的路由組態,並新增或移除路由。
附註: route 與 ip
route 這個程式已過時。 請改用 ip。
若您需要快速又易於理解的路由組態資訊以判別路由問題,route 是特別實用的工具。 若要檢視您目前的路由組態,請以 root 身分輸入 route -n。
範例 30-12 route -n 指令的輸出
route -n Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.20.0.0 * 255.255.248.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo default styx.exam.com 0.0.0.0 UG 0 0 0 eth0
如需使用 route 的選項與詳細資訊,請輸入 route -h 或參閱 route (8) 線上文件。
除了上述的組態檔之外,還有在機器開機時載入網路程式的各種程序檔。 只要系統切換到其中一個 multiuser runlevels,就會啟動這些程序檔。 在 表 30-9 中提供了一些程序檔的說明。
表 30-9 網路程式的一些啟動程序檔
|
/etc/init.d/network |
這個程序檔可處理網路介面的組態。 硬體必須先由 /etc/init.d/coldplug (透過 hotplug) 起始化。 如果沒有啟動 network 服務,透過熱插拔插入網路介面時,將無法執行它們。 |
|
/etc/init.d/inetd |
啟動 xinetd。xinetd 可以用來讓伺服器服務能夠在系統上使用。例如,只要開啟 FTP 連線,它即可啟動 vsftpd。 |
|
/etc/init.d/portmap |
啟動 RPC 伺服器 (如 NFS 伺服器) 所需的埠對應程式 (Portmapper)。 |
|
/etc/init.d/nfsserver |
啟動 NFS 伺服器。 |
|
/etc/init.d/postfix |
控制後置程序。 |
|
/etc/init.d/ypserv |
啟動 NIS 伺服器。 |
|
/etc/init.d/ypbind |
啟動 NIS 用戶端。 |