好啦,都准备好啦,试一下吧。
4、测试
拨号:
isdnctrl dial ippp0
看看发生了什么情况:
ifconfig
得到类似下面的信息:
eth0 Link encap:Ethernet HWaddr 00:20:AF:F1:0A:4A
inet addr:210.96.100.10 Bcast:210.96.100.255 Mask:255.255.255.0
inet6 addr: fe80::220:afff:fef1:a4a/10 Scope:Link
inet6 addr: fe80::20:aff1:a4a/10 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:29 errors:0 dropped:0 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:10 Base address:0x6000
ippp0 Link encap:Point-to-Point Protocol
inet addr:61.142.84.71 P-t-P:202.105.161.206 Mask:255.0.0.0
UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:22 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 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
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:43 errors:0 dropped:0 overruns:0 frame:0
TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
ippp0中的本机地址(inet addr)是61.142.84.71,PPP远程服务器地址(P-t-P)是202.105.161.206,代替了原来指定的0.0.0.0,说明动态IP地址是起作用的。
route
得到类似下面的信息:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
gate.thalia.com * 255.255.255.255 UH 0 0 0 eth0
210.96.100.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
202.0.0.0 * 255.0.0.0 U 0 0 0 ippp0
default 202.105.161.206 0.0.0.0 UG 0 0 0 ippp0
default对应的gateway是202.105.161.206,代替了原来的""*"",再看清楚点,它正好是ippp0的远程服务器地址。
怎么知道ISDN的状态呢?
imontty
得到类似下面的信息:
ISDN channel status:
Channel Usage Type Number
----------------------------------------------------------------------
HiSax Out Net 163
HiSax Off
HiSax1是连出去了(Out),拨打号码是163。
看到归看到,还得实际上去一把才知道行不行。
ping 168.160.224.103 (新浪网sina.com.cn)
通的。
ping sina.com.cn
不行了。域名解析的问题,找到/etc/resolv.conf文件,修改如下:
nameserver 127.0.0.1
指明域名服务器为127.0.0.1(“虚”的loopback),实际上经由路由表中的default条目,转发到远程服务器上,暗渡陈仓了。
再ping sina.com.cn,唔,OK了。
要挂断,下命令:
isdnctrl hangup ippp0
如果想要干净地恢复原状,继续下面的动作,和刚才的拨号配置正好一一相反。
kill ipppd
停止ipppd服务。(看别人写的,我试的时候却杀不掉,不知是不是因为ipppd是在后台运行的缘故。)
route del default
去掉路由表中增加的条目。
ifconfig ippp0 down
isdnctrl delif ippp0
关停并删除ippp0 Interface。
modprobe -r hisax
卸出驱动程序。(我试的时候,有时也卸不掉。)
5、形成shell文件
逐行命令操作全部通过啦,下面把它们写成shell文件。
/etc/ppp/isdn-start文件内容如下:
# Dyna address
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
# Load module
modprobe hisax type=36 protocol=2
# Add and config ISDN interface
isdnctrl addif ippp0
isdnctrl addphone ippp0 out 163
isdnctrl eaz ippp0 3382460
isdnctrl l2_prot ippp0 hdlc
isdnctrl l3_prot ippp0 trans
isdnctrl encap ippp0 syncppp
isdnctrl dialmode ippp0 manual
isdnctrl dialmax ippp0 3
isdnctrl huptimeout ippp0 600
ifconfig ippp0 0.0.0.0 pointopoint 0.0.0.0 netmask 0.0.0.0
# Add to routing table
route add default ippp0
# Run ipppd
ipppd user zzh
noipdefault
ipcp-accept-local
ipcp-accept-remote
defaultroute
mru 1500
mtu 1500
/dev/ippp0 &
# Dial
isdnctrl dial ippp0
/etc/ppp/isdn-stop文件内容如下:
# Hangup
isdnctrl hangup ippp0
# Stop ipppd
kill ipppd
# Remove from routing table
route del default
# Del ISDN interface
ifconfig ippp0 down
isdnctrl delif ippp0
# Unload module
modprobe -r hisax
让它们成为可执行文件:
chmod a+x /etc/ppp/isdn-start
chomd a+x /etc/ppp/isdn-stop
以后事情就简单了。要拨号上网,下命令/etc/ppp/isdn-start;要下线挂断,下命令/etc/ppp/isdn-stop。
6、下一步:共享ISDN上网
我这台Linux机器是在一个局域网上的,现在这台机器可以上网了,怎么让局域网内的其它Win98, Win2000机器通过这台机器也能上网呢?其中一个简单的方案就是使用IP Masquerade(IP伪装)技术。实践中我也做到了,详细的操作过程写在我的另一篇文章《用Linux+IPChains代替Windows+WinGate》中。
参考资料:
Matt Welsh, Matthias Kalle Dalheimer, Lar Kaufman著,Linux权威指南,洪峰译,中国电力出版社,2000
<全文完>