当前位置:Linux教程 - Linux - Linux下的ISDN

Linux下的ISDN



        
    ISDN在国内的应用越来越多,它比电话线拨号上网的带宽增大,中小型企
    业通过它共享上网非常合适。Linux在共享上网方面的优势是Windows无法相比
    的,它的IP改装技术尽管还处于开发测试阶段,但其效率远远高于普通的Proxy
    软件。本文介绍怎样通过一台Linux机器,配置ISDN,利用Linux的IP改装技
    术,使得所有局域网用户共享上网。

    ISDN上网的必要设备
      现在国内用在ISDN上网的设备有很多种,没有任何厂商声明支持Linux,
    但是Linux已经可以支持大多数ISDN设备。这里介绍S0卡+网络终结器(NT1)
    这种配置,因为这是国内电信部门的推荐配置,而且他们可以提供Windows平台
    的技术支持。 NT1设备可以请电信部门帮助调试好并接通线路,S0卡最好选用
    西门子芯片的产品,我的S0卡为“Teles 16.3c/pnp”。把这块卡直接插入Linux
    机器的ISA槽中,接好与NT1的线路。以下介绍如何使Linux识别这块卡,并使
    之拨号上网。

    基本原理
      ISDN上网与我们常用的Modem拨号上网类似。在Linux下甚至可以把S0卡
    模拟成Modem设备,所不同的是ISDN可以使用同步PPP(synchronous PPP),
    而Modem拨号一般使用异步PPP(anonymous PPP)。对于这两种拨号方式,邮局
    或ISP采用不同的接入设备。 尽管ISDN可以模拟成Modem进行异步模式的拨号,
    但一般只是用来测试S0卡是否运行正常,真正在上网时通常要用同步PPP拨号
    模式。

    所需软件包
    Linux2.0.36
      Linux使用的内核版本必须是2.0.36,这是到目前为止2.0版中最新的内核
    版本。它在ISDN的支持上作了很大改进。在Linux的开发版2.1.x中,也有这
    些对ISDN的支持,但我不能保证2.1.x版的稳定性。2.0.36内核的源码可以在
    Ftp://ftp.cdrom.com//Linux/sunsite/kernel/中下载,如何编译安装请参照
    Linux-Howto中的Kernel Howto。
      Isdn4linux
      这是一个为Linux开发的ISDN各种应用的合集,它的最新版本的文档是德
    文写的,可以在ftp://ftp.murphy.nl/put/isdn4linux/中下载它的最新版本。
      ISAPNP tools
    由于我使用的S0卡(teles 16.3c/pnp)是即插即用的,而Linux对即插即用的
    内核支持在2.1.x中才能实现,因此必须去
    http://www.roestock.demon.co.uk/isapnptools/下载ISAPNP软件包,以便在
    Linux上识别这块卡。如果你使用的S0卡并非即插即用,那么可以不管这个软
    件包。

    ISDN的Linux内核配置
      Linux2.0.36的内核需要重新配置,步骤如下:
      #cd/usr/src/linux
      #make menuconfig
      〈*〉ISDN support
      [*] Support synchronous
      PPP
      〈M〉Hisax SiemensChipSet
      driver support
      [*] Hisax Support for
      EURO/DSS1
      [*] Hisax Support for
      teles 16.3c
      #make dep
      #make clean
      #make zImage
      (wait for some minutes ....)
      #cp/vmlinuz/vmlinuz.bak (备份内核)
      #cp/usr/src/linux/arch/i396 /boot/zImage/vmlinuz
      #lilo
      #reboot
      
    使用Hisax配置S0卡
      1.非即插即用类
      Teles 16.3 ISDN卡一般使用如下缺省参数:
      *I/O address: 0x180
      *IRQ: 15,9,10,11,12
      *Mem address: 0(不必考虑)
      使用如下命令识别这块卡的参数:
      #modeprobe hisax io=0x180 irq=10 type=3 protocol=2 id=isdn0
      其中IRQ直接由hisax驱动程序配置,不必象配网卡那样跑到Dos/Win下去
    看它的IRQ。I/O地址要查看说明书,如果不是0x180,可以到卡上跳线。
      2.即插即用类
      这类卡不需要跳线或开关,所有参数要先通过ISAPNP配置。如果你正确地
    编译安装ISAPNP软件后,应该存在pnpdump和isapnp这两个命令,首先,执行:   
    #pnpdump〉/etc/isdn.conf
      这样会把所有pnp卡的合适参数写入到isdn.conf中。但是合适参数可能不
    止一组,所以它们都被加上了注释,需要你手工去掉一组参数的注释,表示选择
    了这组参数作为这块卡的配置。具体的做法就是编辑/etc/isdn.conf文件,改
    成类似如下的形式:
      (CONFIGURE TAG261012101108041(LD 0
      (IO 0(SIZE 2) (BASE 0x680))
      (INT 0(IRQ 10(MODE+E)))
      (NAME″TAG2610/2101108041[0]{TELES.S0/16.3c Plug&Play}″)
      (ACT Y)
      ))
      (WAITFORKEY)
      然后执行:
      #isapnp/etc/isdn.conf
      最后执行:
      #modprobe hisax irq=10 io=0x680 type=14 protocol=2 id=isdn0
      识别S0卡成功的标志
      如果Hisax成功识别S0卡,在/var/log/messages中会显示如下信息:
      #tail /var/log/messages
      ......
      Dec 10 10:44:45 L-server kernel: Hisax: 2 channels
      added
      Dec 10 10:44:45 L-server kernel: Hisax: module
      installed
      
    Isdn4Linux的安装与配置
      下载软件包并解包到一个目录,首先“make menuconfig“进行配置,然后
    执行“make; make install”。
      这个软件包包含了很多为ISDN作的应用程序,在编译时很容易遇到问题(因
    为有的软件包要依靠一些特殊的函数库)。但是这问题不大,你只要保证isdnctrl
    这个程序能够顺利编译并安装就可以,遇到其他编译不过的程序,可以通过“make
    menuconfig”把它去掉,留待以后再编译。
    要注意的是有的Linux版本不包含ISDN设备,可以用“ls/dev/ttyI*;
    ls/dev/ippp*”查看,若没有,要执行scripts目录下的“makedev.sh”,加入
    ISDN设备。

    同步PPP的配置
      有了上面的努力之后,就可以进行最后关键的同步PPP配置了。
      现在国内的PPP都是动态分配IP,为了确保你的Linux支持动态IP,请键
    入:
      #echo 1〉/proc/sys/net/ipv4/ip_dynaddr
      编辑一个名为isdn-on的文件,用来初始化ISDN设备,内容如下:
      MYUSER=aaa
      #在邮局或ISP的账号名
      REMNAME=public #ISP的名字
      MYIP=0.0.0.0 #
      待分配的动态IP
      REMIP=202.101.103.82#邮局的接拨服务器地址,
      若不清楚,请填0.0.0.0
      MYMSN=2117039 #
      我的电话号码
      REMMSN=163 #
      邮局的拨号号码
      /sbin/isdnctrl verbose 3
      /sbin/isdnlog-sS-v1-m0x17d7-l0x3d7-C
    /dev/console-D/dev/isdnctrl
      /sbin/isdnctrl system on
      /sbin/isdnctrl addif ippp0
      #产生ISDN网络设备
      /sbin/isdnctrl eaz ippp0$MYMSN
      /sbin/isdnctrl addphone ippp0 out$REMMSN
      #拨号号码
      /sbin/isdnctrl huptimeout ippp0 90#90秒无人使用
      ISDN后自动挂断
      /sbin/isdnctrl l2_prot ippp0 hdlc
      /sbin/isdnctrl l2_prot ippp0 trans
      /sbin/isdnctrl encap ippp0 syncppp#支持同步PPP
      /sbin/isdnctrl dialmode ippp0 auto
      #拨号设置成自动模式,即有IP请求就自动拨
      #号(dial-on-demand),也可以设置成manual,即手动拨号。
      /sbin/ifconfig ippp0$MYIP pointopoint$REMIP
      /sbin/route add$REMIP ippp0
      /sbin/ifconfig ippp0-arp-broadcast
      /sbin/ipppd user$MYUSER remotename$REMNAME \\
      noipdefault
      \\
      ipcp-accept-local
      \\
      ipcp-accept-remote
      \\
      name$MYUSER
      \\
      -detach
      \\
      mru
      1500 \\
      mtu
      1500 \\
      lcp-restart 1
      \\
      defaultroute
      \\
      /dev/ippp0&
    /sbinroute add default gw$REMIP

    在/etc/ppp目录下,创建三个新文件:
      1.ioption内容为空。
      2.pap-secrets
      # 格式
      账号名
      *
      密码
      # 例子
      # aaa *
      passwd
      3.chap-secrets
      # 格式
      账号名
      *
      密码
      #
      *
      账号名
      \"\"
      # 例子
      # aaa *
      passwd
      # * aaa
      \"\"
      根据例子填入自己的账号名和密码,由于包含密码,所以要限制读写权限:
      #chmod 600 pap-secrets
      #chmod 600 chap-secrets
      完成以上内容后,就可以尝试拨号上网了:
      #sh isdn-on
      #/sbin/isdnctrl dial ippp0
      #ifconfig
      大约四秒钟就可以完成拨号,在ifconfig中可以看到拨号后的网络设备
    ippp0,以及它的端对端IP地址。
      接着核对路由表,请注意缺省路由一定要指向端对端连接中的远端IP地址。
    如果没有此项,请手工加入缺省路由:
      #route add default gw
    202.101.103.81(xxx.xxx.xxx.xxx)

    其他
      配置好ISDN后,就可以通过这台Linux机器共享上网了。当然Linux的共
    享上网还需要IP改装,请参照Linux Howto中的IP Masquerade Howto。如果
    仍有问题,或对这篇文章有何疑问及批评指正,请发送电子邮件与我联系
    [email protected]
    (资料来源:Linux中文资料) 作者:郭晓航
    发布人:netbull 来自:LinuxAid