Linux上應(yīng)用isdn的解決方案
2024-07-21 02:37:27
供稿:網(wǎng)友
作者:wind521
目的:
在一臺(tái)linux機(jī)器上,通過ISDN撥號(hào)上網(wǎng),同時(shí)可以作代理用!
配置:
Redhat Linux 7.3、2.4.18-3custom、isdn4k-utils-3.1-53、isdn4k-utils-devel-3.1-53,上海貝爾生產(chǎn)的ISDN內(nèi)置卡,型號(hào)為SBT6021。
內(nèi)核支持:
上海貝爾SBT6021型ISDN內(nèi)置卡,使用的芯片為Winbond W6692,這是一種與西門子“HiSax”驅(qū)動(dòng)程序兼容的芯片,該卡是即插即用的,無需手工設(shè)置中斷請(qǐng)求和I/O地址。但需要Linux內(nèi)核支持這種內(nèi)置卡,在編譯內(nèi)核時(shí),必須選中下列選項(xiàng):
ISDN Support
Support synchronous PPP
(多數(shù)ISDN設(shè)備撥號(hào)上網(wǎng)都是使用同步PPP方式)
Hisax SiemensChipset driver support
Hisax Support for DSS1
(絕大多數(shù)ISDN設(shè)備使用的協(xié)議都是DSS1)
Hisax Support for Winbond W6692
大家不必急于編譯內(nèi)核,假如現(xiàn)有的內(nèi)核已經(jīng)包含這些選項(xiàng)了,那么就不必再重復(fù)一遍了。那怎么知道現(xiàn)有內(nèi)核是否已經(jīng)包含這些選項(xiàng)了呢?看內(nèi)核編譯配置文件“/usr/src/linux/.config”(注重:文件名以“.”開頭的文件是隱藏文件,要用“l(fā)s -a”才可看到)。大家若看到其中有下面這5行內(nèi)容,對(duì)應(yīng)于剛才的5個(gè)選項(xiàng):
CONFIG_ISDN=m
CONFIG_ISDN_PPP=y
CONFIG_ISDN_DRV_HISAX=m
CONFIG_HISAX_EURO=y
CONFIG_HISAX_W6692=y
“=y”是表示內(nèi)核直接支持(代碼已鏈入內(nèi)核中),“=m”表示模塊支持(代碼在另外的內(nèi)核中,可由內(nèi)核載入)。這就表明,藍(lán)點(diǎn)Linux 2.0的原有內(nèi)核已包含這些選項(xiàng),大家就不用重新編譯這些內(nèi)核了。
isdn4linux安裝:
[wind@NetShare isdn]$ rpm -qagrep isdn
isdn4k-utils-3.1-53
isdn4k-utils-devel-3.1-53
確認(rèn)這兩包已經(jīng)安裝!這是isdn在Linux下工作所必要的。
isdn基本配置的一些簡要說明:
對(duì)于isdn的概念,相信大家都應(yīng)該比較了解,現(xiàn)在偶想在說的一點(diǎn)就是在linux下應(yīng)用過程中所要涉及的幾個(gè)文件,所應(yīng)該的設(shè)置是:/dev/ippp0 /dev/ippp1,這是因?yàn)橐话愕膇sdn都有兩個(gè)通道,所用的幾個(gè)文件分別為:
/etc/isdn下面的所有文件:
這里面基本上不用動(dòng),主要是isdn的一些基本硬件信息及配置信息,對(duì)于偶們來說可不去管他
/etc/ppp/isdn.conf:這個(gè)文件手動(dòng)編輯的,主要是為isdn指定一些變量,如電話號(hào)碼等
/etc/ppp/pap-secrets:用來存儲(chǔ)撥號(hào)的用戶名和口令
/etc/ppp/ioptions:用來設(shè)置isdn撥號(hào)過程中一些高級(jí)設(shè)置
/etc/init.d/isdn:這是偶在應(yīng)用過程中寫出的一個(gè)用來撥號(hào)的腳本,會(huì)附給大家!
/usr/local/etc/routemon.pl:這是偶寫的一個(gè)應(yīng)用腳本,用來守護(hù)isdn撥號(hào)后,默認(rèn)網(wǎng)關(guān)的添加用的,必須用crontab讓他時(shí)時(shí)去執(zhí)行用的!
isdn撥號(hào)的原理:
echo 1 > /PRoc/sys/net/ipv4/ip_ dynaddr
撥號(hào)上網(wǎng)大部分都是使用動(dòng)態(tài)IP地址,我們不知道遠(yuǎn)程撥號(hào)服務(wù)器的IP地址是多少,也不可能知道它會(huì)給電腦分配什么IP地址。在“/proc/sys/net/ipv4/ip_dynaddr”中寫入“1”,就是告訴內(nèi)核要使用動(dòng)態(tài)IP地址。
modprobe hisax type=36 protocol=2
安裝ISDN卡的驅(qū)動(dòng)程序。前面已經(jīng)說過,上海貝爾SBT6021型ISDN內(nèi)置卡中使用的芯片W6692是由HiSax驅(qū)動(dòng)程序驅(qū)動(dòng)的,type=36是指使用W6692芯片,protocol=2指ISDN協(xié)議是用“DSS1”,具體內(nèi)容可參看“/usr/src/linux/ Documentation/isdn/README.HiSax”文件。
isdnctrl addif ippp0
ISDN通過同步“PPP”方式上網(wǎng),其對(duì)應(yīng)的接口(Interface)會(huì)是“/dev/ippp0”、“/dev/ippp1” 等。這條命令告訴內(nèi)核,加入“ippp0”這個(gè)Interface,換句話說,告訴內(nèi)核有個(gè)ISDN設(shè)備,預(yù)備通過同步PPP方式上網(wǎng)。從此以后,“ippp0”就代表了筆者的ISDN設(shè)備。
isdnctrl addphone ippp0 out 163
指撥叫的電話號(hào)碼,這里是163,通過中國電信撥號(hào)上網(wǎng)的大部分也都是163。
isdnctrl eaz ippp0 2024245
指自己這臺(tái)ISDN的電話號(hào)碼為2024245。
isdnctrl l2_prot ippp0 hdlc
第2層協(xié)議用的是“hdlc”。
isdnctrl l3_prot ippp0 trans
第3層協(xié)議用的是“trans”。
isdnctrl encap ippp0 syncppp
用同步PPP方式。
isdnctrl dialmode ippp0 manual
手工撥號(hào)方式,在此方式下,撥號(hào)時(shí)用“isdnctrl dial ippp0”命令,掛斷時(shí)用“isdnctrl hangup ippp0”命令。另外還有“auto”(自動(dòng)方式),不過,還是先用手工方式比較直觀穩(wěn)定。
isdnctrl dialmax ippp0 3
1次撥號(hào)有可能連不通,不要緊,程序會(huì)自動(dòng)重?fù)艿模@里規(guī)定了最多重?fù)?次。
isdnctrl huptimeout ippp0 500
線路空閑一段時(shí)間后,會(huì)自動(dòng)掛斷,缺省是空閑10秒后掛斷。
普通網(wǎng)絡(luò)配置
Linux的普通網(wǎng)絡(luò)配置主要包含兩個(gè)方面:1)對(duì)各接口本身的配置,Interface是指以太網(wǎng)卡、Modem、ISDN等設(shè)備;配置信息包括網(wǎng)絡(luò)地址、子網(wǎng)掩碼、網(wǎng)關(guān)等;相應(yīng)的配置工具為ifconfig程序。2)對(duì)路由表的配置。路由表規(guī)定了到各個(gè)目的地的數(shù)據(jù)包應(yīng)走哪個(gè)網(wǎng)關(guān),使用哪個(gè)Interface等,相應(yīng)的配置工具為route程序。
在進(jìn)行配置之前,先看一下目前的配置情況是什么樣的。筆者的Linux機(jī)器在一個(gè)局域網(wǎng)上,局域網(wǎng)的域名為server.net,地址為203.0.0.111,這臺(tái)機(jī)器的主機(jī)名為admin,地址為203.0.0.1。
用ifconfig命令查看Interface配置,顯示信息如下:
eth0 Link encap:Ethernet HWaddr 00:20:AF:F1:0A:4A
inet addr:203.0.0.1 Bcast:203.0.0.255 Mask:255.255.255.0
...
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
...
顯示信息表明:有2個(gè)Interface,“eth0”代表以太網(wǎng)卡;“l(fā)o”是個(gè)虛擬的“l(fā)oopback”設(shè)備。
接著用route命令看路由表配置,顯示信息如下:
Kernel IP routing table
Destination adminway Genmask Flags Metric Ref Use Iface
admin.server.net * 255.255.255.255 UH 0 0 0 eth0
203.0.0.111 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
信息表明,有3條路由信息。要用上ISDN(ippp0),必須用“ifconfig”對(duì)“ippp0”進(jìn)行配置,并用“route”增加1條使用它的路由。配置ippp0:
ifconfig ippp0 0.0.0.0 pointopoint 0.0.0.0 netmask 0.0.0.0
使用PPP(pointopoint)協(xié)議,“point to point”前面是本機(jī)地址,后面是遠(yuǎn)程服務(wù)器地址,這里全是0.0.0.0,行嗎?行,因?yàn)榍懊嬉呀?jīng)作了配置“echo 1 > /proc/sys/net/ipv4/ip_ dynaddr”,告訴內(nèi)核將使用動(dòng)態(tài)IP地址,因此在這里用0.0.0.0并無所謂,當(dāng)這個(gè)PPP連接建立起來后,它會(huì)自動(dòng)用真正的IP地址代替這些0.0.0.0的。
此時(shí)再用ifconfig查看,得到如下類似信息:
eth0 Link encap:Ethernet HWaddr 00:20:AF:F1:0A:4A
inet addr:203.0.0.1 Bcast:203.0.0.255 Mask:255.255.255.0
...
ippp0 Link encap:Point-to-Point Protocol
UP POINTOPOINT RUNNING NOARP 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:30
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
...
發(fā)現(xiàn)多了1個(gè)“ippp0 Interface”,但由于未曾建立真正的連接,它的本機(jī)地址和遠(yuǎn)程服務(wù)器地址都未給出。
于是增加1條使用ippp0的路由:
route add default ippp0
這里指定缺省(default)的數(shù)據(jù)包都經(jīng)過“ippp0”傳送。缺省的數(shù)據(jù)包?什么意思?前面,筆者用route查看時(shí)有3條路由信息,這些信息指定了發(fā)往3個(gè)目的地(Destination)的數(shù)據(jù)包該怎么走,其他沒有指定怎么走的數(shù)據(jù)包(在這里,就是除了那3種數(shù)據(jù)包之外的所有數(shù)據(jù)包),即為缺省數(shù)據(jù)包,比如要到168.160.224.103(新浪網(wǎng)sina.com.cn)的數(shù)據(jù)包,就屬于缺省數(shù)據(jù)包。于是這條命令就做到了這一點(diǎn):假如要上新浪網(wǎng)看新聞,就得經(jīng)過“ippp0(ISDN)”,這正是筆者所希望的。這時(shí)候再用route查看一下情況如何:
Kernel IP routing table
Destination adminway Genmask Flags Metric Ref Use Iface
admin.server.net 255.255.255.255 UH 0 0 0 eth0
203.0.0.111 255.255.255.0 U 0 0 0 eth0
127.0.0.0 255.0.0.0 U 0 0 0 lo
default 0.0.0.0 U 0 0 0 ippp0
其中,“default”路由信息多了1條,注重其對(duì)應(yīng)的gateway是“”。需要有一個(gè)后臺(tái)服務(wù)程序“ip