架設PPP


您能到這裡看到這篇文章﹐相信您已經有 Ineternet 連接了吧。如果您現在是用 Linux 撥接上來的﹐您大可不必看這章了。但是﹐如果您還沒成功的用 Linux 撥接上網﹐我希望下面介紹的對您有所幫助。另外﹐如果您想用 Linux 弄一個簡單的撥接伺服器﹐當您看完這章的最後部份﹐應該可以做到的。

認識pppd

如果您看過“網路基礎”中關於“電信 (Telecommunication)”的部份﹐應該知道遠端連接有分 remote control 和 remote access 的形式﹐而我們一般用來撥接上網都是使用後者。在連接的過程中﹐MODEM 是不能缺少的設備。我們可以簡單地將 MODEM 連接看成是 ISP 網路的延伸﹐所以 MODEM 也是一個網路界面﹐它所使用的協定為 PPP (Point to Point Protocol)。PPP 應該屬於資料連接層的協定﹐所以﹐在 PPP 以上﹐我們還是可以使用 TCP/IP 和更高層的協定的。

那麼﹐在 Linux 上面﹐pppd 就是負責管理 PPP 連接的服務程式了。要使用它﹐您要將‘PPP (point-to-point) support’編進 kernel 中。如果您的核心是按照我前面的例子設定的話﹐應該沒問題了。現在假設還沒有用 Linux 啟動 MODEM 的情況下輸入﹕
pppd

您應該會看到一大堆亂七八糟的字符跑出來﹕
~}#?}!}!} }4}"}&} } } } }%}&+N}+}'}"}(}"?~~}#?}!}!} }4}"}&} } } } }%}&+N} +}'}"}(}"?~~}#?}!}!} }4}"}&} } } } }%}&+N}+}'}"}(}"?~
而且要停止這些輸出也不行哦~~~ 哈哈﹐不用驚慌啦﹐待一會就好了。如果您看得到那些垃圾﹐應該是好事情﹐起碼我們可以證明 pppd 是工作的。

設定撥接連線

然後﹐我們得設定好 modem。如果您在 Windows 那裡設定過 MODEM﹐可能第一時間想找Linux 下面的 MODEM 驅動程式。有這樣習慣是非常好的﹐但在 Linux 下面卻沒有 MODEM driver 這回事哦。嗯﹖什麼意思﹖哎呀﹐我只能說﹐在 Linux 下面使用非常標準的 MODEM 通訊程式﹐只要通訊口(RS232)設定好了就可以使用 MODEM 了。

下面是我們設定撥接的步驟﹕

  1. 首先您要知道 ISP 給您的撥接號碼、帳號、密碼、DNS、等資料。還有﹐您要確定 /etc/resolv.conf 已經設定好了。

  2. 找到 MODEM 連接到哪個通訊口。如果您不確定﹐輸入下面的命令﹕
    cat /proc/tty/driver/serial | grep baud

    看看輸出結果之句子前面的號碼﹐然後在這個號碼前面加上 ttyS 就是 Linux 的通訊口了。假如輸出結果有兩個(因為一台機器只有兩個工作的通訊口)﹐那您可以除了 modem 外另外還使用 serial mouse 之故了。這情形﹐選那個 baud 後面的數字較高的那個﹐中獎的機會會比較高。

  3. 然後進入 X Window﹐開一個 xterm 視窗﹐然後輸入 control-panel &將控制台呼叫出來(您必須 su 成 root 才能做到)。

  4. 然後點按 MODEM 圖標﹕

  5. 選擇好通訊口 (就是剛才找出來的那個)﹕

    完成後按‘OK’離開。

  6. 再選擇 MODEM 圖標上面的 Network 圖標

    選擇‘Interfaces’﹐按‘Add’。確定選擇的‘Interface Type’為‘PPP’﹕

  7. 按‘OK’後﹐輸入 ISP 的撥接號碼。選擇‘Use PAP authentication’(大多數 ISP 都應該支持 PAP即Password Authentication Protocol 協定的﹐除非您確定您的 ISP 屬於例外則不選擇該項)。然後輸入您的帳號和密碼﹕

    按‘Done’之後再點一下‘Save’。

  8. 等回到‘Interfaces’畫面之後﹐請點選‘Edit’。如果並沒有回到‘Interfaces’畫面﹐則繼續下一步。

  9. 選擇‘Customize’﹐或直接看看‘Hardware’標籤﹐除非您有特殊要求﹐否則接受預設則可﹕

  10. 選擇‘Communication’﹐也應該沒什麼好設定的。如果您的 ISP 在撥接後提供登錄 script 讓您進行環境選擇﹐您可以設定好下面的‘Expect’和‘Send’﹐但您一定要確切知道 ISP 那邊的提示是什麼(您可以使用 minicom 來獲得)﹕

  11. 然後選擇‘Networking’﹐看看各項設定﹐有什麼您是需要修改的。如果您必須通過撥接才能連上 Internet 的話﹐您一定要選擇‘Set default route when making connection’。另外﹐如果您知道 MTU(Maximum Trasmit Unit) 和 MRU(Maximum Recieve Uint)數值﹐也可以寫進去的﹕

  12. 最後是‘PAP’﹐如果您要修改帳號和密碼﹐以後可以到這裡進行﹕

  13. 當您完成之後﹐按‘Done’和‘Save’回到‘Interfaces’畫面﹐在那裡選擇您剛建立的 PPP 界面﹐然後按‘Active’就可以上網了。

  14. 等您的 MODEM 沉靜下來一會後﹐您再輸入﹕
    ifconfig

    如果您能看到類似這樣的敘述﹕

    ppp0 Link encap:Point-to-Point Protocol
         inet addr:206.17.113.8 P-t-P:209.76.148.1 Mask:255.255.255.255
         UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
         RX packets:91 errors:0 dropped:0 overruns:0 frame:0
         TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:10   
    
    恭喜您﹗您已經成功的連接 ISP 了。

  15. 再來﹐您輸入﹕
    route -n

    看看 default route 是否使用了 ISP 提供的 IP﹕

    default  209.76.148.1  0.0.0.0  UG   0   0    0 ppp0
    
    如果是﹐bingo﹗以後的事情就是盡情使用 internet 了。如果要下線﹐將 ppp0 的界面‘Deactivate’就可以了。

如果您使用 RedHat 6.1 系統的話﹐不妨看看“ 撥接上網?”這篇文章。

手工設定

雖然﹐在 X Windows 裡面設定撥接連線是很容易的事情﹐然而﹐如果您還沒設定好 X Windows﹐或是由於其他原因必須使用手工連接的話﹐那就複雜多了。

  1. 和 X Windows 一樣﹐首先我們得設定 MODEM。先讓我們輸入﹕
    ls -l /dev/modem

    這個檔案其實是一個 link 而已﹐您可以從 ls 的輸出看到它實際連到哪個通訊口去了。如果這個檔案不存在﹐或是您要修改所連接的通訊口﹐您只需建立或改變 link 就可以了。預設的情況下﹐各通訊口設定如下﹕
    device name com port irq io
    /dev/ttyS0 1 4 0x3f8
    /dev/ttyS1 2 3 0x2f8
    /dev/ttyS2 3 4 0x3e8
    /dev/ttyS3 4 3 0x2e8

    不過﹐在這樣做之前﹐您必須要確定您的 ttyS﹖(要留意S為大寫﹗) 設備已經設定好了。如果該設備還沒設定好﹐例如﹐您剛換成 PCMCIA 類型的MODEM﹐您就需要使用 mknod 這個命令建立該設備了﹕

    1.1﹐先找出設備的資源範圍﹐如﹕io=0x2e0 irq=10 。
    1.2﹐然後將原來設備進行備份﹕mv /dev/ttyS0 /dev/ttyS0.bak
    1.3﹐然後輸入﹕mknod -m 660 /dev/ttyS0 c 4 64 # 0x2e0
    1.4﹐再輸入﹕ln -sf /dev/ttyS0 /dev/modem
    這樣我們就將 MODEM 連接到 ttyS0 (DOS下為 COM1) 這個通訊口了。

    注意﹕有時候您也可以使用 setserial 來設定通訊口﹕
    setserial /dev/ttyS1 irq 3 port 0x02f8 uart 16550a

  2. 當 MODEM 設定好之後﹐您還需設定一個當案 /etc/ppp/options(如果它已經出現了﹐用 mv 命令將之備份)﹐將其內容設定為這樣﹕
    lock
    modem
    crtscts
    noipdefault
    defaultroute
    asyncmap 0
    noauth
    

  3. 接著請在家目錄建立這個檔﹕~/.ppprc ﹕
    noauth
    name netman
    
    (注﹕請將 netman 改成您的 ISP 帳號)

    還有﹐如果您不想設定/etc/ppp/options 檔﹐您可以將 options 的內容轉到這裡來。我是建議您這樣做的。等您看到後面關於架設撥接伺服器的時候就知道為什麼了。

  4. 然後﹐我們可以使用 minicom 這個程式進行測試﹕
    minicom -m8 -c on

    這樣您就進入一個有顏色的 minicom 畫面了。如果您在最後一行看到“OK”字眼﹐也就表示您的 MODEM 已經成功啟動了。但如果您沒看到“OK”﹐又輸入不了任何東西﹐那很可能是您 /dev/modm 給 link 到錯誤的 ttyS 或是 ttyS 還沒設定好。這時候﹐您得按 Alt + F2 (或使用 telnet) 開啟另一個終端視窗﹐輸入 ps aux | grep minicom 來找到 minicom 的 PID﹐然後將它 kill 掉﹐再重新設定好您的 MODEM。

  5. 當看到‘OK’之後﹐輸入﹕
    ATZ

    這是一個 MODEM 命令﹐目的是 reset 一下 MODEM 狀態。凡是 MDOEM 命令都是以 AT 開頭的﹐所以也有人稱之為“AT命令”﹐例如﹕如果您嫌您的MODEM太吵耳了﹐可以輸入﹕ATM1L1 將音量調低﹐或干脆用 ATM0 將喇叭關了(請另行參考您的 MODEM 手冊)。

  6. 您應該會重新看到‘OK’的。然後您就可以進行撥接了﹐您可以輸入﹕
    ATDT93735100

    這也是一個 MODEM 命令﹐‘D’是 Dial 的意思﹔‘T’是 Tone (音頻電話)的意思﹐如果您使用的電話是脈沖式(Pulse)電話(很古老了)﹐則將 T 改成 P ﹔最後是 ISP 的撥接號碼。

  7. 如果您接通了 ISP 那邊的 MODEM 之後﹐您會聽到一陣嘈雜之聲﹐那是 MDOEM 之間的握手語言﹐我們盡可不理。我們只需留意一下有沒有登錄提示出現﹐例如﹕“Login:”﹐有些 ISP 則使用“User name:”代替“Login:”。

  8. 輸入帳號名稱之後﹐您應會看到“Password:”的提示。

    假如您輸入密碼之後對方回應說﹕PPP﹕Not enabled﹐那可能是您撥接的這只號碼暫時不接受非 PAP 方式的登錄。您可以聯繫您的 ISP 要另外一只本地號碼再進行測試。例如﹐假如您在台南市撥接 seednet﹐可以輸入 atdt2767501 進行撥接。不過﹐在我的測試中﹐這情形也非一成不變﹐偶爾多試幾次或許就可以了。

  9. 成功登錄之後﹐您就要留意到 ISP 是否提供了登錄菜單供您選擇﹐例如﹕
    1.SLIP
    2.PPP
    3.Telnet
    諸如此類﹐請一一抄下﹐如果您要寫您的 script 就要用到了。

  10. 如果沒有菜單出現﹐那麼通常您就會看到 pppd 那些垃圾字符出現了(或許有時候您要按一下 Enter 才出現)。

  11. 一旦您看到那些字符出現﹐您要做的是按 Alt + Q 鍵(如果您啟動 minicom 的時候沒使用到 -m 參數﹐您要先按 Ctrl + A 再按 Q﹐您也可以用 Alt + Z 看更多關於 minicom 的設定)。

  12. 當看到“Quit without reset modem?”提問的時候﹐按‘OK’跳回文字模式。

  13. 接著輸入﹕
    pppd -detach /dev/modem&
    (注﹕請將 netman 改成您的 ISP 帳號)

  14. 接著﹐您再輸入ifconfig 和 route 看看 ppp0 界面是否成功連接了。如果您要結束連線﹐找出 pppd 的 PID 然後 kill 掉就可以了。

注意﹕(在台灣)用手工撥接有時候很奇怪﹐明明剛才連線失敗的﹐重複相同的動作再嘗試幾次或許又可以了 :)

使用 script 撥接。

在 Linux 討論板上﹐我們常可抄到一些 Linux 高手提供的 script 來方便我們的撥接。這裡﹐我也有一個 script 可供參考﹐不過要注意的是﹐我這個 script 只是提供最簡單的連接﹐並沒包括登錄菜單選擇功能。

  1. 第一個要建立的檔案是﹕ /usr/sbin/ppp-on ﹕
    #!/bin/sh
    #File: /usr/sbin/ppp-on
    #Purpose: a simple PPP dial-up script
    #
    ACC_TMP=/usr/tmp/ppp_acc.tmp
    if [ -f ~/.ppprc ]; then
    	cat ~/.ppprc | grep name | awk '{print $2}' > $ACC_TMP
    	echo ""
    	echo "'.ppprc' found in $USER's home directory,"
    	echo " trying to use user specified account..."
    fi
    if [ -s $ACC_TMP ]; then
    	MYNAME=`cat $ACC_TMP`
    	rm -f $ACC_TMP
    else
    	MYNAME=netman
    	echo ""
    	echo -n "Warning: no account name specified," 
    	echo "using default account '${MYNAME}"
    fi
    echo "PPP is using account ${MYNAME} to connect to ISP ${ISP} ..."
    DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
    #
    exec /usr/sbin/pppd -detach lock modem crtscts \
    /dev/modem 115200 noipdefault defaultroute \
    noauth name ${MYNAME} connect $DIALER_SCRIPT
    

    是否覺得 pppd 後面執行的選項和 /etc/ppp/options 的內容很相似呢﹖沒錯啦﹐如果您能夠手工的將 ppp options 用命令行的形式輸入﹐您可以不必設定 /etc/ppp/options 檔案。但相反﹐如果您不想在命令行輸入﹐則交給 options 檔案代勞吧。

  2. 第二個檔案是﹕/etc/ppp/ppp-on-dialer (路徑必須和上面的‘DIALER_SCRIPT=’一致)﹕
    #!/bin/sh
    #File: /etc/ppp/ppp-on-dialer
    #Purpose: a simple PPP dial-up script
    #
    TELEPHONE=4123000
    DIALSCRIPT=/tmp/dialscript.$$
    #
    trap "rm -f ${DIALSCRIPT}" INT HUP QUIT
    #
    umask 066
    cat <<EOF > ${DIALSCRIPT}
    ABORT '\nNO DIALTONE\r'
    ABORT '\nBUSY\r'
    ABORT '\nNO CARRIER\r'
    ABORT '\nNO ANSWER\r'
    '' '\nATZ\r'
    OK ATDT$TELEPHONE
    CONNECT ''
    EOF
    /usr/sbin/chat -v -f ${DIALSCRIPT}
    rm -f /tmp/dialscript.*  
    

  3. 最後﹐我們還要建立一個檔案﹕ /usr/sbin/ppp-off :
    #!/bin/sh
    #File: /usr/sbin/ppp-off
    #Purpose: a simple PPP dial-up script
    #
    #
    # Determine device
    if [ "$1" = "" ]; then
            DEVICE=ppp0
            else
            DEVICE=$1
    fi
    #
    # Stop program
    if [ -r /var/run/$DEVICE.pid ]; then
            kill -INT `cat /var/run/$DEVICE.pid` 
    	#注意﹕‘`’符號是在‘1’鍵左邊
    #
    # Delete lock file
            if [ ! "$?"="0" ]; then
                    rm -f /var/run/$DEVICE.pid
                    echo "ERROR: Removed stale pid file"
                    exit 1
            fi
    #
    # Getting out
            echo "PPP link to $DEVICE terminated."
            exit 0
    fi
    #
    # Not ruuning
    echo "ERROR: PPP link is not active on $DEVICE."
    exit 1
    

  4. 然後修改 /etc/ppp/pap-secrets ﹐將您的ISP帳號和密碼寫進去﹕
    # Secrets for authentication using PAP
    # client        server  secret       IP addresses
    netman  ppp0    Agb-7Rh9 
    

    注意﹕開始三個 script 檔案必須用 chmod +x 設定為可執行檔。如果您要引用這幾個 script ﹐要修改的地方有﹕

    • /usr/sbin/ppp-on 中的“NAME=”以及 ~/.ppprc 中跟在 name 後面的帳號
    • /etc/ppp/ppp-on-dialer 中的 “TELEPHONE=”
    • /etc/ppp/pap-secrets 中的帳號與密碼
    • 另外﹐別忘了修改 /etc/resolv.conf 中的 DNS。

  5. 然後您輸入 ppp-on & 就應該可以連上 ISP 了﹔如果要下線﹐輸入﹕ppp-off 即可。

以上三個 script 您可以按這裡下載

架設撥接伺服器

前面我們只是學會了如何撥接出去﹐這僅是 pppd 的功能之一﹐除此之外﹐我們還可以用 pppd 架設撥入伺服器哦~~~

我這裡不打算詳細的設定一個複雜 ISP 式的撥入服務器﹐因為牽涉的硬體和軟體都非常多﹐還有提供 Authentication 的 accounting 程式﹐例如﹕ radiusd 。這實在是超出我這裡的討論範圍了。用下面的步驟設定﹐您應該可以使用其他電腦(Linux 或 Windows)撥接進您的 Linux 主機﹐也可以讓之連接進所在的網路。

  1. 首先﹐我們要修改好 /etc/ppp/options 這個檔案。這裡的設定會影響到 pppd 程式的設定﹐不管您啟動 pppd 做為撥出或撥入。 因為剛才我們已經設定了 options 檔案讓之配合撥出﹐但有些設定並不適合作為撥入。

    我們必須先清理這個檔案。假如您目前用 ttyS0 做撥出﹐而使用 ttyS1 做撥入的話﹐那麼﹐用下面這個命令將 options 檔案改為合適的檔案名稱﹕
    mv /etc/ppp/options /etc/ppp/options.ttyS0

    這樣﹐就再也沒有 /etc/ppp/options 檔案影響 pppd 的設定了。但我們卻可以用 options.ttySx 檔案來設定特定的通口﹐而它僅會影響連接到該通訊口的設備而已。

  2. 接下來讓我們修改做為撥入服務的設定檔 /etc/ppp/options.ttyS1 ﹐使之看上去像這樣﹕
    lock
    modem
    crtscts
    asyncmap 0
    passive
    proxyarp
    192.168.0.17:192.168.0.111
    netmask 255.255.255.0
    ms-dns 192.168.0.17
    

    注意﹕最後一句是用來為客戶端指定 DNS 的﹐您也可以用多句 ms-dns 來指定多個 DNS。不過﹐我沒實地測試過哦~~。

    如果您要對方的電腦能連接到本地網路﹐那麼一定要將 proxyarp 加進去。而下一句是用來分配撥入遠端客戶機使用的 IP 地址。您會發現一共有兩個 IP 在這裡指定出來了﹐它們是用“ ﹕”來分隔的。在分隔符號左邊的是遠端客戶機在本地網路使用的地址﹐這個地址必須是撥入伺服器連接本地網路的界面﹐或是可以從本地網路路由得到的地址。而在“ ﹕”右邊的 IP 才是分配給遠端客戶機的實際 IP。

    為什麼會這樣設定呢﹖如果要研究 PPP 的話﹐您可以買一本近 500 頁的 O'Reilly 出版的“PPP 網路管理”看看。這裡我只能簡單地解釋為﹕透過 proxy-arp (相信您已經在“網路基礎”之“ARP協定”中接觸過了)﹐這裡的撥接伺服器就能夠代遠端的客戶機回答關於它的 ARP 查詢。這樣﹐本地網路中(或通過路由到達本地網路)的其它主機根本就不會意識到該遠端是在另外一個網路的。從而也就達成順利的 IP 通訊(當然要排除連線障礙啦)。

    假如您只有一台 modem 接受撥入﹐或您想用本身這台主機的 IP 來做 proxy-arp 的話﹐在“ ﹕”符號左邊的 IP 可以省略。

    假如您有超過一個 modem 來接受接撥﹐那麼傚法這個 options.ttyS1 建立其它 options.ttySx 檔就是了。

  3. 修改 /etc/mgetty+sendfax/login.config 檔案﹐將下面這行的註解“#”拿掉﹕
    /AutoPPP/ - a_ppp /usr/sbin/pppd -detach auth -chap +pap login debug
    

  4. 修改 /etc/mgetty+sendfax/mgetty.config 檔案,修改如下部分﹕
    port ttyS1
      debug 3
      data-only y
     init-chat "" ATZ OK AT&F1M0E1Q0S0=0 OK
     answer-chat "" ATA CONNECT \c \r
    

  5. 修改 /etc/inittab 檔案﹐在最後面加進下面這行(如果該‘s0’已經存在﹐將原來的用‘#’註解掉)﹕
    s0:2345:respawn:/sbin/mgetty -D -a modem ttyS1
    

    如果您的設備有別於 ttyS1﹐請自行更改﹐如若有多台撥入 MODEM 的話﹐參考上面句子複製再修改就可以了。

    然後讓設定生效﹐執行﹕
    init q

  6. 修改 /etc/ppp/pap-secrets ﹐將要使用撥接服務的使用者加進清單中 ﹕
    # Users allowed for PPP connection
    netman	*  netman-ppp-pwd  *
    kenny	*  kenny-ppp-pwd  *
    pppuser1 *	""	*
    ......
    

    在我的測試中﹐只要使用 PAP 機製進行 PPP 連接的話﹐就必須在 pap-secrets 中為使用者設定密碼﹐而不理會原來系統中使用什麼密碼都可以。不過﹐如果您引用第三行的“pppuser1”那樣將密碼設定為 ""的話﹐那樣就只會用系統的密碼進行登錄了。

  7. 最後﹐請執行﹕
    chmod u+s /usr/sbin/pppd

接下來就是您進行測試的時候了。當 Linux 撥入 MODEM 響起之後﹐如果 MODEM 之間未能建立起連線﹐那麼進入 mimicom 或其他 MODEM 操作程式﹐打 ‘ATA’就可以讓兩台 MODEM 進行握手了。如果您想設定為自動回答﹐那麼您只要輸入 ATS0=1 。最後按 Alt + Q (如果使用 minicom -m 的話)﹐不重新 reset modem 而離開就可以。 不過﹐通常 /etc/inittab 和 mgetty 設好了應該是很順利的。

這樣﹐您就可以使用 Win9x 撥號連線﹐或 RedHat 的 X window 控制面板來進行 PPP 連接﹐這裡所指的連接是使用了 PAP 機製的。如果在 linux 用 minicom 或其它手工程式撥接﹐或是在 Windows 選擇了‘撥接後帶出終端’來連線﹐在通過 PAP 認證之前﹐使用者仍然可以進行系統登錄﹐其情形就像 telnet 一樣。如果您想限制使用者只能使用 PPP ﹐您可以修改 /etc/passwd 這個檔案﹐將使用者的 shell 指向另外一個 ppplogin 的 script。步驟如下﹕

  1. 先用 useradd 增加撥接帳號(別忘了用 passwd 設定密碼)﹐然後修改 /etc/passwd 檔案﹐記得把最後的 shell 指向另一個 script﹕
    pppuser1:x:1500:100::/home/pppuser1:/bin/ppplogin
    

  2. 然後建立(或修改) /bin/ppplogin ﹕
    #!/bin/sh
      mesg n
      stty -echo
      /usr/sbin/pppd -detach passive
    

  3. 之後別忘了執行﹕
    chmod +x /bin/ppplogin

上面的 scrip 會直接替使用者啟動 PPP 連接﹐但如果您想為使用者提供一個登錄菜單的話﹐可以參考如下例子。
#!/bin/sh
stty pass8
while true
  do
  /usr/bin/clear
  echo ""
  echo "Welcome to netman's PPP server!"
  echo "-------------------------------"
  echo ""
  echo "Please pick a number from following options:"
  echo 	1. PPP
  echo	2. Telnet
  echo	3. Terminate
  echo -n "-->"
  if read CHOICE
    then /usr/bin/clear
    case "${CHOICE}"
    in
     '1') echo ""
	  echo "Starting PPP..."
     	  /usr/sbin/pppd ;;
     '2') echo ""
	  echo "Pleae type 'open' followed by the remote host name."
	  echo "And type 'quit' when you finish."
     	  /usr/bin/telnet ;;
     '3') echo ""
	  echo "Good bye~~!"
	  break ;;
    esac
  else
    exit
  fi
done



測試

  • 如果您要使用 script 的話﹐其實﹐整個撥接過程中﹐最關鍵點還是那個 chat script。如果您參考前門介紹的三個 scripts (ppp-on, ppp-on-dialer & ppp-off)來做撥接連線﹐老是不成功﹐改用這個簡單的方法。

    先建一個 chat script﹐存為 /etc/ppp/chat.scr﹐內容如下﹕
    "" "ATZ"
    "OK" "ATDT4123000"   
    "CONNECT" ""
    

    然後﹐修改 /etc/ppp/options﹐類似如下﹕
    -detach
    /dev/modem
    lock
    idle 600
    noauth
    modem 115200 crtscts
    defaultroute
    name "your_isp_account"
    connect '/usr/sbin/chat -v -f /etc/ppp/chat.scr'
    

    也就是將您的 ISP 帳號和 chat script 寫進這個檔裡面﹐然後執行 pppd& 就可以進行撥接了。如要斷線﹐可以執行 ppp-off, 或直接 kill 掉 pppd 的 PID.

  • 要注意一點﹕做 ppp dial-up client 和做 ppp dial-in server 的 /etc/ppp/options 設定是不一樣的。如果您要轉換角色﹐別忘了修改這個 options 檔﹐以及對應的 options.ttySxx 檔。

  • 如果您在使用 PPP 撥接有問題﹐在啟動 pppd 的時候﹐可以加入 -d 和 -detach 來觀察輸出結果﹔當然﹐也可以用 minicom 或 dip 等 terminal 屏幕來查看每一個步驟。考 /var/log/messages 中的記錄也有助研判問題所在。

  • 如果說什麼 PAP Authentication fail for usernameXXX ﹐或是一連上就斷線的話﹐請檢查 server 端的 /etc/ppp/pap-secrets 有沒有該使用者名稱﹐和密碼是否一致。如果您是用手工撥接的話﹐別忘了在 pppd 命令行﹐或其它 options 檔中包含有 name usernameXXX 字串。

  • 如果看見 Peer is not authorized to use remote address ip.ip.ip.ip 的話﹐那麼請確定在 client 端的 /etc/ppp/options 或 /usr/sbin/ppp-on 這個 script 有 noauth 的設定。

  • 如果您在 Windows 用帶出終端來撥接﹐要注意的是﹕“連線到”畫面中的密碼是給 PAP 用的﹐而 terminal 中輸入的密碼則是系統帳號登錄(假如您允許他們直接登錄的話)。

  • 成功撥接之後﹐如果不能存在遠端資源﹐請確定雙方的 routing 設定正確﹕server 那端必須有 proxy-arp 的設定﹐如果遠端 IP 和本地網路不是同一個 subnet ﹐那麼要為之建立 routing ﹔在客戶機那端必須有 defaultroute 的設定﹐您可以用 route 命令來確定 default gw 指向 PPP 的連線。

  • 如果撥接後雖然獲得 IP ﹐但當連接外面的時候 modem 卻沒有反應。那就請輸入 route -n 看看 default 有沒有包括 ppp 連線。如果沒有﹐是您已經為主機本身指定了 default gateway (您可以查一下 /etc/sysconfig/network 看看)﹐這樣的話﹐請執行﹕
    route add default dev ppp0

  • 在 routing 解決之後﹐只能用 IP 地址而不是主機名稱連線的話﹐那是 /etc/resolv.conf 這個檔案沒設定好了。將本地網路或 ISP 的 DNS 伺服器 IP 寫進去就可以了﹐如﹕
    nameserver	139.175.55.244
    

  • 最後有一點提醒您的是﹕原本我在寫“學習 Linux”的時候是選用 RedHat6.0 + CLE0.8 來測試的。不過﹐目前在更新文章的時候﹐卻是使用 Linpux6.4 (RedHat6.2)來進行。如果您發現因為版本不同而導致某些設定失誤﹐那請您自行除錯﹐或換成 RH6.2 來測試了。

如果您還有任何關於 PPP 的疑問﹐可以看一下 PPP、Serial、mgetty 等 HOWTO文件。也可以買 O'Reilly 的 “PPP 網路管理”這本書回來參考。

 

 


© 2000 Netman 網中人
Last Updated: June 20, 2001