跳轉到內容

Linux 網路/SLIP 伺服器

來自 Wikibooks,開放世界中的開放書籍

SLIP 伺服器。

[編輯 | 編輯原始碼]

如果您有一臺可能連線到網路的機器,您希望其他人能夠撥號進入並提供網路服務,那麼您需要將您的機器配置為伺服器。如果您想使用 SLIP 作為序列線路協議,那麼目前您有三種選擇來配置您的 Linux 機器作為 SLIP 伺服器。我個人更傾向於使用第一個介紹的 sliplogin,因為它似乎最容易配置和理解,但我會提供每個選項的摘要,以便您可以做出自己的決定。

使用 sliplogin 的 SLIP 伺服器。

[編輯 | 編輯原始碼]

sliplogin 是一個程式,您可以用它來代替 SLIP 使用者的普通登入 shell,它將終端線路轉換為 SLIP 線路。它允許您將您的 Linux 機器配置為靜態地址伺服器,使用者每次撥號進來都會獲得相同的地址,或者配置為動態地址伺服器,使用者會分配一個地址,該地址不一定與上次撥號時相同。

撥號者將按照標準登入過程進行登入,輸入他們的使用者名稱和密碼,但登入後不會顯示 shell,而是執行 sliplogin,它會搜尋其配置檔案 (/etc/slip.hosts),查詢與撥號者登入名匹配的條目。如果找到,它會將線路配置為 8 位乾淨線路,並使用 ioctl 呼叫將線路規程轉換為 SLIP。當此過程完成後,將進行最後的配置階段,其中 sliplogin 會呼叫一個 shell 指令碼,該指令碼使用相關的 IP 地址、網路掩碼配置 SLIP 介面,並設定適當的路由。此指令碼通常稱為 /etc/slip.login,但類似於 getty,如果您有某些撥號者需要特殊初始化,那麼您可以建立名為 /etc/slip.login.loginname 的配置指令碼,這些指令碼將專門針對他們執行,而不是預設指令碼。

您需要配置三個或四個檔案才能使 sliplogin 正常工作。我將詳細說明如何以及從哪裡獲取軟體以及每個檔案的配置細節。這些檔案是

·  /etc/passwd, for the dialin user accounts.

·  /etc/slip.hosts, to contain the information unique to each dial-in
   user.

·  /etc/slip.login, which manages the configuration of the routing
   that needs to be performed for the user.

·  /etc/slip.tty, which is required only if you are configuring your
   server for dynamic address allocation and contains a table of
   addresses to allocate

·  /etc/slip.logout, which contains commands to clean up after the
   user has hung up or logged out.


哪裡可以獲取 sliplogin

[編輯 | 編輯原始碼]

您可能已將 sliplogin 包作為發行版的一部分安裝,如果沒有,則可以從以下位置獲取 sliplogin:metalab.unc.edu。tar 檔案包含原始碼、預編譯的二進位制檔案和手冊頁。

為了確保只有授權使用者才能執行 sliplogin 程式,您應該在 /etc/group 檔案中新增類似於以下內容的條目

    slip::13:radio,fred


當您安裝 sliplogin 包時,Makefile 將更改 sliplogin 程式的組所有權為 slip,這意味著只有屬於該組的使用者才能執行它。上面的示例將只允許使用者 radio 和 fred 執行 sliplogin。

要將二進位制檔案安裝到 /sbin 目錄中,並將手冊頁安裝到第 8 節中,請執行以下操作

     # cd /usr/src
     # gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf -
     # cd sliplogin-2.1.1
     # <..edit the Makefile if you don't use shadow passwords..>
     # make install

如果您想在安裝之前重新編譯二進位制檔案,請在 make install 之前新增 make clean。如果您想將二進位制檔案安裝到其他位置,則需要編輯 Makefile 安裝規則。

請閱讀軟體包附帶的 README 檔案以瞭解更多資訊。

配置 /etc/passwd 以用於 SLIP 主機。

[編輯 | 編輯原始碼]

通常,您會在 /etc/passwd 檔案中為 SLIP 撥號者建立一些特殊的登入名。一個常見的約定是在呼叫主機的 hostname 前面加上一個大寫字母“S”。例如,如果呼叫主機名為 radio,那麼您可以建立一個 /etc/passwd 條目,如下所示

    Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin

帳戶名稱實際上並不重要,只要對您有意義即可。

注意:撥號者不需要任何特殊的 home 目錄,因為他們不會從這臺機器獲得 shell,所以 /tmp 是一個不錯的選擇。還要注意,sliplogin 用作普通登入 shell 的替代品。

配置 /etc/slip.hosts

[編輯 | 編輯原始碼]

/etc/slip.hosts 檔案是 sliplogin 搜尋與登入名匹配的條目的檔案,以獲取此撥號者的配置詳細資訊。您可以在此檔案中指定分配給撥號者的 IP 地址和網路掩碼,並配置其使用。兩個主機(一個為主機 radio 的靜態配置,另一個為使用者 host albert 的動態配置)的示例條目可能如下所示

#
Sradio   44.136.8.99   44.136.8.100  255.255.255.0  normal      -1
Salbert  44.136.8.99   DYNAMIC       255.255.255.0  compressed  60
#


/etc/slip.hosts 檔案條目如下所示:


1. 撥號者的登入名。

2. 伺服器機器的 IP,即這臺機器。

3. 將分配給撥號者的 IP 地址。如果此欄位被編碼為 DYNAMIC,則將根據您稍後討論的 /etc/slip.tty 檔案中包含的資訊分配 IP 地址。注意:您必須使用至少 1.3 版本的 sliplogin 才能使其正常工作。

4. 以點分十進位制表示法分配給撥號機器的網路掩碼,例如 255.255.255.0 用於 C 類網路掩碼。

5. SLIP 模式設定,允許您啟用/停用壓縮和 SLIP 其他功能。此處允許的值為“normal”或“compressed”。

6. 超時引數,指定線路在空閒狀態(未接收資料包)下可以保持多長時間,之後線路將自動斷開連線。負值將停用此功能。

7. 可選引數。


注意:您可以在欄位 2 和 3 中使用主機名或以點分十進位制表示法的 IP 地址。如果您使用主機名,則這些主機必須可解析,也就是說,您的機器必須能夠為這些主機名找到一個 IP 地址,否則指令碼將在呼叫時失敗。您可以透過嘗試 telnet 到主機名來測試這一點,如果您收到“正在嘗試 nnn.nnn.nnn...”訊息,那麼您的機器已經能夠為該名稱找到一個 IP 地址。如果您收到“未知主機”訊息,則它沒有找到。如果不是,請使用以點分十進位制表示法的 IP 地址,或修復您的名稱解析器配置(參見名稱解析部分)。

最常見的 SLIP 模式為


  normal
     to enable normal uncompressed SLIP.


  compressed
     to enable van Jacobsen header compression (cSLIP)


當然,這些是互斥的,您可以使用其中一種或兩種。有關其他可用選項的更多資訊,請參考手冊頁。

配置 /etc/slip.login 檔案。

[編輯 | 編輯原始碼]

在 sliplogin 搜尋 /etc/slip.hosts 並找到匹配的條目後,它將嘗試執行 /etc/slip.login 檔案,以使用其 IP 地址和網路掩碼實際配置 SLIP 介面。

隨 sliplogin 軟體包提供的示例 /etc/slip.login 檔案如下所示

     #!/bin/sh -
     #
     #       @(#)slip.login  5.1 (Berkeley) 7/1/90
     #
     # generic login file for a SLIP line.  sliplogin invokes this with
     # the parameters:
     #     $1       $2       $3    $4, $5, $6 ...
     #   SLIPunit ttyspeed   pid   the arguments from the slip.host entry
     #
     /sbin/ifconfig $1 $5 pointopoint $6 mtu 1500 -trailers up
     /sbin/route add $6
     arp -s $6 <hw_addr> pub
     exit 0
     #

您會注意到,此指令碼只是使用 ifconfig 和 route 命令來配置 SLIP 裝置及其 IP 地址、遠端 IP 地址和網路掩碼,並透過 SLIP 裝置建立遠端地址的路由。就像您使用 slattach 命令一樣。

還要注意使用代理 ARP 來確保與伺服器機器位於同一乙太網上的其他主機將知道如何訪問撥號主機。<hw_addr> 欄位應該是機器中乙太網卡的硬體地址。如果您的伺服器機器不在乙太網網路上,那麼您可以完全省略此行。

配置 /etc/slip.logout 檔案。

[編輯 | 編輯原始碼]

當呼叫掉線時,您需要確保序列裝置恢復到其正常狀態,以便將來的撥號者能夠正確登入。這是透過使用 /etc/slip.logout 檔案實現的。它的格式非常簡單,並且使用與 /etc/slip.login 檔案相同的引數呼叫。


             #!/bin/sh -
             #
             #               slip.logout
             #
             /sbin/ifconfig $1 down
             arp -d $6
             exit 0
             #


它所做的就是“關閉”介面,這將刪除之前建立的手動路由。它還使用 arp 命令刪除任何已設定的代理 ARP,同樣,如果您的伺服器機器沒有乙太網埠,則您不需要在指令碼中使用 arp 命令。

配置 /etc/slip.tty 檔案。

[編輯 | 編輯原始碼]

如果您使用動態 IP 地址分配(在 /etc/slip.hosts 檔案中,任何主機都配置有 DYNAMIC 關鍵字),那麼您必須配置 /etc/slip.tty 檔案以列出分配給哪個埠的地址。只有當您希望伺服器動態地為使用者分配地址時,才需要此檔案。

該檔案是一個表格,它列出了支援撥號 SLIP 連線的 tty 裝置,以及分配給在該埠上撥號使用者的 IP 地址。

其格式如下:

     # slip.tty    tty -> IP address mappings for dynamic SLIP
     # format: /dev/tty?? xxx.xxx.xxx.xxx
     #
     /dev/ttyS0      192.168.0.100
     /dev/ttyS1      192.168.0.101
     #


此表表示,在 /dev/ttyS0 埠上撥號的呼叫者,如果他們在 /etc/slip.hosts 檔案中的遠端地址欄位設定為 DYNAMIC,將被分配 192.168.0.100 的地址。

這樣,您只需要為所有不需要專用地址的使用者分配一個埠的地址。這有助於您將所需的地址數量降至最低,避免浪費。

使用 dip 的 SLIP 伺服器。

[編輯 | 編輯原始碼]

首先我要說的是,以下資訊來自 dip 手冊頁,其中簡要記錄瞭如何執行 Linux 作為 SLIP 伺服器。請注意,以下內容基於 dip337o-uri.tgz 包,可能不適用於其他版本的 dip。

dip 具有輸入操作模式,在這種模式下,它會自動定位呼叫它的使用者的條目,並根據在 /etc/diphosts 檔案中找到的資訊配置序列線作為 SLIP 連線。這種輸入操作模式透過呼叫 dip 作為 diplogin 來啟用。因此,這是您使用 dip 作為 SLIP 伺服器的方法,方法是建立使用 diplogin 作為登入 shell 的特殊帳戶。

您需要做的第一件事是建立以下符號連結:

    # ln -sf /usr/sbin/dip /usr/sbin/diplogin

然後您需要在您的 /etc/passwd 和 /etc/diphosts 檔案中新增條目。您需要建立的條目格式如下:

要將 Linux 配置為使用 dip 的 SLIP 伺服器,您需要為使用者建立一些特殊的 SLIP 帳戶,其中 dip(在輸入模式下)用作登入 shell。一個建議的約定是讓所有 SLIP 帳戶都以大寫字母“S”開頭,例如“Sfredm”。

SLIP 使用者的示例 /etc/passwd 條目如下:

     Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
     ^^         ^^        ^^  ^^   ^^   ^^   ^^
     |          |         |   |    |    |    \__ diplogin as login shell
     |          |         |   |    |    \_______ Home directory
     |          |         |   |    \____________ User Full Name
     |          |         |   \_________________ User Group ID
     |          |         \_____________________ User ID
     |          \_______________________________ Encrypted User Password
     \__________________________________________ Slip User Login Name


在使用者登入後,如果登入程式發現並驗證了使用者沒問題,它將執行 diplogin 命令。dip 在被呼叫為 diplogin 時,知道它應該自動假定它被用作登入 shell。當它以 diplogin 啟動時,它所做的第一件事是使用 getuid() 函式呼叫來獲取呼叫它的使用者的使用者 ID。然後,它在 /etc/diphosts 檔案中搜索第一個與使用者 ID 或呼叫進入的 tty 裝置的名稱匹配的條目,並相應地配置自身。透過明智地決定是否在 diphosts 檔案中為使用者提供條目,或者是否讓使用者獲得預設配置,您可以構建伺服器,使其能夠混合使用靜態分配地址的使用者和動態分配地址的使用者。

如果 dip 在輸入模式下被呼叫,它將自動新增一個“Proxy-ARP”條目,因此您無需擔心手動新增此類條目。

配置 /etc/diphosts

[編輯 | 編輯原始碼]

/etc/diphosts 用於 dip 來查詢遠端主機的預設配置。這些遠端主機可能是撥號到您的 Linux 計算機的使用者,也可能是您使用您的 Linux 計算機撥號到的機器。

/etc/diphosts 的通用格式如下:

      ..
     Suwalt::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
     ttyS1::145.71.34.3:145.71.34.2:255.255.255.0:Dynamic ttyS1:CSLIP,296
      ..

各個欄位分別表示:

1. 登入名:由 getpwuid(getuid()) 返回,或 tty 名字。

2. 未使用:與 passwd 相容。

3. 遠端地址:呼叫主機的 IP 地址,可以是數字,也可以是名稱。

  by name

4. 本地地址:此機器的 IP 地址,可以是數字,也可以是名稱。

5. 網路掩碼:用點分十進位制表示。

6. 註釋欄位:在此處輸入任何您想要的內容。

7. 協議:Slip、CSlip 等。

8. MTU:十進位制數字。

  An example /etc/net/diphosts entry for a remote SLIP user might be:
    Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296

它指定了一個遠端地址為 145.71.34.1 且 MTU 為 296 的 SLIP 連線,或者

    Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006

它指定了一個 cSLIP 相容的連線,遠端地址為 145.71.34.1,MTU 為 1006。

因此,所有您希望允許以靜態分配的撥號 IP 訪問的使用者都應該在 /etc/diphosts 中有一個條目。如果您希望撥號到特定埠的使用者動態分配其詳細資訊,那麼您必須為 tty 裝置建立一個條目,並且不要配置基於使用者的條目。您應該記住為您的撥號使用者使用的每個 tty 裝置至少配置一個條目,以確保無論他們使用哪個調變解調器撥號,都能夠獲得合適的配置。

當用戶登入時,他們會收到正常的登入和密碼提示,他們應該在提示符處輸入他們的 SLIP 登入使用者 ID 和密碼。如果這些驗證沒問題,那麼使用者將不會看到任何特殊訊息,他們應該在自己的終端上切換到 SLIP 模式。然後,使用者應該能夠正常連線並使用 diphosts 檔案中的相關引數進行配置。

使用 dSLIP 包的 SLIP 伺服器。

[編輯 | 編輯原始碼]

Matt Dillon <dillon@apollo.west.oic.com> 編寫了一個包,它不僅可以撥號,還可以撥出 SLIP。Matt 的包是一組小型程式和指令碼的組合,它們可以為您管理連線。您需要安裝 tcsh,因為至少有一個指令碼需要它。Matt 提供了 expect 實用程式的二進位制副本,因為它也是其中一個指令碼所需要的。您很可能需要一些使用 expect 的經驗才能讓這個包按您的意願工作,但不要因此而氣餒。Matt 在 README 檔案中編寫了一套完善的安裝說明,所以我就不重複了。

您可以從其主頁 apollo.west.oic.com/pub/linux/dillon_src/dSLIP203.tgz 或 metalab.unc.edu/pub/Linux/system/Network/serial/dSLIP203.tgz 獲取 dSLIP 包。

閱讀 README 檔案,並在執行 make install 之前建立 /etc/passwd 和 /etc/group 條目。

華夏公益教科書