課程專案中,我們會在載入網路卡驅動程式後,再手動設定網路組態。在 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 主機查詢。