這一章介紹一些基本的網路主題,例如,連線到網際網路和連線到 LAN(區域網路)。使用序列 cable 連 接兩台電腦的情況也有描述。
為了要連接兩台電腦來交換資料,在兩者之間必須存在一些連接的類型。 例如,兩台機器可以有網路卡 (NICs) 利用纜線連接,或是經由一些裝置, 像集線器或是交換器。這個類型通常用作為 LAN (Local Area Network)。
在 Internet 上,則使用 WAN (Wide Area Network): 當你連接到 Internet,你可以存取實際上距離非常遠的電腦,而不需要 知道兩者間的連線是如何運作的。
以下是網路設定檔的列表。關於這些檔案的用途,有一些已經在 第一章談到過了,而將會在以下做更詳細的描述。
區域主機資料庫檔。每一行包含一台已經承認的主機資訊,並 包括主機位址,主機名稱和別名。小型的網路可以設定只使用 hosts 檔,而不用 name server。
這個檔案指明了 Domain Name System 應該如何運作來存取 Internet。通常它包含了名稱伺服器的位址。
這個檔案被用來在開機時,自動地設定網路卡。
包含閘道器的 IP 位址。
名稱服務交換設定檔。它控制了資料庫搜尋的工作,包括承認的 主機,使用者,群組等。此外,這個檔案還定義了所要搜尋的 資料庫,例如此行:
hosts: files dns指明主機資料庫來自兩個地方,files (the local /etc/hosts file) 和 DNS, (the Internet Domain Name System) 並且本機上檔案優先於 DNS。
通常不需要修改此檔。
Internet 連線有許多類型:這一段解釋如何使用 modem 經由電話線 並利用 PPP 協定連接到 ISP,提供一個一般 的設定。為了要進行網路連線,以下步驟必須執行:
從 ISP 獲得必要的資訊。
編輯 /etc/resolv.conf 並檢查 /etc/nsswitch.conf。
建立 /etc/ppp 和 /etc/ppp/peers 目錄。
建立連線的 script,chat 檔和 pppd 的選項檔。
建立使用者密碼認證檔。
從以上的列表來看,好像需要很多複雜的程序要做。實際上,這些 步驟是非常容易的:這只是修改,建立或簡單地檢查一些小的 文字檔而已。以下的範例中,我們將假設 modem 連接到第二個 序列埠上 /dev/tty01 (COM2 in DOS.)。
/etc/resolv.conf 必須使用 ISP 所提供 的資訊來設定,特別是 DNS 位址。 此例中,兩個 DNS 為 "194.109.123.2" 和 "191.200.4.52"。
Note: 最後一行 ("lookup file bind") 指出在名稱不 出現在 /etc/hosts 時,才使用 位址伺服器。這一行被標註了,因為 NetBSD 1.4 以後 已經不再需要了;這類的資訊現在被定義在 /etc/nsswitch.conf。新的 Name Service Switch 改以存取程式所使用的資料庫來尋找 基本的系統資訊。
現在有個 /etc/nsswitch.conf 檔 的範例。
Example 9-2. nsswitch.conf
# /etc/nsswitch.conf group: compat group_compat: nis hosts: files dns netgroup: files [notfound=return] nis networks: files passwd: compat passwd_compat: nis
Note: 只有以 "hosts:" 為開頭一行被修改;當要解析 主機名稱時,本機上的 hosts 將會 在使用 DNS 之前被搜尋。
/etc/ppp 和 /etc/ppp/peers 目錄將會包含有關 PPP 連線的設定檔。在首次安裝 NetBSD 後,它們並不存在 而必須被建立 (chmod 700.)
連線 script 將用來執行 pppd 指令; 它位於 /etc/ppp/peers 而通常具有 ISP 的 名稱。例如,如果 ISP 的名稱是 BigNet 而你連線到 ISP 的使用者名稱是 alan,則連線 script 可以是: 是
Example 9-3. 連線 script
# /etc/ppp/peers/bignet
connect '/usr/sbin/chat -v -f /etc/ppp/peers/bignet.chat'
noauth
user alan
remotename bignet.it
在先前的例子中,script 指明了 chat 檔 來進行連線。相關的選項在 pppd(8) 線上手冊中,有詳細地描述。
Note: 如果你發生過連線的問題,加入以下兩行到連線 script 中。
debug kdebug 4你將在系統進行連線時,獲得執行運作時的訊息。 詳細說明請看 pppd(8), syslog.conf(5)。
連線 script 呼叫 chat 應用程式來 處理實際上的連線 (modem 初始化,撥號, ...)。 chat 的參數也可以設定在連線 script 中,但最好放在另外的檔案裡。例如,撥接號碼是 0299999999,chat script 的範例是:
Example 9-4. Chat 檔
# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
'' ATDT0299999999
CONNECT ''
Note: 如果 chat 檔有問題,你可以試著使用 cu 來進行手動撥接並檢查你接收的的訊息。 請看 cu(1)。
經由兩個系統的認證,可以用來識別相互的系統,在此練習中, 只假設被 ISP 認證,而沒有認證 ISP,我們使用以下方法。
login
PAP/CHAP
大部分的 ISP 使用 PAP/CHAP 認證。
認證資料被儲存在 /etc/ppp/pap-secrets for PAP 和 /etc/ppp/chap-secrets for CHAP。 並具有以下格式:
user * password
例如:
alan * pZY9o
Note: 為了安全性的考量, pap-secrets 和 chap-secrets 檔的擁有者為 root 並且權限為 "600"。
這個認證的類型在今日並沒有被廣泛的使用;如果 ISP 使用 login 認證,user name 和 password 必須寫在 chat 檔而不是 PAP/CHAP 檔,因為 chat 檔模擬了一個交談式的認證。在這個 情況裡,必須為 chat 檔設定適當的權限。
以下為 chat 檔使用 login 認證的範例:
在執行連線以前,做個快速的 modem 測試是個好主意,來確認 modem 硬體上的連線和溝通的功能。可以使用 cu 進行測試,如以下的例子。
建立 /etc/uucp/port 並包含 以下這幾行:
type modem port modem device /dev/tty01 speed 115200(將 /dev/tty01 換成正確的裝置。)
鍵入 cu -p modem,開始傳送命令給 modem。例如:
# cu -p modem Connected. ATZ OK ~. Disconnected. #在先前的範例中,重置命令 (ATZ) 被送到 modem,而回應是 OK: 溝通正常。要離開 cu,在 . (dot) 後鍵入 ~ (tilde), 像前例一樣。
如果 modem 不能運作,檢查所連接的連接埠(例如,在 cu 中所使用的連接埠)。 電話線也常常會導致問題。
Note: 當你使用 cu 時,如果有訊息顯示 "Permission denied",檢查 /dev/tty## 裝置的擁有者是誰: 他必須為 uucp。例如:
$ ls -l /dev/tty00 crw------- 1 uucp wheel 8, 0 Mar 22 20:39 /dev/tty00如果擁有者是 root,則會發生:
$ ls -l /dev/tty00 crw------- 1 root wheel 8, 0 Mar 22 20:39 /dev/tty00 $ cu -p modem cu: open (/dev/tty00): Permission denied cu: All matching ports in use
一切都準備就緒,使用以下指令執行:
# pppd call bignet
bignet 是以經設定在 連線 script 中的名稱。要查看 pppd 的 連線訊息,使用以下指令:
# tail -f /var/log/messages
要中斷連線,針對 pppd 執行 kill -HUP。
當連線正確地運作時,則我們可以撰寫一些 script 來避免在 每一次進行連線時,都重複同樣的指令。我們可以命名兩個 script,例如,ppp-up 和 ppp-down。
ppp-up 用來連線到 ISP。
Example 9-7. ppp-up
#!/bin/sh
MODEM=tty01
POP=bignet
if [ -f /var/spool/lock/LCK..$MODEM ]; then
echo ppp is already running...
else
pppd call $POP
tail -f /var/log/messages
fi
ppp-down 用來中斷連線:
Example 9-8. ppp-down
#!/bin/sh
MODEM=tty01
if [ -f /var/spool/lock/LCK..$MODEM ]; then
echo -f killing pppd...
kill -HUP `cat /var/spool/lock/LCK..$MODEM`
echo done
else
echo ppp is not active
fi
在執行 pppd 時,這兩個 script 都 具有一些方便之處,它會在 /var/spool/lock 目錄建立 LCK..tty01 檔案。 這個檔案包含了 pppd 的 pid。
兩個 script 必須是可執行的:
# chmod u+x ppp-up ppp-down
網路功能是 Unix 和 NetBSD 的主要優勢之一:網路具有強大的 功能又容易設定,而且也不貴,因為不需要購買額外的軟體來進行通訊 的運作或是建立伺服器。Section 9.4 解釋了如何設定 一台 NetBSD 機器來扮演網路中閘道器的角色:所有的連線使用 IPNAT 連接到閘道器。在建立網路之前,唯一的事就是 購買 NetBSD 支援的網路卡 (參考 INSTALL 可以 得到支援硬體的清單)。
首先,網路卡必須安裝並連接到集線器,交換器或是另一張網路卡。 (請看 Figure 9-1)
下一步,檢查網路卡是否被核心支援,可查看 dmesg 指令的輸出。在以下的例子中,被核心支援的網路卡是 NE2000 相容卡:
...
ne0 at isa0 port 0x280-0x29f irq 9
ne0: NE2000 Ethernet
ne0: Ethernet address 00:c2:dd:c1:d1:21
...
如果卡沒有被核心承認,檢查它是否在核心設定檔內並且卡的 IRQ 是否和核心期望的值相符合。例如,在核心設定檔中,有一行 isa NE2000 的設定;核心預期卡的 IRQ 為 9。
...
ne0 at isa? port 0x280 irq 9 # NE[12]000 ethernet cards
...
如果卡的設定並不相同,它在開機時,將不能被偵測到。在此例中, 你以更改核心設定檔並重新編譯一個核心,或是改變卡的設定(通常 可經由設定磁片來設定,如果是老舊的卡,則使用 jumper)。
以下的指令顯示網路卡目前的設定:
# ifconfig ne0
ne0: flags=8822<BROADCAST,NOTRAILERS,SIMPLEX,MULTICAST> mtu 1500
media: Ethernet 10base2
網路卡的軟體設定是非常容易的。IP 位址 "192.168.1.1" (為內部的網路所保留的)被指派到這張卡上。
# ifconfig ne0 inet 192.168.1.1 netmask 0xffffff00
重複前項指令並得到不同的結果:
# ifconfig ne0
ne0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
media: Ethernet 10base2
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
ifconfig 的輸出現在被改變了:IP 位址被 印出來了而且有兩個新的 flags,"UP" 和 "RUNNING"。如果介面不是 "UP",它將不能被 系統用來傳送封包。
For example, if 192.168.1.2 is the address of the active host: 主機被指派了 IP 位址 192.168.1.1,這是被內部網路所保留的而不能 經由 Internet 到達的位址。設定已經完成了而必須被測試;如果有 另一台主機在網路上,可利用 ping 來測試。
# ping 192.168.1.2
PING ape (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=1.286 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=0.649 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=0.681 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=255 time=0.656 ms
^C
----ape PING Statistics----
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.649/0.818/1.286/0.312 ms
但是現在的設定在下一次開機時會消失,必須重複進行一次網路卡 的設定。為了避免每次開機時重複設定網路卡,需要完成兩件事: 第一,建立 /etc/ifconfig.ne0 檔並包含 以下這行:
inet 192.168.1.1 netmask 0xffffff00
接著,在 /etc/rc.conf 中,設定以下選項
auto_ifconfig=YES
在下一次開機時,網路卡將會被自動地設定了。
/etc/hosts 是 IP 位址和別名的資料庫: 它應該包含屬於這個內部網路中的主機位址。例如:
# $NetBSD: chap-net.sgml,v 1.1.1.2 2001/09/05 17:04:08 jrf Exp $
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# It is used only for "ifconfig" and other operations
# before the nameserver is started.
#
#
127.0.0.1 localhost
#
# RFC 1918 specifies that these networks are "internal".
# 10.0.0.0 10.255.255.255
# 172.16.0.0 172.31.255.255
# 192.168.0.0 192.168.255.255
192.168.1.1 ape.insetti.net ape
192.168.1.2 vespa.insetti.net vespa
/etc/nsswitch.conf 應該被修改像 Example 9-2 所解釋的一樣。
Note: 在此例中,/etc/ifconfig.ne0 被建立因為 被核心承認的網路卡為 ne0;如果你使用不 同的卡,置換適當的名字以取代 ne0。
摘要,設定網路卡必須執行以下的步驟:網路卡必須被安裝並與其他 主機相連接。接著必須設定網路卡(使用 ifconfig) 並且,最後,/etc/hosts 和 /etc/nsswitch.conf 檔必須被修改。 這種網路類型的管理非常簡單,而且適合不太複雜的小型網路。
這個字 IPNAT 是由以下字母的開頭組成的 Internet Protocol Network Address Translation,可以進行內部網路 和真實網路 (Internet) 的連線工作。這是指只有一個 "真實的" IP,靜態的或動態的屬於一台跑著 IPNAT 的閘道器, 它也可以讓內部網路上的主機,同時連線到 Internet。
一些 IPNAT 範例的使用可以在 /usr/share/examples/ipf 目錄中找到:參考 BASIC.NAT 和 nat-setup。
以下設定的例子的詳細描述在 Figure 9-1: host 1 可以利用 modem 撥接連接到 Internet 並且獲得動態 IP 位址。host 2 和 host 3 不能直接與 Internet 溝通:IPNAT 將 會允許他們如此做:host 1 將扮演 hosts 2 and 3 的閘道器。
要使用 IPNAT 則在核心設定檔中 "pseudo-device ipfilter" 選項必須打開。 要檢查在目前核心中是否已經包含此選項:
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding = 1
如果結果是 "1",如上述例子一般,則選項是打開的, 否則如果結果是 "0",則選項是關閉的。你可以做 這兩件事:
編譯新核心,並加入 GATEWAY 選項為預設值。
使用以下指令在目前的核心中打開選項:
# sysctl -w net.inet.ip.forwarding=1
如果你將前項指令放入開機 script 中(例如, /etc/rc.local), 它將在下一次開機時自動地被執行。
這一段剩餘的部份將解釋如何建立 IPNAT 設定,並使它在進行 PPP 連線時被自動地啟動。使用這個設定,在家庭網路中(例子) 的所有主機,都將能夠經由閘道器連接到 Internet,甚至它們 並不使用 NetBSD。
首先,建立空白的 /etc/ipf.conf 檔:
# touch /etc/ipf.conf
接著,建立 /etc/ipnat.conf 檔並 包含以下規則:
map ppp0 192.168.1.1/24 -> 0/32 proxy port ftp ftp/tcp
map ppp0 192.168.1.1/24 -> 0/32 portmap tcp/udp 40000:60000
map ppp0 192.168.1.1/24 -> 0/32
The third line is used to enable ICMP, ping, etc. 192.168.1.1/24 是應該被映對的網路位址(此例中, 192.168.1.0/24 也是)。第一行的設定是選擇性的:它使得 FTP 能經由閘道器運作。第二行設定用來修正 tcp 和 udp 封包; portmapping 是必要的,因為多對一的關係)。
在 /etc/rc.conf 中, portmap 必須被打開。 (ipfilter 則不需要)
建立 /etc/ppp/ip-up 檔;它將在每次 進行 PPP 連線時被呼叫。
#!/bin/sh
# /etc/ppp/ip-up
/usr/sbin/ipnat -F
/usr/sbin/ipnat -C
/sbin/ipf -E
/usr/sbin/ipnat -f /etc/ipnat.conf
建立 /etc/ppp/ip-down;它將在每次 PPP 進行 斷線時被呼叫。
#!/bin/sh
# /etc/ppp/ip-down
/sbin/ipf -D
/usr/sbin/ipnat -C
ip-up 和 ip-down 都 必須是可執行的:
# chmod u+x ip-up ip-down
閘道器已經準備好了。
Create a /etc/resolv.conf file like the one on the gateway machine. 建立 /etc/resolv.conf 檔並和 閘道器上的一樣。
鍵入以下指令:
# route add default 192.168.1.1
192.168.1.1 是閘道器的位址。
當然,你不需要每次執行這個指令,最好設定 "defaultroute" 選項在 /etc/rc.conf 中或是寫入閘道器的位址到 /etc/mygate 中: default route 將在系統初始化的時候,被自動地設定,並使用 /etc/mygate 的內容 (或 defaultroute 選項) 作為 route add default 指令的參數。
如果 client 機器不使用 NetBSD,設定將會不相同。 在 Windows PC 上,你需要適當地設定 TCP/IP 協定的閘道器為 NetBSD 閘道器 的 IP 位址。
這就是 client 機器所要做的事。
以下有用的指令可以用來診斷問題:
顯示 routing table (類似 route show).
在 client 端顯示封包到其他目的地的路徑。
在閘道器上用來監督 TCP/IP 流量。
如果你需要在兩台沒有網路設備的 PC 之間傳輸資料,而將資料複製到 磁片上又是不太方便的時候,最簡單的解決方案是:兩台機器利用序列 纜線做網路連接 (a null modem cable.) 以下的段落描述一些設定。
最簡單的例子就是兩台機器都執行 NetBSD:使用 SLIP 協定連線是非常簡單的。在第一台機器上 執行以下指令:
# slattach /dev/tty00
# ifconfig sl0 inet 192.168.1.1 192.168.1.2
在第二台機器上執行以下指令:
# slattach /dev/tty00
# ifconfig sl0 inet 192.168.1.2 192.168.1.1
現在你可以使用 ping 做測試;例如, 在第二台 PC 上執行:
# ping 192.168.1.1
如果一切正常,則現在在兩台機器上已經具有網路連線了,而 ftp 和 telnet和其他相似的指令也能運用了。 機器的別名可寫在 /etc/hosts 中。
在以上的例子中,兩台 PC 都使用第一序列埠 (/dev/tty0)。如果和你使用的不同, 請置換成適當的裝置。
IP 位址像 192.168.x.x 是被保留用在"內部" 網路上的。第一台 PC 的位址是 192.168.1.1 而第二台 則為 192.168.1.2。
要使用更快的傳輸,可以在slattach 指令中加上 -s 選項。
要使用 ftp 傳輸檔案,必須先啟動 inetd 和 ftpd。
Linux: 如果其中一台 PC 跑的是 Linux,則指令會有些不同 (只有在 Linux 機器上)。如果 Linux 機器的位址是 192.168.1.2,則需要以下指令:
# slattach -p slip -s 115200 /dev/ttyS0 & # ifconfig sl0 192.168.1.2 pointopoint 192.168.1.1 up # route add 192.168.1.1 dev sl0別忘了要加上 "&"。
NetBSD 和 Windows NT 經由序列 null modem 纜線做網路連線也是相當容易的。基本上需要做的事是,在 Windows NT 下建立"遠端存取"連線並在 NetBSD 上啟動 pppd。
在成為 root 後,在 /root 目錄中建立 .ppprc 檔並啟動 pppd 參考以下範例。
connect '/usr/sbin/chat -v CLIENT CLIENTSERVER'
local
tty00
115200
crtscts
lock
noauth
nodefaultroute
:192.168.1.2
第一行的意思將在稍後解釋;192.168.1.2 是被 NetBSD 指派 到 Windows NT 主機的位址;tty00 是 用作連線的序列埠(第一序列埠)。
在 NT 上,null modem 必須從控制台 (數據機圖示)中安裝而使用這個 modem 的 Remote Access 連線必須建立。在 Windows NT 4 底下 null modem driver 是 標準配備,但它並不是 100% 的 null modem:當連線建立時, NT 會傳送字串 CLIENT 並期望接收到 CLIENTSERVER。這便是 .ppprc 中第一行的意義: 當連線建立時,chat 必須回答 NT, 否則連線將中斷。
在遠端存取連線的設定中,必須指明以下設定: 使用 null modem,電話號碼 "1"(雖然不被使用), PPP 伺服器,並只打開 TCP/IP 協定,使用的 IP 位址和 namservers(此例中為 NetBSD)。選擇硬體控制流量並設定為 115200 8N1。
現在一切就緒,準備連線。
使用 null modem 纜線連接兩台機器的序列埠。
在 NetBSD 中執行 pppd。 要查看 pppd 的訊息: tail -f /var/log/messages。
在 Windows NT 中建立遠端存取連線。
Windows 95 的設定和 Windows NT 相似:Windows 95 使用遠端存取 而 NetBSD 使用 PPP server。大部分(如果不是全部) Windows 95 的版本都沒有null modem 驅動程式,這將會使事情較為複雜。最簡單的解決方案是,從 Internet 搜尋一個有效的 null modem 驅動程式 (它是個小 .INF 檔) 並重複和 Windows NT 一樣 相同的步驟。唯一的不同是,.ppprc 的第一行 (用來呼叫 chat的) 可以 被移除。
如果你不能替 Windows 95 找到 null modem 驅動程式,我們 仍然可以進行:
建立遠端存取連線,如 Section 9.5.2 所述, 但是要使用"標準的數據機"。
在 .ppprc 中,置換呼叫 chat 的那一行為
connect '/usr/sbin/chat -v ATH OK AT OK ATE0V1 OK AT OK ATDT CONNECT'
建立連線,如Section 9.5.2 所述。
在這個方法中,當連線建立時,chat 會被 呼叫,用來模擬 Windows 95 認為的標準數據機,傳回和 標準數據機一樣的回答給 Windows 95。無論 Windows 95 傳送 什麼字串,chat 都傳回 OK。
我們在網路上可以使用 NFS 來共享檔案和 目錄。從檔案共享的觀點來看,提供檔案和目錄存取的電腦稱之 為 server,而使用這些檔案和目錄的 電腦稱之為 client。一台電腦可同時 成為 client 和 server。
要使用 client 和 server,在編譯核心時必須加入適當的選項 (在核心設定檔中通常很容易發現這些選項)。
server 必需在 /etc/inetd.conf 中 打開它的 RPC 服務。
在 /etc/rc.conf 中,server 必須打開 inetd 和 portmap 常駐程式和 nfs_server 選項。
在 /etc/rc.conf 中,client 必須打開 inetd 和 nfs_client。
server 必須列出開放的目錄在 /etc/exports 中並且執行 kill -HUP `cat /var/run/mountd.pid。
client 主機可以經由 NFS 存取遠端的目錄,如果:
server 主機開放了目錄。
client 主機使用這個指令掛上遠端的目錄 mount server:/xx/yy /mnt
對遠端的目錄而言,mount 指令提供了豐富的 選項以供設定。
警告:我從 NetBSD mailing list 上挑選了較為複雜的範例,而我 還沒有測試過;它應該可以為 NFS 的運作 提供一些意見。
以下的情況為:五台 client 機器 (cli1, ...,cli5) 共享了在 server (buzz.toys.org.) 上的一些目錄。某些 server 上的目錄 只向特定的 client 開放,其他的目錄則開放給所有的 client。 所有的 client 從 server 上開機並且必須掛上目錄。
從 server 上開放的目錄為:
五個 root 目錄分配給五台 client 機器。 每台 client 都有它自己的 root 目錄。
五個 swap 目錄分配給五台 swap 機器。
/usr 目錄被所有的 client 主機共用。
/usr/src 目錄被所有的 client 主機共用。
在 server 上存在以下的檔案系統。
/dev/ra0a on /
/dev/ra0f on /usr
/dev/ra1a on /usr/src
/dev/ra2a on /export
每一台 client 都需要以下的檔案系統。
buzz:/export/cli?/root on /
buzz:/export/common/usr on /usr
buzz:/usr/src on /usr/src
server 的設定像這樣:
# /etc/exports
/usr/src -network 123.45.67.0 -mask 255.255.255.0
/export -alldirs -maproot=root -network 123.45.67.0 -mask 255.255.255.0
在 client 機器上,/etc/fstab 包含
buzz:/export/cli?/root / nfs rw
buzz:/export/common/usr /usr nfs rw,nodev,nosuid
buzz:/usr/src /usr/src rw,nodev,nosuid
每一台 client 機器都有它的號碼,用以取代前例中 首行的 "?" 字元。