萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 以Linux做路由器的問題

以Linux做路由器的問題

class="21921"> 以 Linux 當 router 的方法                                by C.W.Huang 
********************************************************************** 
          本文歡迎非營利性質的轉載,以便能讓更多人受惠! 
             但若欲引用於商業用途需先知會原作者. 
********************************************************************** 
  利用 Linux 當 router 其實很簡單.首先你在 compile kernel 時要選 
IP forwarding. 用這個 kernel 開機,看看能不能抓到兩塊網路卡.如果 
不行的話在 /etc/lilo.conf 上加上 
 append="ether=irq,io-port,eth0 ether=irq,io-port,eth1" 
再重跑 lilo. 或者如果你用 loadlin 的話,用 
 loadlin vmlinuz root=/dev/??? ro ether=irq,io,eth0 ether=irq,io,eth1 
應該就可以了.注意看開機時有沒有抓到? 或看 /proc/net/dev 有沒有 eth0 
和 eth1? 有的話就對了(如果沒有就要 recompile kernel 了.請參考 "為何 
我的網路連不出去" 一文). 
  接下來就是 config 這兩個界面了.假設你的網路環境如下: 
                                                | 
                                                |   +-----+ 
                                                +---| DOS |  140.122.52.236 
  +---------+             eth0 +-----+ eth1     |   +-----+ 
  | gateway |------------------|Linux|----------+           分出來的次子網 
  +---------+                  +-----+          |   +-----+ 
 140.122.52.254            140.122.52.235       +---| Sun | 140.122.52.234 
                               router           |   +-----+ 
                                                | 
                                                可再接多台機器 
  eth0 界面是用來跟外面的網路相連的.你可以用一般的 netconfig 來設定它. 
(若不會的話還是請參考精華區中的文章).  
  我們是利用 Linux 的 Proxy Arp 功能,當外界有封包要送到你的次子網路時, 
Linux 會回應此封包.所以對外界來說你的次子網就是存在的了.因此很重要的一點 
是,你的次子網必須要是從你原來的子網路上割出來的!! 
  以上面的情形為例,如果預估你的次子網約有五、六台左右的機器,你可以決定 
要割出來的次子網的 IP 范圍是從 140.122.52.232 -- 140.122.52.239 共 8 個位 
址(一定是 2^n 啦! 不懂嗎? 自己想...:) 算一算 netmask 應是 255.255.255.248, 
broadcast 是 140.122.52.239. 於是 eth1 應該這樣 config: 
# ifconfig eth1 140.122.52.235 netmask 255.255.255.248 broadcast 140.122.52.23. 
?鲟惡□□□# route add -net 140.122.52.232 netmask 255.255.255.248 gw  
140.122.52.235 eth1 
這樣你所有從 140.122.52.232 到 140.122.52.239 的封包都會往 eth1 送.試試看能 
不能從你的次子網 telnet 到 Linux 上? 若可以的話就成功了一大半....^_^ 
  不知你是否注意到,我將 eth0 和 eth1 的 IP address 設為一樣! 常有人認為,有 
兩塊網路卡就要有兩個 IP address. 但這是沒有必要的! 你可以將兩個設為相同!! 
  但是你若想試著直接 telnet 到外面去,就會發現不通! 這是因為尚未設定 arp 
table 的關系.以上面為例,如果你想要 DOS 那台機器可以跨出次子網,就要在 
Linux 上設 arp: 
# arp -s 140.122.52.236 08:00:77:14:00:00 pub 
                        ^^^^^^^^^^^^^^^^^ 
                        ↑  
                        這是你 eth0 界面的 hardware address, 可用 ifconfig查到. 
 
  這時應該就可以直接從 DOS telnet 到外面網路上的機器了! 也可以從外面 telnet 
上來...Oh! Sorry! DOS 是不能 telnet 上去的.... 若是 Linux 當然就沒問題啦!! 
你如果在外面用 traceroute 指令查看 route 的路徑,會發現當 router 的那台 Linux 
機器就在上面! 
  如果要把 Sun 也加上去,如法泡制就好了.... (我不知道能否用一個指令就把次 
子網整個 route 出去.有人知道的話請告訴我!) 
  你可以把這些指令都放在/etc/rc.d/rc.inet1 中,這樣開機時就可以設定好兩 
個界面了!  
  感謝 Linux! 讓我們用最少的代價,獲得最佳的功能!! 

======================================================================
 
發信人: cc (豬仔), 信區: Linux 
標  題: 用LINUX做ROUTER經驗談 
 
我今早剛將我的LINUX配置成ROUTER,這篇文章就是通過我的子網PC發表的. 
安裝過程中遇到的問題不是很多,下面簡單談談體會. 
 
1. 我是按照精華區內SUNNY轉貼的文章去做的.裝ROUTER之前,建議先研究 
一下這 篇文章. 
2. 不要輕易重編譯核心.其實當出現如網卡找不著等問題時,可以到網上 
找一個核心,在將原來的核心備份後,將它替換調,能解決不少問題. 
3.不過,重編譯也不是很可怕的事情,今天早上,我重編譯我的內核,只用了 
一個小時左右(486/33M/8M/N個TELNET :-).我現在的內核支持3c509, 
ne2000,ip-forwording,ide.有需要的給我發個mail. 
歡迎和我討論這方面的問題,我也有很多問題要請教諸位先驅. 
 

======================================================================
 
----- York (夜郎) ----- 
 
一些小問題值得注意。這裡列出一些,以供參考。 
 
1。網卡的選擇。 
        如果不打算做ROUTER的話,什麼樣的網卡都行。但若你准備用Linux做 
ROUTER,最好別用兩塊同型號的網卡。我不能肯定用了就一定不行,但至少我碰到 
過兩塊NE2000兼容網卡不能同時正常工作的情況。 
    >    是不是兩塊網卡重號引起的問題呢?中斷的地址,I/O地址如果都沒有沖突, 
    >    行不行呢? 
    為了防止你所說的這些原因,我把這兩塊網卡的IRQ,I/O都設得不一樣,此外, 
    它們的Ethernet Address也不一樣,結果還是不能正常工作.也就是說工作不 
    穩定,當傳輸量一大就死機了.另外也不大可能是其它機器的網卡與我的重號, 
    因為我的這塊NE2000目前工作在外網上,一直很穩定.但一旦我把另外一塊卡 
    換成NE2000之後(甚至只是插入機器,還沒有與其它機器相連),外網的這塊 
    NE2000就不能正常工作了.我找了好幾天都查不出它們不能協調工作的原因, 
    盡管單獨使用兩塊網卡都很好. :(( 
 
2。bootdisk和rootdisk的制作。 
        值得注意的是在做rootdisk時,RAWRITE輸入的參數應是帶.gz的壓縮文件, 
千萬別自作聰明的先把它解壓縮了! 
    >   為什麼呢?一般作ROOT,BOOT不都要先解壓縮嗎,好象README中也提到了 
    開始我也是這麼想的.但用解壓縮後的color文件做成的rootdisk起動時,系統 
    會抱怨找不到gzip頭.這大概是因為linux的核心是壓縮的,每次起動需要自解 
    的緣故. 
 
3。NFS安裝。 
        要有條件的話最好采用NFS安裝。可以先從網上把slackware都取過來,放 
入你自己的或附近的一台主機裡,把它share出去,再做NFS安裝就方便了。 
4。北大FTP裡的A系列不全。 
        裝完後缺許多系統文件,使的系統不能正常啟動。還是西安交大FTP裡的 
slackware-3.0比較保險。北郵好象也有,但不知全不全。 
5。編譯kernel。 
        如果需要做ROUTER或你的網卡不支持,那必須做這一步。建議編譯前多研 
究精華區裡有關make kernel的文章。編譯時注意打開IP FORWARDING並選擇你所用 
的網卡。 
6。調試ROUTER時最好用PC。 
        比如調試過程中ROUTER換了網卡,子網外的工作站就需要更改它的ARP信息, 
如果對UNIX系統管理不熟就比較麻煩。象我,就只好用笨辦法:reboot。 
 
7。ROUTER的性能。 
        用Linux做ROUTER,會使子網的出口速度較沒有ROUTER時慢一些,大概是原 
來的70%。當然了,有了ROUTER,可以使你的子網免受外網故障的影響。有所失也必 
有所得嘛! 

======================================================================

發信人: life (沙加~重結晶), 信區: Linux 
標  題: [技術]Lin
copyright © 萬盛學電腦網 all rights reserved