本文介紹一種利用Linux伺服器的兩個串口構建撥號伺服器的方法,遠端使用者可以通過撥號連線到區域網路,方便地進行資訊傳遞和資源共用。
筆者的配置環境是Red Hat 8.0 Linux作業系統,所需的硬體包括兩個外置Modem(分別串連到COM1和COM2連接埠)和兩條電話線。實現步驟如下:
1.初始化串口裝置
在/etc/inittab檔案中加入如下兩行,用來初始化ttyS0和ttyS1兩個串口裝置:
S0:345:respawn:/sbin/mgetty -D -X 3 ttyS0
S1:345:respawn:/sbin/mgetty -D -X 3 ttyS1
然後,運行“/sbin/init q”命令使改動生效。
2.指定認證方式
在/etc/PPP目錄下建立檔案ppplogin,內容如下:
#!/bin/sh
/usr/sbin/pppd auth -chap +pap login
該檔案指定使用者登入時採用PAP認證。PAP和CHAP是PPP服務的兩種身分識別驗證協議。
儲存檔案後,給檔案設定執行的許可權:
#chmod a+x /etc/ppp/ppplogin
然後,更改/etc/mgetty+sendfax/login.config檔案,去掉“/AutoPPP/”一行前面的注釋,並改為如下內容:
/AutoPPP/ - - /etc/PPP/ppplogin
3. 修改options檔案
修改/etc/PPP/Options檔案為如下內容;
detach
Modem
Lock
crtscts
asyncmap 0
netmask 255.255.255.0
proxyarp
ms-dns 192.168.11.1
“detach”選項非常重要。如果不指定這個選項,撥號程式就會進入後台,使得Shell指令碼退出,隨之而來的是串列線路被掛斷,導致串連中止。“detach”防止了tty裝置脫離PPPD的控制。
“Modem”選項使得PPPD監視DTR引線,可以觀察到對等點是否已掉線。
“Lock”選項指定在串列裝置上使用UUCP風格的鎖定。
“crtscts”選項用以開啟硬體握手訊號。
“asyncmap 0”設定了非同步字元對應表,這個映射指定控制字元不能直接通過串連發送,需要先進行轉義。
“netmask 255.255.255.0”設定PPP網路介面的網路遮罩。
“proxyarp”選項開啟了ARP代理功能。
“ms-dns”2.168.11.1”指定了區域網路內的DNS伺服器位址,如沒有可以不設。
4. 給撥入使用者指派IP
建立/etc/ppp/Options.ttyS0和/etc/ppp/
options.ttyS1兩個檔案,內容如下:
# Vi options.ttyS0
192.168.11.3:192.168.11.242
# Vi options.ttys1
192.168.11.3:192.168.11.243
其中,“192.168.11.3”是用作撥號伺服器的那台Linux機器的IP地址,“192.168.11.242”和“192.168.11.243”是分別指定給COM1口和COM2口撥入使用者的IP地址。
5. 口令驗證
編輯檔案/etc/PPP/pap-secrets,內容如下:
* * "secret" 192.168.11.242
* * "password" 192.168.11.243
如上所示,每行程式碼封裝含四列,分別代表使用者名稱、伺服器位址、口令值和IP地址清單。“*”表示可以與任何內容進行匹配。
使用者撥入後,如果需要訪問區域網路內的其它伺服器,就必須開啟IP轉寄功能:
echo 1> /proc/sys/net/ipv4/ip_forward
要想在空閑一段時間後自動獬櫻枰?etc/ppp/options中加入如下一行:
idle 600
上述代碼中,“600”表示600秒,即10分鐘。
如果在相應目錄下找不到/sbin/mgetty檔案和/etc/mgetty+sendfax/login.config檔案,則需要安裝mgetty軟體包。