我們在 網路基礎 裡面提到 路由 (route) 是一個重要的概念,他可以控制我們的資料封包的走向!此外,如果同一個網域裡面有太多的電腦數量需要來廣播的話,效能一定不會太好,所以才會有 Netmask 對吧!今天我們換個角度來想一想,如果說我的網域內真的有太多的電腦數量了,那麼將整個網域切割成較小的數個子網域 (Subnet) 會是一個比較好的作法,不過,因為網域與網域之間的封包不可以直接互通資料,所以這個時候我們就需要使用 Router ( 路由器 ) 來幫忙封包的傳送了! |
[root@test
root]# ifconfig <device> <ip> netmask
<nip> broadcast <bip> <action>
參數說明: <device> :裝置代號,例如 eth0, eth0:0, eth0:1.... <ip> :該裝置代號的 IP ! netmask :該裝置代號的子網域遮罩設定參數名稱 <nip> :就是實際的 netmask ,例如 C Class 則為 255.255.255.0 boradcast :廣播位址設定參數 <bip> :亦即實際的廣播位址 <action> :動作!例如 up 啟動與 down 關閉! 範例: # 1. 修改一個 eth0 的 netmask ,由原先的 255.255.255.0 變成 255.255.255.128 [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:5972569 errors:0 dropped:0 overruns:0 frame:0 TX packets:6263943 errors:0 dropped:0 overruns:0 carrier:0 collisions:1331 txqueuelen:100 RX bytes:557413197 (531.5 Mb) TX bytes:2810197942 (2680.0 Mb) Interrupt:10 Base address:0x6100 [root@test root]# ifconfig eth0 netmask 255.255.255.128 [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.128<=修改後 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5972745 errors:0 dropped:0 overruns:0 frame:0 TX packets:6264165 errors:0 dropped:0 overruns:0 carrier:0 collisions:1331 txqueuelen:100 RX bytes:557431640 (531.6 Mb) TX bytes:2810221471 (2680.0 Mb) Interrupt:10 Base address:0x6100 [root @test /root]# ifconfig eth0 netmask 255.255.255.0<==測試完後記得改回來! 2. 新增一個網路界面 eth0:0 ,而且他的 IP 為 192.168.0.2 [root@test root]# ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 \ > broadcast 192.168.0.255 up [root@test root]# ifconfig eth0; ifconfig eth0:0 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:5973506 errors:0 dropped:0 overruns:0 frame:0 TX packets:6265264 errors:0 dropped:0 overruns:0 carrier:0 collisions:1331 txqueuelen:100 RX bytes:557511152 (531.6 Mb) TX bytes:2810327518 (2680.1 Mb) Interrupt:10 Base address:0x6100 eth0:0
Link encap:Ethernet HWaddr
00:50:FC:22:9C:57
--- 192.168.1.2
ping statistics ---
--- 192.168.0.2
ping statistics ---
|
[root@test
root]# cd /etc/sysconfig/network-scripts
[root@test network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0 請注意,那個 ifcfg 的檔名是必要的,而 eth0:0 則是裝置代號!所以請依您的需求來設定檔名!例如您要設定 eth0:1 ,則檔名應該寫為 ifcfg-eth0:1 才對呦! 1. 開始設定參數檔! [root@test network-scripts]# vi ifcfg-eth0:0 # This file is just to be used to test the more IPs DEVICE=eth0:0 <==這裡請跟剛剛檔名的地方寫的一樣!亦即為裝置代號! ONBOOT=no <==是否開機時啟動!由於與實體介面有關,所以,無論 這裡設定為何,開機只要啟動 eth0 ,則這裡就會被啟動! BOOTPROTO=static <==使用的開機設定協定 IPADDR=192.168.0.2 <==我設定的 IP! NETMASK=255.255.255.0 <==就是子網域遮罩 NETWORK=192.168.0.0 <==就是網域 BROADCAST=192.168.0.255 <==就是廣播位址啦! 2. 正確的啟動! [root@test network-scripts]# ifup eth0:0 [root@test network-scripts]# ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:50:FC:22:9C:57 inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x6100 3. 正確的關閉! [root@test network-scripts]# ifdown eth0:0 |
[root@test
root]# route
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 140.116.142.253 * 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default 140.116.142.253 0.0.0.0 UG 0 0 0 ppp0 |
[root@test
root]# route add -net 192.168.0.0 netmask
255.255.255.0 dev eth0
[root@test root]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 140.116.142.253 * 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default 140.116.142.253 0.0.0.0 UG 0 0 0 ppp0 [root@test root]# route del -net 192.168.0.0 netmask 255.255.255.0 dev eth0 |
1. 設定網路介面,其中
eth0 為 192.168.1.2, eth0:0 為 192.168.0.2
[root@test root]# cd /etc/sysconfig/network-scripts [root@test network-scripts]# vi ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.2 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 GATEWAY=192.168.1.2 [root@test network-scripts]#
vi
ifcfg-eth0:0
[root@test network-scripts]#
ifup
eth0 ; ifup eth0:0
eth0:0
Link encap:Ethernet HWaddr 00:50:FC:22:9C:57
2. 觀察路由情況:
3. 啟動 IP FORWARD
項目:
4.1 設定 192.168.1.0
那個網域的 client 電腦:
4.2 設定 192.168.0.0
那個網域的 Client 電腦
|
1. Client 端的測試(
Windows 2000 作業系統, IP 為 192.168.1.11 ):
C:\>ping 192.168.1.2 <==同網域的主機 Pinging 192.168.1.2 with 32 bytes of data: Reply from 192.168.1.2: bytes=32 time<10ms TTL=255 Reply from 192.168.1.2: bytes=32 time<10ms TTL=255 Reply from 192.168.1.2: bytes=32 time<10ms TTL=255 Reply from 192.168.1.2: bytes=32 time<10ms TTL=255 Ping statistics for 192.168.1.2: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms C:\>ping
192.168.0.2
<==不同網域的主機
C:\>ping
192.168.0.11
<==不同網域的 Client 端!
2. Server 端的修改:
3. Client 端的測試
( 作業系統為 windows 2000, IP 192.168.1.11 ):
4. 恢復 Linux
Router :
5. 用另一部
Linux 主機看一下結果 ( IP 192.168.0.11 ):
|
上面的那個範例單純只是為了作為範例來示範!要注意,我們在公司內部架設 router 的時候,通常是希望降低內部網路流量的負載,這個時候,當然是將兩個網域分別分開在兩個實體網路卡上面比較好!而不是在一塊網路卡上面設定兩組 IP ,這樣做對於減低流量負荷的幫助應該不大!所以,您的實體線路配線方面可能要變成如下圖所示的模樣( 當然,設定方面則是完全一樣啦! ):
無論如何,上面的方式可以提供一些中小企業,電腦數要多不多,偏偏又會影響整體流量的情況時,可以使用來解決問題!再來,對於中小學的網路佈線情況呢,也可以達到不錯的降低整體網路負荷的效果!而這個簡單的 Router 您可以使用 486 那種等級的舊舊的電腦來架設就可以啦!反正他的 loading 又不重∼∼此外,附上一篇小州前輩的建議給大家參考:
其實這樣子弄是有點問題的。我的意思是說,一般弄切割的話,還是需要弄獨立的網路卡分隔,這不只是區隔網路而已,而且還是考慮到實體封包流通時的問題。
您網頁上的架構,實體網路佈線,那 linux 只有一張網路卡,所以網路卡接網路線時會接到 hub 上,而 a、b 兩端不同網路區段的電腦也都是把網路線接到該 hub。這個佈線方式,其實底層封包流通時,a、b 兩端網路都還是可以收到,只不過 ip 那層看到因為不是自己網路區段的封包而不理會。
ip alias 時機,一般不建議用在提供 router/nat 這類同一個 ip 區段內,因為不同網路區段的封包還是會撞在一起... 真正商業使用上,要提供router/nat 功能時,通常不會建議使用 ip alias (除非真的是臨時需要或者是真的少網路卡可以用),而會使用兩張網路卡並且各自使用 hub/switch切割開處理。
另外以管理實際網路的經驗來看,其實若是有使用者作怪,像是 a 網路有人架設dhcp,那 b 網路使用者可能就遭殃了:Q 還有就是,若是 a 網路內的電腦作怪,也可以把自己的 ip 設定為 b 網路區段內的 ip,那就會失去區隔效用。