呼呼!終於要來到修改 Linux 網路參數的章節了!在前面的 網路基礎 章節內我們知道了主機要連上 Internet 需要一些正確的網路參數設定,這些設定在 Windows 系統上面的修改則在 區域網路的架構 裡面進行了說明。在這一章當中,我們則主要以固定 IP 的設定方式來修改 Linux 的網路參數,同時,也會介紹如何使用 ADSL 的撥接方式來上網,此外,因為 Cable modem 使用者也不在少數,所以我們也說明一下 Cable modem 在 Linux 下的設定方式喔! |
1.
先察看一下核心版本,因為不同的版本模組放置的路徑不同。
[root@test /root]# uname -r 2.4.20-18.9 上面是以 Red Hat 9 為範例, 他的核心是 2.4 版喔。 2. 核心模組的路徑: [root@test /root]# cd /lib/modules/`uname -r`/kernel/drivers/net 上面是 2.4 版的路徑 [root@test /root]# cd /lib/modules/`uname -r`/net 上面是 2.2 版的路徑,請依照您的實際核心來查詢。 [root@test net]# ls -l via* -rw-r--r-- 1 root root 17892 Sep 7 2001 via-rhine.o 太好了!被支援到呢! |
[root@test
/root]# dmesg | grep eth
divert: allocating divert_blk for eth0 eth0: RealTek RTL8139 Fast Ethernet at 0xc4844000, 00:50:fc:20:f1:4c, IRQ 10 eth0: Identified 8139 chip type 'RTL-8139C' eth0: Setting 100mbps full-duplex based on auto-negotiated partner ability 45e1. divert: allocating divert_blk for eth1 eth1: Digital DC21041 Tulip rev 33 at 0xc4852000, 21041 mode, 00:80:C8:5A:87:10, IRQ 9. |
假設核心的
Open source 目錄為 /usr/src/linux-2.4.20-18.9
[root@test root]# cd /usr/src [root@test src]# ln -s linux-2.4.20-18.9 linux |
1. 將剛剛取得的
dlkfet-4.24.tar.gz 放置到 /tmp 底下
[root@test root]# cp dlkfet-4.24.tar.gz /tmp [root@test root]# cd /tmp [root@test tmp]# tar -zxvf dlkfet-4.24.tar.gz [root@test tmp]# cd dlkfet-4.24 2. 開始編譯: [root@test dlkfet-4.24]# make 到此為止,會產生一個檔案模組,稱為: rhinefet.o [root@test dlkfet-4.24]# cp rhinefet.o \ > /lib/modules/`uname -r`/kernel/drivers/net [root@test dlkfet-4.24]# depmod -a 特別留意,上面的路徑為 2.4.xx 版本的核心!並且將該模組寫入屬性相依檔案。 |
1. 載入模組的測試:
[root@test root]# modprobe rhinefet 請注意,不要寫完整的檔名, .o 不需要寫,那個 rhinefet 就是 剛剛編譯出來的 rhinefet.o 咯! [root@test root]# lsmod Module Size Used by Tainted: P rhinefet 14208 2 ....(略).... 2. 設定開機時載入模組 [root@test root]# vi /etc/modules.conf # 加入底下這一行 alias eth0 rhinefet 3. 也可以重新開機是看看能否正常的啟動模組: [root@test root]# sync; sync; reboot |
[root@test
root]# ifconfig
eth0 192.168.1.2
[root@test root]# ifconfig eth0 Link encap:Ethernet HWaddr 00:10:DC:F1:D8:C5 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric: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:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:17 Base address:0xd400 Memory:fb060000-fb060038 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:41739 errors:0 dropped:0 overruns:0 frame:0 TX packets:41739 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4252360 (4.0 Mb) TX bytes:4252360 (4.0 Mb) [root@test root]# ping 192.168.1.2 -c 3 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.106 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.016 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.013 ms --- 192.168.1.2
ping statistics ---
|
[root@test
root]# vi /etc/sysconfig/network
NETWORKING=yes <==是否啟動網路,當然是啦! HOSTNAME=test.domain.name <==主機名稱,要確定呦!可以隨時修改啦! |
[root@test
root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 <==設定裝置的名稱,這個要跟檔案名稱對應! ONBOOT=yes <==是否在開機的的時候啟動網路卡 BOOTPROTO=static <==啟動的時候的 IP 取得的協定,這裡是固定的, 如果是 Cable 的話,要改成 dhcp 才行。 IPADDR=192.168.1.2 <==這個就是 IP 囉! NETMASK=255.255.255.0 <==這個就是子遮罩網路囉! NETWORK=192.168.1.0 <==這個就是該網段的第一個 IP 咯 BROADCAST=192.168.1.255 <==這個就是最後一個同網段的廣播位址囉! GATEWAY=192.168.1.2 <==這個就是這塊網路卡的通訊閘囉! #GATEWAYDEV=eth0 <==也可以這麼寫! |
[root@test
root]# /etc/rc.d/init.d/network restart <==重新啟動網路介面
[root@test root]# ifup eth0 <==啟動 eth0 網路卡 [root@test root]# ifdown eth0 <==關閉 eth0 網路卡 |
[root@test
root]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:50:FC:22:9C:57 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5692910 errors:0 dropped:0 overruns:0 frame:0 TX packets:5914804 errors:0 dropped:0 overruns:0 carrier:0 collisions:848 txqueuelen:100 RX bytes:522002571 (497.8 Mb) TX bytes:2498073183 (2382.3 Mb) Interrupt:10 Base address:0x6100 [root@test root]# ping -c 3 192.168.1.2 PING 192.168.1.2 (192.168.1.2) from 192.168.1.2 : 56(84) bytes of data. 64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=318 usec 64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=213 usec 64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=217 usec --- 192.168.1.2
ping statistics ---
|
[root@test
root]# vi /etc/sysconfig/network
NETWORKING=yes HOSTNAME=redhat9.vbird.net |
[root@test
root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.13 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 GATEWAY=192.168.1.2 |
[root@test
root]# vi /etc/resolv.conf
nameserver 168.95.1.1 nameserver 139.175.10.20 |
[root@test
root]# /etc/rc.d/init.d/network restart
[root@test root]# ifdown eth0 [root@test root]# ifup eth0 |
[root@test
root]# vi /etc/sysconfig/network
NETWORKING=yes HOSTNAME=redhat9.vbird.net |
[root@test
root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp <==這一行設定正確即可!下面的四個網路參數沒有用! 需要留意的是,在 Openlinux 裡面,這裡的設定 為 DYNAMIC=dhcp 喔! IPADDR=192.168.1.13 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 |
[root@test
root]# vi /etc/resolv.conf
nameserver 168.95.1.1 nameserver 139.175.10.20 |
[root@test
root]# /etc/rc.d/init.d/network restart
[root@test root]# ifdown eth0 [root@test root]# ifup eth0 |
1. 取消預設通訊閘
[root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes <==若您需要 eth0 幫您建立內部私有網域時,這裡可以寫成 yes 但若不需要內部網路時,這一行請直接寫成 no ,反正撥接 之後網路卡會自動被啟動! BOOTPROTO=static IPADDR=192.168.1.2 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 [root@test root]# /etc/rc.d/init.d/network restart |
[root@test
root]# rpm -qa | grep rp-pppoe
rp-pppoe-3.5-2 <==看來是已經安裝了!只好移除囉! [root@test root]# rpm -e rp-pppoe |
1. 編譯 SRPM:
[root@test root]# rpm --rebuild rp-pppoe-3.5-1.src.rpm [root@test root]# rpmbuild --rebuild rp-pppoe-3.5-1.src.rpm # 註:在 Red Hat 7.3 以前, rpm 的指令使用 rpm ,但是在 Red Hat 8 # 以後, SRPM 的重製指令已經獨立至 rpmbuild 囉!所以請選擇 # 適合您的 Linux 版本喔! ......... Wrote: /usr/src/redhat/RPMS/i386/rp-pppoe-3.5-1.i386.rpm ......... 在編譯時,最後的結果(如果沒有錯誤)會顯示上面那個樣子! 也就是說,您的編譯完成的檔案就放在上面囉! 2. 安裝 rp-pppoe : [root@test root]# cd /usr/src/redhat/RPMS/i386 [root@test i386]# rpm -ivh rp-pppoe-3.5-1.i386.rpm Preparing... ########################################### [100%] 1:rp-pppoe ########################################### [100%] [root@test i386]# rpm -q rp-pppoe rp-pppoe-3.5-1 這樣就安裝完畢了!簡單吧!如果不相信,可以查詢看看! |
1. 解壓縮!
[root@test root]# mv rp-pppoe-3.5.tar.gz /usr/local/src [root@test root]# cd /usr/local/src [root@test src]# tar -zxvf rp-pppoe-3.5.tar.gz 2. 偵測系統與編譯執行檔: [root@test src]# cd rp-pppoe-3.5/src [root@test src]# ./configure --prefix=/usr/local [root@test src]# make; make install |
[root@test
root]# /usr/sbin/adsl-setup
>>> Enter your PPPoE user name (default bxxxnxnx@sympatico.ca): T0123456 這個時候請輸入您在 ADSL 的帳號,不同的 ISP 有不同的設定方式呦!請特別注意! a. 如果是 seednet 的話,應該有點像這樣==> T0123456 b. 如果是 Hinet 的話,應該有點像這樣====> yourname@hinet.com.tw(連同 host 也要寫) >>> Enter the Ethernet interface connected to the ADSL modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethn, where 'n' is a number. (default eth0): eth0 因為我們使用 eth0 連線的呀! >>> Enter the demand value (default no): <=按下 Enter 即可 這裡按 enter 不用設定就好了! >>> Enter the
DNS information here: 168.95.1.1
|
[root@test
root]# adsl-start
....Connect! |
[root@test
root]# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol inet addr:211.74.249.38 P-t-P:172.16.11.8 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:8356088 errors:0 dropped:0 overruns:0 frame:0 TX packets:8532063 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 |
[root@test
root]# vi /etc/crontab
....... 01-59/3 * * * * root /usr/sbin/adsl-start > /dev/null 2>&1 |
[root@test
root]# more /var/log/messages
May 10 18:02:22 testing pppoe[8527]: Bogus PPPoE length field (50) |
/* Check
length */
if (ntohs(packet.length) + HDR_SIZE > len) { syslog(LOG_ERR, "Bogus PPPoE length field (%u)", (unsigned int) ntohs(packet.length)); return; } |
/* Check length */
if (ntohs(packet.length) + HDR_SIZE > len) { /* syslog(LOG_ERR, "Bogus PPPoE length field (%u)", (unsigned int) ntohs(packet.length)); */ return; } |
if (plen + HDR_SIZE > len) {
syslog(LOG_ERR, "Bogus length field in session packet %d (%d)", (int) plen, (int) len); return; } |
if (plen + HDR_SIZE > len) {
/* syslog(LOG_ERR, "Bogus length field in session packet %d (%d)", (int) plen, (int) len); */ return; } |
cd /usr/local/src/rp-pppoe-3.5/src
./configure make make install |
adsl-stop
adsl-start |
[root@test
root]# vi /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 電腦 IP 主機名稱 主機別名( alias ) |
[root@test
root]# vi /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.1.1 linux001 192.168.1.2 linux002 192.168.1.3 linux003 ......... ......... 192.168.1.255 linux255 |
[root@test
root]# vi /etc/resolv.conf
nameserver 168.95.1.1 nameserver 139.175.10.20 |