Embedded Linux 的系統管理,#4: 網路設定

jollen 發表於 April 24, 2006 4:20 PM

課程專案中,我們會在載入網路卡驅動程式後,再手動設定網路組態。在 Embedded Linux 系統中,我們會以命令列方式來設定網路的組態。

作者/陳俊宏
www.jollen.org

ifconfig 指令

ifconfig 指令是Linux網路組態設定的主要系統管理命令。以下我們說明如何手動設定這些網路組態:

  • IP
  • gateway
  • netmask
  • DNS
  • broadcast

設定 IP

例如,要將系統的 IP 設定為 59.120.22.215,則執行以下命令:

linux# ifconfig eth0 59.120.22.215

同時請將 loopback device 也加上去:

linux# ifconfig lo 127.0.0.1

直接執行 'ifconfig' 不加任何參數的話,可以看到目前的網路組態設定:

eth0 Link encap:Ethernet HWaddr 00:13:D4:C4:0D:ED
inet addr:59.120.22.215 Bcast:59.120.22.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1768542 errors:0 dropped:0 overruns:0 frame:0
TX packets:2411565 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:216276166 (206.2 Mb) TX bytes:2221236364 (2118.3 Mb)


lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:453762 errors:0 dropped:0 overruns:0 frame:0
TX packets:453762 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:959840798 (915.3 Mb) TX bytes:959840798 (915.3 Mb)

lo 是所謂的 loopback 界面,eth0 就是我們剛剛設定好的乙太網路界面,有了這層界面後,才能連上 Internet。這個動作必須在成功載入網路卡的驅動程式後才能執行。

別忘了,我們還沒替 eth0 界面設定好 gateway 與broadcast。gateway 是閘訊通,正確設定閘訊通才能連接外面的網路,否則只能連接區域網路內的主機,broadcast 是廣播位址,有了這個位址才能廣播封包到區域網路內的所有主機,例如要設定 gateway 與 broadcast 分別為 59.120.22.254 與 59.120.22.255。

設定 broadcast

執行:

linux# ifconfig eth0 broadcast 59.120.22.255

再執行 ifconfig 就可以發現 eth0 的 broadcast 位址已經被改變了。

設定 Netmask

例如,要將 eth0 的 netmask 設定成 255.255.255.0,則執行:

linxu# ifconfig eth0 netmask 255.255.255.0

其它組態的設定方法

設定 Gateway

修改 Gateway 設定:

linux# route del default
linux# route add default gw 59.120.22.254

我們先刪除 default 再加入新的 gateway 位址,不過這個刪除的動作也可以省略不做。

此時我們已經加入了一個預設的 gateway,直接執行 'route' 不加任何參數,便能看到目前的 gateway 設定:

linux# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
59.120.22.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 59-120-22-254.H 0.0.0.0 UG 0 0 0 eth0

設定 DNS

最後要設定的是 DNS,DNS 負責 Domain Name與 IP 位址之間的轉換,例如我們打 embedded.jollen.org,經由查詢 DNS,得知其 IP 位址為 59.120.22.215,有了 IP 位址才得以和遠端的主機連線,因此正確設定一台可用的 DNS是很重要的。

設定 DNS 的方法很簡單,只要編輯 /etc/resolv.conf 即可,以下是一個範例:

search jollen.org 
nameserver 163.14.192.1 #第一個 nameserver 意同 primary DNS
nameserver 168.14.1.1 #第二個 nameserver 意同 secondary DNS

第一行是設定網域名稱搜尋,第二、三行則是設定 DNS server。search 通常用在區域網路,例如我們的主機位於 jollen.org 的網域,則設定 search jollen.org 的話,只要打主機名稱:

linux# telnet www

效果跟

linux# telnet www.jollen.org

是相同的。如果設定多個 domain 的話,則依序搜尋到一個合法的位址為止,例如:

search jollen.org xxx.com

若 telnet www 的話,會先找 www.jollen.org,如果失敗會接著找 www.xxx.com。

nameserver 是設定 DNS,這裡的 DNS 必須是 IP 位址,系統會依序向這些名稱伺服器做查詢,向第一個 DNS 做查詢若失敗,則往下向第二個 DNS 做查詢,依此類推。

/etc/hosts

我們可以把常用的 domain name 編輯到 /etc/hosts 裡,然後設定好 host.conf,如此一來當我們使用這些常用的 domain name 時就可以不必再經由 DNS 的查詢程序,進而提升速度,例如以 www.jollen.org 為例,只要在 /etc/hosts 加上:

59.120.22.215 www.jollen.org jollen

這樣一來執行 "telnet jollen" 就等於是 "telnet 59.120.22.215"。

/etc/hosts.conf

設定好 /etc/hosts 後還要檢查一下 /etc/hosts.conf 的設定,確定名稱查詢時會先查詢 /etc/hosts,請檢查 /etc/hosts.conf 是否有一行:

order hosts,bind

表示先查詢 /etc/hosts,失敗的話再向 DNS 主機查詢。

Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw