Ict-創新/LPI/109.2
候選人應該能夠檢視、更改和驗證客戶端主機上的配置設定
關鍵知識領域
- 手動和自動配置網路介面
- 基本 TCP/IP 主機配置。
網路介面卡 (NIC) 必須受核心支援。您可以透過檢查 dmesg 的輸出(顯示核心訊息緩衝區的內容)來確定您正在使用的卡(以及您的核心是否識別它)。
示例
|
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection e1000: eth0: e1000_watchdog_task: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None eth0: no IPv6 routers present |
您可以使用 lspci 直接探測硬體
|
$ lspci | grep -i ethernet 09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller (rev 12) |
lspci -v 提供更多詳細資訊。以下是輸出的相關部分
|
09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller (rev 12) 子系統:戴爾裝置 022e 標誌:匯流排主控,快速選擇,延遲 0,IRQ 28 記憶體位於 f9ffc000(64 位,不可預取)[大小=16K] I/O 埠位於 de00 [大小=256] 功能:<訪問被拒絕> 正在使用的核心驅動程式:sky2 核心模組:sky2 |
從上面的例子中,我們可以看到乙太網控制器的型別、記憶體和 I/O 地址分配、正在使用的 IRQ 以及相關的核心驅動程式模組(本例中為 sky2)。如果使用錯誤的模組或資源(I/O 或 IRQ)不可用,這些資訊可能會有用。
有時,可以使用這些資訊插入具有不同 I/O 地址的模組(使用 modprobe 或 insmod 實用程式),或者將其儲存在 /etc/modules.conf 中。 此檔案由 modprobe 諮詢;在此處放置條目將在下次系統啟動時儲存設定。但是,核心通常會自動檢測卡並載入正確的模組。
名稱解析
機器必須能夠執行主機名解析;也就是說,將機器名(如 neptune.example.com)轉換為 IP 地址(如 144.11.20.101)
/etc/hosts 檔案是執行名稱解析的一種方法。至少您會在該檔案中看到一個針對環回地址(傳統上稱為 localhost)的條目。該檔案也可能包含其他機器的條目,但通常只包含本地網路中的機器
| # 不要刪除以下行,否則各種程式 |
| # 需要網路功能將失敗。 |
| 127.0.0.1 m1530-rhel localhost localhost.localdomain |
| ::1 localhost6 |
| # 其他主機 |
| 192.168.1.108 mesa mesa.domain.org |
| 192.168.1.119 pico |
(另請注意 localhost6 的 IPV6 條目)
名稱解析也可以透過諮詢 DNS 來執行。有關詳細資訊,請參閱主題 109.4:配置客戶端 DNS。
/etc/nsswitch.conf 檔案用於告知標準 C 庫中的解析器在哪裡查詢其資訊。解析器是一個查詢某些內容(如使用者名稱或主機名)並返回一些對應資訊(如 UID 或 IP 地址)的例程。nsswitch.conf 中控制主機名解析的行看起來像這樣
hosts: files dns
此條目告訴解析器首先檢視本地檔案(/etc/hosts),然後諮詢 DNS。此處可以指定的其他主機名查詢來源包括 nis 和 nisplus
核心對機器主機名的當前理解由 hostname 命令報告
|
# hostname m1530-rhel.example.com |
機器的主機名在多個檔案中設定。在某些發行版(如 Ubuntu)上,使用 /etc/hostname 檔案。其他發行版(如 RedHat)在 /etc/sysconfig/network 中設定它。以下命令可能有助於您找出您的發行版中定義了主機名的位置。此示例位於 RedHat 上
|
# find /etc -type f -exec grep -l $(hostname) {} \; /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network /etc/hosts /etc/dhclient-eth0.conf |
/etc/sysconfig/network 檔案定義是否必須啟動網路。在 RedHat 系統上,它還定義了主機名和預設閘道器。這些是適用於整個機器的設定(即,它們不特定於一個網路介面)
| NETWORKING=yes |
| HOSTNAME=mesa.domain.org |
| GATEWAY=192.168.1.254 |
在 RedHat 系統上,/etc/sysconfig/network-scripts/ifcfg-eth0 檔案包含 eth0 的配置引數。此示例顯示了使用靜態分配的 IP 地址的介面的檔案可能是什麼樣子
| DEVICE=eth0 |
| BOOTPROTO=static |
| BROADCAST=192.168.1.255 |
| IPADDR=192.168.1.108 |
| NETMASK=255.255.255.0 |
| ONBOOT=yes |
對於使用 DHCP 配置的卡,該檔案將更簡單
| DEVICE=eth0 |
| BOOTPROTO=dhcp |
| ONBOOT=yes |
停止和啟動網路
- 從命令列
用於啟動網路介面的主要工具是 /sbin/ifconfig。初始化後,核心模組(在 /etc/modules.conf 中別名為 eth0,例如 tulip.o)被載入並分配了 IP 和網路掩碼值。因此,只要核心模組被插入,介面就可以停止和重啟,而不會丟失這些資訊。
示例:使用 ifconfig。
| /sbin/ifconfig eth0 192.168.10.1 netmask 255.255.128.0
/sbin/ifconfig eth0 down /sbin/ifconfig eth0 up |
在沒有引數的情況下執行 ifconfig 將顯示當前設定
|
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:76:13:68 inet addr:192.168.81.130 Bcast:192.168.81.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe76:1368/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5623 errors:0 dropped:0 overruns:0 frame:0 TX packets:8037 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:418797 (408.9 KiB) TX bytes:1338985 (1.2 MiB) Base address:0x2000 Memory:d8920000-d8940000 |
另一個工具是 /sbin/ifup。此實用程式讀取 /etc/sysconfig/ 中的系統配置,併為給定介面分配儲存的值。eth0 的指令碼稱為 ifcfg-eth0,必須進行配置。如果定義了諸如 DHCP 之類的引導協議,則 ifup 將使用該協議啟動介面。
示例:使用 ifup。
|
/sbin/ifup eth0 /sbin/ifup ppp0 /sbin/ifdown eth0 |
RedHat 沒有 ifup 和 ifdown 的手冊頁(Ubuntu 有!),但在 RedHat 上它們是 shell 指令碼,因此您可以檢視程式碼(如果您願意)。
- . 使用網路指令碼
在啟動時,網路介面使用 /etc/rc.d/init.d/network 指令碼初始化。所有相關的網路檔案都在 /etc/sysconfig/ 目錄中被呼叫。此指令碼也可以手動執行。
此外,該指令碼還讀取 /etc/sysctl.conf 中的 sysctl 選項,您可以在其中將系統配置為路由器(允許核心中的 IP 轉發)。例如,行
net.ipv4.ip_forward = 1
將啟用 ip 轉發。如果機器用作閘道器/路由器,您將需要執行此操作。
使用此指令碼,可以像這樣啟動、停止或重啟網路
| # /etc/rc.d/init.d/network start # /etc/rc.d/init.d/network stop # /etc/rc.d/init.d/network restart |
最後一個命令在您更改了 /etc/sysconfig 下的任何網路設定時很有用。但是請注意,此命令將停止並重新啟動所有網路介面,而 ifconfig、ifup 和 ifdown 可用於啟動和停止單個介面。
RedHat 還提供了一個名為 service 的“包裝器”程式,它提供了一種更簡單的方法來執行這些指令碼,例如
|
# service network restart |
使用諸如 ifup 之類的系統指令碼而不是 ifconfig 本身時,一個顯著的區別是系統路由表在一種情況下被設定,而在另一種情況下不被設定。
這是因為要麼讀取 /etc/sysconfig/network 檔案,其中儲存了預設閘道器,要麼 DHCP 伺服器已將此資訊與 IP 號一起傳送。
路由表使用 /sbin/route 工具進行配置、檢查和更改。
路由示例
透過裝置 eth1 向網路 10.0.0.0 新增靜態路由,並使用 192.168.1.108 作為該網路的閘道器
|
#/sbin/route add -net 10.0.0.0 gw 192.168.1.108 dev eth1 |
新增預設閘道器
| /sbin/route add default gw 192.168.1.1 eth0 |
以這種方式新增的路由僅在“此時此地”有效 - 它們不會在重新引導後保留。
列出核心路由表
| /sbin/route -n |
| ► 核心 IP 路由表 |
| 目標 閘道器 Genmask 介面 |
| 192.168.1.0 0.0.0.0 255.255.255.0 eth0 |
| 10.1.8.0 192.168.1.108 255.0.0.0 eth1 |
| 127.0.0.0 0.0.0.0 255.0.0.0 lo |
| 0.0.0.0 192.168.1.254 0.0.0.0 eth0 |
這裡,第一個條目定義了 eth0 的直接連線網路。它表示無需閘道器即可到達網路 192.168.1.0。第二個條目定義了到網路 10.1.8.0 的特定路由。最後一個條目定義了預設路由。由於此規則的 Genmask 為 0.0.0.0 且目標為 0.0.0.0,因此它始終匹配;但是,僅當找不到更具體的路由(具有更長 Genmask 的路由)時才使用它。
如果您屬於 192.168.10.0 網路,並且您添加了到 192.168.1.0 網路的路由,您可能會發現後者的網路中的機器沒有響應。這可能是因為從 192.168.1.0 網路到您的主機的路由尚未設定!這個問題可以透過使用 daemons gated 和 routed 動態更新跨網路的路由表來解決。但是,動態路由在“存根網路”(大多數機器所在的地方)上不是必需的,它也不是 LPI 1 級目標的一部分。
永久靜態路由
可以在 /etc/sysconfig 下的檔案中定義永久靜態路由。根據版本,RedHat 從 /etc/sysconfig/network-scripts/route-eth0(對於 eth0)獲取特定於介面的路由,以及從 /etc/sysconfig/static-routes 獲取非特定於介面的路由。這些路由將在啟動時由網路指令碼新增。
命名網路
使用 /etc/networks 檔案,可以將名稱分配給網路編號。一個典型的條目可能如下所示
office 192.168.3.0
然後,可以使用網路名稱與諸如 route 之類的工具一起使用,例如
| route add -net office.org netmask 255.0.0.0 |
圖 109.2-1:路由方案
以下是使用過的檔案、術語和實用程式的部分列表:* /etc/hostname
- /etc/hosts
- /etc/resolv.conf
- /etc/nsswitch.conf
- ifconfig
- ifup
- ifdown
- route
- ping
