LRP Step By Step
我本善良 (asako@parzival.org)
●前言●
什麼是LRP?其全名為Linux Router Project,翻譯成中文的話大概可以說成Linux路由器
計劃,其實它是一種以網路為基礎的迷你型Linux,它可以用來取代傳統的路由器。而且它
可以迷你到可以放進一片軟碟片,且可以讓你很容易的去設定成路由器『Routers』,橋接
器『bridges』,防火牆『firewalls』和撥接伺服器,到現在各位應該有點了解LRP的功用
是什麼了。如果您也剛好像筆者一樣有接Hinet的ADSL不要懷疑,我們可以用LRP來作到防火
牆加IP偽裝IP Masquerade加NAT(Network Address Translating),來分享頻寬給家裡所有
的電腦用,而且只要使用一張軟碟片,當然啦各位的Local LAN要事先作好,您可以參考如
圖一來規劃,LAN的部分這裡就不多作說明了,因為已超出這篇文章要說明
的內容了。
圖一
●本文●
在開始之前當然我們要抓LRP的image檔,您可以由
http://www.linuxrouter.org/download.shtmly去選擇一個ftp站去下載,或者由這裡下載
ftp://sunsite.unc.edu/pub/Linux/distributions/linux-router/dists/2.9.8/ ,這裡筆
者是抓idiot-image_1440KB_FAT_2.9.8_Linux_2.2.gz,因為kernel是2.2.16有支援
ipchains,在設定防火牆方面會容易很多,也不要忘記把kernel目錄裡的2.2.16-1.tar.gz
也給抓回來,因為裡頭是所有的2.2.16的modules都包在這個壓縮檔裡,想要支援什麼,從
這個壓縮檔裡都將可以找到,再利用ftp的功能或者是重新包裝一個modules.lrp給Kernel使
用,在utils裡頭有一個rawrite2.exe也不要忘記抓回來,假設您有RedHat的光碟片的話。
也可以在光碟片裡的dosutils目錄裡也可以找到這個檔案,最後在
ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-1.49.tar.gz給抓回
來,至於要如何重新包裝一個modules.lrp給kernel用,詳細的作法容後說明。
LRP硬體的規劃
圖二
從這張圖表來說很清楚的我們可以看到以Hinet的ADSL64/512KBit來說我們只要使用486級
的電腦加一個軟碟機12MB RAM再加上網路卡就可以來作到基本的頻寬分享以及防火牆的功
能,但實際上筆者在測試的時候發現這個Kernel有作過Pentium的最佳化所以實際上我們還
是得找一台586的電腦而且是Pentium的CPU或者是AMD的K5或者是K6以上的CPU來作路由器,
不可以使用cyrix的CPU,因為Kernel會 panic。但是如果您一定要用386或者是486來跑LRP
的話。您可以到筆者的網站下載kernel386的檔案,用winzip解壓後並且把這個檔案拷貝到
您的磁片上就可以用386以上的cpu來跑LRP,當然也可以跑cyrix的cpu。筆者的網站為
http://www.parzival.org/各位可以多加利用。再來就是網路卡的選擇基本上只要是
kernel2.2.16有支援的網路卡都可以使用,有錢的話可以買intel或者是3com的但是如果想
便宜又大碗的可以選擇rtl8139 10/100M自動切換的網路卡,或者是使做用ne2000-PCI或
ne2000-ISA相容卡,如d-link22X,rtl8019等,因為這裡我們要實作的功能上有防火牆的功
能所以網路卡最好準備兩片。剩下的就是重點戲,LRP的基本設定及安裝。
LRP的基本設定及安裝
一:第一步當然是設定我們的網路卡。這裡筆者的是d-link22x及rtl8019各一片,基本上
這兩張網路卡都是NE2000的相容卡所以我們可以用ne.o來驅動這兩張網路卡,不過在這之前
請您用設定網路卡的磁片來設定您的IRQ及IO PORT,這裡筆者假設eth0的IO為0x340,IRQ為
10,而eth1的IO為0x300,IRQ為5,也請您記得去BIOS裡修改PNP的選項,把IRQ10及IRQ5空
下來給網路卡用。
二:把我們下載的檔案idiot-image_1440KB_FAT_2.9.8_Linux_2.2.gz解壓縮並且更名為
144.img『因為在winodws的環境下rawater2.exe無法處理這樣的長檔名所以我們要作更名的
動作』之後下rawrite -f 144.img -d a: 就可以把LRP的程式回寫到1.44mb的磁碟片裡。檔
案的列表如圖三﹕
圖三
從這裡我們可以發現到實際上磁片所剩下的容量只有44k,這樣少的容量跟本就無法再放入
網路卡的驅動程式以及
ip_masq_autofw.o
ip_masq_cuseeme.o
ip_masq_ftp.o
ip_masq_irc.o
ip_masq_mfw.o
ip_masq_portfw.o
ip_masq_quake.o
ip_masq_raudio.o
ip_masq_user.o
ip_masq_vdolive.o
這些在IP偽裝可能會用到的模組,就因為如此,所以我們要以一張1.44MB的軟碟片format成
一張比較大的容量的磁片,這裡筆者以1.6MB的軟碟片並用RedHat Linux來作示範,首先我
們先檢查在/dev底下有無fd0u1600這個裝置如果沒有的話請用這個指令來建立mknod
/dev/fd0u1680 b 2 124,接者用fdformat /dev/fd0u1600,來低階格式化軟碟片,再用
mformat -t 80 -h 2 -s 20 a:來把MSDOS的檔案格式加至我們剛作好的軟碟片,如果您沒有
mformat這個指令的話請把您Linux的光碟拿出來裡頭會有mtools的rpm請把它裝起來,如
pm -ivh mtools-3.9.1-5.i386.rpm,順便我們用mbadblocks a:檢查一下軟碟片有沒有壞軌
有的話並把它標記起來,現在我們可以把剛才的LRP的磁片內所有的內容給拷貝到這張1.6MB
的磁片裡,現在這張軟碟片還沒有開機的功能,所以我們把剛才抓回來的
syslinux-1.49.tar.gz上傳到RedHat Linux把解開來,並在其目錄裡下./syslinux -s
/dev/fd0u1600讓我們作的1.6MB的磁碟片可以開機。接下來我們把先前抓下來的
2.2.16-1.tar.gz上傳到Linux的伺服器裡,並把它解開來,且另建立lib以及lib底下的
modules這兩個目錄,
假設我們現在是在root的家目錄下
mkdir lib
cd lib
mkdir modules
然後把我們要的驅動程式放入在modules的目錄下,這裡筆者放入的是
圖四
回到剛才建立的lib的目錄下
cd /root/lib
執行tar zcvf driver.lrp lib之後會建立一個driver.lrp的檔案,然後把此檔案拷貝到
1.6MB的磁碟片裡,
mcopy driver.lrp a:
並修改磁片裡的syslinux.cfg把boot=/dev/fd0u1440改成boot=/dev/fd0u1600及
LRP=etc,log,local,modules改成LRP=etc,log,local,modules,driver。現在我們已經完成
了LRP的磁片建立的步驟,接下來我們開始進入LRP的設定。
我們使用LRP磁片來開機,磁片讀取完之後會停在login的地方,如圖五,
圖五
此時我們用LRP內定的帳號root來進入設定的畫面,內定的root是不需要輸入密碼的,但是
為了
您的安全性建議您在設定完成之後也不要忘記更改您root的密碼,輸入完root之後此時畫面
為進入到設定的畫面,如圖六,
圖六
這裡我們選擇一進入網路的設定畫面,如圖七,
圖七
在這裡我們說明一下其選項的功用為何。
Network configuration menu
1) Network Configuation (auto) file://這裡為網路的基本的設定都在此選項
裡。
2) Network Configuation (direct) file://這裡是設定port forward
3) Super server daemon configuration (inetd.conf) file://設定inetd.conf
4) hosts.allow file://設定可以連線的網域
5) hosts.deny file://設定拒絕連線的網域
6) networks file://設定主機名稱與ip的對應,也就是/etc/hosts檔
7) gateways file://設定閘道器位置
8) routed, etc file://設定routed
9) additional daemons file://設定自行加入的daemons,也就是RedHat裡的
/etc/rc.d/rc.local
q) quit
當然我們先設定一下網路的基本設定,所以我們首先選一,我們會看到如下的畫面,
1
###############################################################################
2 # Auto configuration bypass (Say NO to use this file)
3
###############################################################################
4 DIRECT_SETTINGS_ONLY=NO
5
6
###############################################################################
7 # Default Settings
8
###############################################################################
9
10 VERBOSE=YES
11 MAX_LOOP=15
12 DHCP_SLEEP=15
13
14 IPFWDING_KERNEL=NO
15 IPFWDING_FW=NO
16
17 IPMASQ_DLOOSE=NO
18
19 CONFIG_HOSTNAME=NO
20
21 CONFIG_HOSTSFILE=NO
22
23 CONFIG_DNS=NO
24
25
###############################################################################
26 # Interfaces
27
###############################################################################
28
29 #IF0_IFNAME=eth0
30 IF0_IPADDR=dhcp
31 IF0_NETMASK=255.255.255.255
32 IF0_BROADCAST=255.255.255.255
33 IF0_IP_SPOOF=YES
34
35 #IF1_IFNAME=eth1
36 IF1_IPADDR=192.168.0.20
37 IF1_NETMASK=255.255.255.0
38 IF1_BROADCAST=192.168.0.255
39 IF1_IP_SPOOF=YES
40
41 #IF2_IFNAME=eth1:0
42 IF2_IPADDR=192.168.0.1
43 IF2_NETMASK=$IF1_NETMASK
44 IF2_BROADCAST=$IF1_BROADCAST
45 IF2_IP_SPOOF=NO
46
47
###############################################################################
48 # Hosts
49
###############################################################################
50
51 #HOST0_IPADDR=192.168.7.123
52 HOST0_GATEWAY_IF=default
53 HOST0_GATEWAY_IP=192.168.1.200
54 HOST0_IPMASQ=NO
55 HOST0_IPMASQ_IF=default
56
57
###############################################################################
58 # Networks
59
###############################################################################
60
61 #NET0_NETADDR=192.168.0.0
62 NET0_NETMASK=$IF1_NETMASK
63 NET0_GATEWAY_IF=$IF1_IFNAME
64 NET0_GATEWAY_IP=default
65 NET0_IPMASQ=YES
66 NET0_IPMASQ_IF=$IF0_IFNAME
67
68
###############################################################################
69 # Gateways (Default Routes)
70
###############################################################################
71
72 #GW0_IPADDR=$HOST0_IPADDR
73 GW0_IFNAME=$IF0_NAME
74 GW0_METRIC=1
75
76
###############################################################################
77 # Port Fowarding
78
###############################################################################
79 #PF0_IFNAME=$IF0_IFNAME
80 PF0_DESTIP=192.168.0.10
81 PF0_TPORTS=53:5353,80:80,25:25,110:110,21:21,20:20,22:22
82 PF0_UPORTS=53:5353
83
84
85
###############################################################################
86 # Hostname Requires: CONFIG_HOSTNAME=YES
87
###############################################################################
88 HOSTNAME=tourettes
89
90
###############################################################################
91 # Hosts file (Static domainname entires) Requires: CONFIG_HOSTSFILE=YES
92
###############################################################################
93 # IP FQDN hostname alias1 alias2..
94 HOSTS0="$IF1_IPADDR $HOSTNAME.psychosis.com $HOSTNAME t"
95
96
###############################################################################
97 # Domain Search Order and Name Servers Requires: CONFIG_DNS=YES
98
###############################################################################
99
100 DOMAINS="psychosis.com linkscape.net"
101
102 DNS0=192.168.0.8
103 DNS1=192.168.0.9
104
105
106#############################################################################
##
107# Brief instructions for this file
108#############################################################################
##
109#
110# DIRECT_SETTINGS_ONLY=(YES/NO) Default: YES
111# Bypass automatic configuration using this file's settings,
112# and only execute the commands in /etc/network_direct.conf
113#
114# VERBOSE=(YES/NO) Default: Yes
115# Be verbose about settings.
116#
117# MAX_LOOP=(int) Default: 10
118# Maximum number of incrementable entries to search for.
119# IE: If you create a DNS7=, and MAX_LOOP=7, it will not be reached.
120# (DNS0 - DNS7 == 8 entires)
121# Setting this value too high will decrease the speed of the configuation
122# system.
123#
124# IPFWDING_KERNEL=(YES/NO) Default: NO
125# Enable IP forwarding in the kernel.
126#
127# IPFWDING_FW=(YES/NO) Default: NO
128# Set firewall forwarding policy to 'allow'.
129#
130# CONFIG_HOSTNAME=(YES/NO) Default: NO
131# Create /etc/hostname file using HOSTNAME entry.
132# Any current hostname file will be **OVERWRITTEN**
133#
134# CONFIG_HOSTSFILE=(YES/NO) Default: NO
135# Create /etc/hosts file using HOSTSx entries.
136# Any current hosts file will be **OVERWRITTEN**
137#
138# CONFIG_DNS=(YES/NO) Default: NO
139# Create /etc/resolv.conf file using DOMAINS and DNSx entries.
140# Any current resolv.conf file will be **OVERWRITTEN**
141# If you use dhcpc, let dhclient handle DNS configuration.
142#
143#############################################################################
##
144# End
145#############################################################################
##
因為我們要把這台LRP作為firewall和NAT,所以我們要把14,15,17行的NO改為YES,如果
您也想讓這裡的設定也可以設定hosts,hostname,及dns的話請您也把19, 21, 23行也改為
YES,假設您對外的網路卡是使用DHCP來取得IP的話,那您只要把29行的『#』號去掉即可,
但是如果您是使用固定IP的話您就必需改成像35至39行的樣子,這裡筆者使用的是固定IP所
以改為
IF0_IFNAME=eth0
IF0_IPADDR=192.168.1.1
IF0_NETMASK=255.255.255.0
IF0_BROADCAST=192.168.1.255
IF0_IP_SPOOF=YES
因為我們使用的是兩張網路卡,所以把35行的#號請把它去掉,而41行至66行請用#號把它變
成註解行,在72行至74行這裡我們要注意的一點是,假使我們的eth0也就是連外的網路卡是
使用DHCP來取得IP的話這3行請在行首加上#號,但是如果我們用的是固定IP的話第72行您要
改為您網路上route的位罝如GW0_IPADDR=192.168.1.254,79至82行這裡我們沒有使用的
port的forward所以也請把把加上#號,88行為設定這台主機的名稱,94行為設定
/etc/hosts,100至103行為設定DNS的搜尋及主機位機,目前我們已設定好基本網路環境,
但不要忘記按ctrl-s存檔,ctrl-c離開,接下來我們來設定網路卡及要載入的模組。按q回
到如圖五的位罝按3來設定package settings再按2設定modules如圖八,
圖八
再按1設定kernel modules to load at boot如圖九,
圖九
之後我們進入了設定modules
的主畫面,其設定檔案的內容如下。
1 # /etc/modules: kernel modules to load at boot time.
2 #
3 # This file should contain the names of kernel modules that are
4 # to be loaded at boot time, one per line. Comments begin with
5 # a `#', and everything on the line after them are ignored.
6 #
7 # All modules should reside in /lib/modules, and you are required
8 # to list what you need *in the correct order*. Modprobe is not
9 # used and there is no dependacy checking.
10 # How they are loaded: insmod /lib/module/"$module".o $args
11
12 #pci-scan
13 #tulip
14
15 #serial
16
17 ###Some ethernet cards
18 #3c509
19 #eepro io=0x300
20
21 ###Some 8390 based ethernet cards
22 #8390
23 # card1,card2
24 #ne io=0x300,0x340
25 #ne2k-pci
26 #e2100
27
28 ###PPP and SLIP (bsd_comp for ppp optional)
29 #slhc
30 #ppp
31 #slip
32
33 ###IP Masq modules
34 #ip_masq_vdolive
35 #ip_masq_user
36 #ip_masq_raudio
37 #ip_masq_quake
38 #ip_masq_portfw
39 #ip_masq_mfw
40 #ip_masq_irc
41 #ip_masq_ftp
42 #ip_masq_cuseeme
43 #ip_masq_autofw
這裡我們把22行的#號去掉,因為ne2000網路卡要用到8390.o這個模組,再來也請把24行改
為我們先前設定網路卡io的位罝,如ne io=0x300,0x340,最後把34至43行這些IP偽裝可能
會用到的模組的#號去掉,當然您也可以依您自身的網路環境視情況增減,不要忘記按
ctrl-s,存檔,ctrl-c離開,接著按q兩次回到如圖五的位罝按b,之後再按e,如圖十﹐
圖十
到備份系統的主畫面,之後按e備份所有的檔案除了log檔之外
存檔完畢後,按reset重新起動電腦,如果沒有錯誤的話,在command line的模式下按
ifconfig應可以看到如圖十一的畫面,
圖十一
此時您只要下
ipchains -P forward DENY
ipchains -A forward -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0
這時您就可以讓local lan裡所有的電腦同時上網了。當然您還是得要把您local lan的閘道
器要設定為這台LRP主機對內網路卡的IP才行,或者您也可以到筆者的網站下載DHCP Server
的套件來用。
●FAQ●
一:LRP可以裝在硬碟裡嗎?
答:是可以的。只要您把檔案拷貝到硬碟裡並修改syslinux.cfg裡的設定就可以了。
二:LRP支援EXT2的檔案格式嗎?
答:把相關的模組載入就可以,相關的模組在2.2.16-1.tar.gz裡。
三:LRP支援DOC『DiskOnChip』嗎?
答:標準的LRP的image檔裡是不支援的。但是這裡有相關的資料可以看
http://lrp.c0wz.com/dox/mhorn_doc.txt。
四:LRP base on ?
答:debin。
五:LRP可以使用DOM『DiskOnModule』嗎?
答:可以完全沒有問題。
六:LRP支援PPPoE嗎?
答:可以的。
七:如何讓root管理者可以遠端登入?
答:在如圖十二:的地方,第四個選項Ports root is allowed to login to.(securetty)
加入ttyp0及ttyp1就可以了。
圖十二
●結語●
LRP是一個很有用的的迷你的linux的版本,除了繼承了linux的穩定性之外,也減少了硬碟
機故障的可能性,目前LRP能夠支援的有ZIP,LS-120,DOC,DOM等,但是筆者個人認為DOM
是用起來不管速度上及方便性都是一個不錯的選擇,當然筆者也試過用DOC,當然除了速度
及價格上的考量上,就看使用者要選擇少一個ISA的Slot或者是少一個IDE的Port。
●參考網站●
http://www.linuxrouter.org
http://beta.linuxrouter.org
http://lrp.c0wz.com
|