Linux 系統管理入門

来源:百度文库 编辑:神马文学网 时间:2024/05/27 13:01:02
Linux系統管理入門 Part II 網路基本介紹與相關指令
[概論] [設定] [進階設定(Debian)] [網管程式]
Nov/22/2004
蕭志榥
資料提供:黃國連 Blake,Kuo-Lien Huang
 
一、概論
參考資料:www.study-area.net
TCP/IP(DoD)模型
資料來源
應用層(Application Layer) 定義應用程式如何提供服務
傳訊層(Host-to-Host Transport Layer) 負責傳輸過程中的流量控制, 錯誤處理, 資料重送等
網路層(Internet Layer) 決定資料如何傳送到目的地
連結層(Network Access Layer) 負責對硬體的溝通及硬體間的溝通方式
IP位址 長32位元,為方便表達,將此32位元數值切成四段,每連續8個位元一組,改以如下的4個10進位數值表達IP位址 11000000101010000000000000000001 = 192.168.0.1 11000000 10101000 00000000 00000001
192 168 0 1
包含兩項資訊: 網路號碼(network number)與主機號碼(host number) TCP/IP是網路導向的
屬於相同網路的主機,其IP位址的網路號碼也相同,而主機號碼則是該主機在該網路內唯一的編號,同網路的主機間可直接互通,不須藉助第三者,不同網路間主機則須藉助router於網路間遞送封包,而router賴以判斷的路由資訊即是IP位址中的網路號碼。
網路號碼 主機號碼
網路遮罩(Netmask) 為由IP位址濾出網路號碼
該遮罩同樣是32位元數值,根據IP位址的分級,網路遮罩中與網路號碼對應的位元保留為1,主機號碼的位元皆為0,將這樣的遮罩與IP位址進行AND運算的結果即是網路號碼。
次網路遮罩 (Subnet Mask): 取主機號碼中的部份高位元做為次網路號碼位元 解決不同網路類型並存以及長距離或主機數量過多的問題
透過次網路的設置,不同種類的網路即可擁有自己的次網路位址,再透過IP選徑器即可連接這些次網路,而主機數量過多的區域網路也可使用次網路技巧將之打散成數個小網路,以減少主機間封包碰撞頻率過高、導致網路傳輸率下降的問題。
網路號碼 主機號碼
主機號碼 次網路號碼 主機號碼
表示方式 1~32: 32 個 bit 中要用幾個 bit 來代表網路號碼 如同 IP 的表示方法: 將此32位元數值切成四段, 每連續8個位元一組,以4個10進位數值表達 11111111111111111111111100000000 = 255.255.255.0 11111111 11111111 11111111 00000000
255 255 255 0
ipcalc: Parameter calculator for IPv4 addresses # ipcalc 192.168.0.1/24
Address: 192.168.0.1 11000000.10101000.00000000 .00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111 .00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000 .11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000 .00000000 (Class C)
Broadcast: 192.168.0.255 11000000.10101000.00000000 .11111111
HostMin: 192.168.0.1 11000000.10101000.00000000 .00000001
HostMax: 192.168.0.254 11000000.10101000.00000000 .11111110
Hosts/Net: 254 (Private Internet RFC 1918)
IP位址分級 TCP/IP網路依其中所能容納的主機數量多寡分成A、B、C三級, D級目前為multicast位址,E級則保留作為未來發 展之用 A級網路的最高位元值為0
B級網路的為10
C級網路為110
最高三個位元值為111則保留做為其它特殊用途
WHY? 網路分級的原因是考慮到不同規模的網路,因為Internet網路 導向的,當申請一個網路時,申請者須考慮其網路內可能有的主機數目,並申請適當等級的網路,申請超過實際所須的 網路將使得大部份IP位址被閒置,這在目前IP位址短缺的情 況下是不被允許的
在各等級的IP位址中,有兩種特別的位址已保留它用(特殊用途的主機號碼) 主機號碼的位元值皆為0的位址用以表示該網路
主機號碼的位元值皆為1的位址用以表示該網路的廣播位 址 (broadcast address)
以 192.168.0.0/255.255.255.0 為例: 192.168.0.0 代表網路
192.168.0.255 則為 broadcast address
特殊用途的網路號碼 預設路徑(default route): 0.0.0.0 用來簡化IP必須處理的路徑資訊
繞回位址(lookback address): 127.0.0.0 127.0.0.1: 用來表示主機本身
虛擬網路(private address) Class A 10.0.0.0/8
Class B 172.16.0.0/12
Class C 192.168.0.0/16
二、設定
適用於所有的 Linux 套件的設定方式 設定 IP 位址 語法: /sbin/ifconfig [interface] [ipaddress] netmask [netmask] broadcast [broadcast]
# /sbin/ifconfig eth0 140.110.25.72 netmask 255.255.255.0 broadcast 140.110.25.255
ifconfig指令介紹
設定路由表(routing table) 語法: /sbin/route add default gw [gateway_ipaddress]
# /sbin/route add default gw 140.110.25.254
route指令介紹
設定主機名稱 語法: /bin/hostname [hostname]
# /bin/hostname cpc002
顯示 domain 名稱 語法: /bin/dnsdomainname
# /bin/dnsdomainname
nchc.gov.tw
設定名稱伺服器(name server) 編輯 /etc/resolv.conf, 該檔案格式為:
nameserver [nameserver_ip]
search [domain_name] (可不設定)
# vi /etc/resolv.conf
nameserver 140.110.60.1
nameserver 140.110.4.1
search nchc.gov.tw
編輯 /etc/hosts 檔, 該檔案格式為:
[IP_Address] [FQDN] [Aliases] # vi /etc/hosts
140.110.17.49 opensource.nchc.gov.tw opensource os
140.110.25.72 cpc002.nchc.gov.tw cpc002
在Inetnet發展的早期,僅僅使用主機名配置檔案(/etc/hosts)來作主機名/IP之間的映射,這對於互連的電腦較少時十分有效,而隨著相連的電腦的增多,hosts檔案會越來越大,如果用目前Internet上的電腦數量去衡量的話,使用hosts檔案根本不可能。
因此人們發展了一種分級的方式管理名字與IP地址對應關系,稱為域名解析系統。在這個系統中採用一種分級結構,每個組織負責自己的域及通過這個域內的名字伺服器,對域內的電腦名字和IP地址的對應關系進行維護,每個域內還可以劃分為幾個不同的子域,子域由子域內的名字伺服器負責解析,這樣就降低了維護任務的複雜程度。通過標準協議DNS, Internet上所有的名字伺服器可以相互交換數據,這樣每台電腦都能通過查詢名字伺服器來查詢Internet上所有的電腦名字。 Linux上用/etc/resolv.conf檔萊設定該主機要詢問的DNS伺服器
由於可以同時使用/etc/hosts主機檔案和/etc/resolv.conf中配置的DNS伺服器都能進行電腦名字與IP地址之間的轉換,就可以規定查找的順序,在/etc/host.conf檔案中規定了進行名字轉換時查找的順序。
利用 ping 測試網路連線狀況 語法: ping [-c count] [IP_Address] # ping -c 10 140.110.17.254
# ping -c 10 opensource.nchc.gov.tw
# ping -c 10 os
ping 指令介紹
RedHat 使用 RedHat 提供的網路設定工具: netcfg, linuxconfig 編輯兩個設定檔: /etc/sysconfig/ifcfg-ethX, /etc/sysconfig/network 並執行 /etc/init.d/network # vi /etc/sysconfig/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
BROADCAST=140.110.25.255
IPADDR=140.110.25.x
NETMASK=255.255.255.0
NETWORK=140.110.25.x
ONBOOT=yes
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=cpc002
DOMAINNAME=nchc.gov.tw
GATEWAY=140.110.25.254
# vi /etc/sysconfig/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
# vi /etc/sysconfig/network
NETWORKING=yes
# /etc/init.d/network restart
Debian 可以到這裡下載 netcardconfig, 這個工具是 knoppix 發展出來的 (OSTF改成中文) 編輯 /etc/network/interfaces # vi /etc/network/interfaces
auto eth1
iface eth1 inet static
address 140.110.25.72
netmask 255.255.255.0
broadcast 140.110.25.255
gateway 140.110.25.254
# vi /etc/network/interfaces
auto eth1
iface eth1 inet dhcp
# /etc/init.d/networking restart
三、進階設定(Debian)
隨地點改變的IP設定 - DHCP
主機上安裝及設定 DHCP 服務 安裝 dhcp3-server # apt-get install dhcp3-server
編輯設定檔 (/etc/dhcp3/dhcpd.conf) default-lease-time 21600;
max-lease-time 21600;
#use-host-decl-names on;
option subnet-mask 255.255.255.0;
option domain-name "drbl.org";
subnet 192.168.0.0 netmask 255.255.255.0 {
option broadcast-address 192.168.0.255;
option routers 192.168.0.12;
option domain-name-servers 192.168.0.12;
range 192.168.0.100 192.168.0.200;
host cpc001 {
hardware ethernet 44:4d:50:00:01:d8;
fixed-address 192.168.0.201;
}
host cpc002 {
hardware ethernet 00:04:A7:04:03:B1;
fixed-address 192.168.0.202;
}
}
用戶端取得 DHCP 核發的 IP 與相關網路設定 pump 語法: pump -i [interface] # /sbin/pump -i eth0
dhclient 語法: dhclient [interface] # /sbin/dhclient eth0
Note: /etc/dhclient-script
udhcpc 語法: udhcpc -i [interface] -s [script] # udhcpc -i eth0 -s udhcpc.script
udhcp.script 範例(下載) #!/bin/sh
# udhcpc script edited by Tim Riker [ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 RESOLV_CONF="/etc/resolv.conf" [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" [ -n "$subnet" ] && NETMASK="netmask $subnet" case "$1" in deconfig) /sbin/ifconfig $interface 0.0.0.0 ;; renew|bound) /sbin/ifconfig $interface $ip $BROADCAST $NETMASK if [ -n "$router" ] ; then echo "deleting routers" while route del default gw 0.0.0.0 dev $interface ; do : done for i in $router ; do route add default gw $i dev $interface done fi echo -n > $RESOLV_CONF [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF for i in $dns ; do echo adding dns $i echo nameserver $i >> $RESOLV_CONF done ;; esac exit 0
隨地點改變的IP設定 - 搭配 shell script 設定網路 shell script 範例 ping-places.sh(下載) #!/bin/sh
if [ `id -u` -ne 0 -o "$1" = "" ]; then exit 1; fi
if [ -x /usr/bin/fping ]; then
PING="/usr/bin/fping"
else
PING="/bin/ping -c 2"
fi
iface="$1"
which=""
while read addr pingme scheme; do
if [ "$which" ]; then continue; fi
#echo " Trying $addr & $pingme ($scheme)" >&2
#ip addr add $addr dev $iface >/dev/null 2>&1
#ip link set $iface up >/dev/null 2>&1
/sbin/ifconfig $iface $addr netmask 255.255.255.0 up >/dev/null 2>&1
if $PING $pingme >/dev/null 2>&1; then
which="$scheme"
fi
/sbin/ifconfig $iface down >/dev/null 2>&1
#ip link set $iface down >/dev/null 2>&1
#ip addr del $addr dev $iface >/dev/null 2>&1
done
if [ "$which" ]; then echo $which; exit 0; fi
exit 1
編輯檔案 /etc/network/interfaces # The loopback interface
auto lo
iface lo inet loopback
# eth0
auto eth0
mapping eth0
script /etc/network/ping-places.sh
map 192.168.8.12/24 192.168.8.1 home
map 192.168.1.12/24 192.168.1.1 nchc
map 192.168.0.12/24 192.168.0.1 fusan
iface home inet static
address 192.168.8.12
netmask 255.255.255.0
gateway 192.168.8.1
iface nchc inet static
address 192.168.1.12
netmask 255.255.255.0
gateway 192.168.1.1
iface unconn inet dhcp
四、網管程式
/sbin/ifconfig 用來設定網路介面, 並可查詢目前網路介面的設定情形
/sbin/ifconfig [interface]: 顯示 [interface] 的使用狀況, 若[interface]沒寫, 則顯示目前使用中的介面 # /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:10:5A:5C:51:83
inet addr:140.110.17.208 Bcast:140.110.17.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11601497 errors:0 dropped:0 overruns:113 frame:0
TX packets:4411140 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1570462670 (1.4 GiB) TX bytes:3200223909 (2.9 GiB)
Interrupt:9 Base address:0xc400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:684195 errors:0 dropped:0 overruns:0 frame:0
TX packets:684195 errors:0 dropped:0 overruns:0 carrier:0
/sbin/ifconfig -a: 列出所有的網路介面情形 # /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:10:5A:5C:51:83
inet addr:140.110.17.208 Bcast:140.110.17.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11601497 errors:0 dropped:0 overruns:113 frame:0
TX packets:4411140 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1570462670 (1.4 GiB) TX bytes:3200223909 (2.9 GiB)
Interrupt:9 Base address:0xc400
eth1 Link encap:Ethernet HWaddr 00:C0:26:67:C5:FF
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3151438 errors:0 dropped:0 overruns:0 frame:0
TX packets:4477296 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2260946194 (2.1 GiB) TX bytes:372864333 (355.5 MiB)
Interrupt:10 Base address:0x4f00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:684195 errors:0 dropped:0 overruns:0 frame:0
TX packets:684195 errors:0 dropped:0 overruns:0 carrier:0
/sbin/ifconfig [interface] up|down: 啟動或停止網路界面 # /sbin/ifconfig eth0 down
# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
ping: sendto: Network is unreachable
ping: wrote 192.168.1.1 64 chars, ret=-1
ping: sendto: Network is unreachable
ping: wrote 192.168.1.1 64 chars, ret=-1
# /sbin/ifconfig eth0 up
# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=2.7 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.3 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.3 ms
/sbin/ifconfig [interface] inet [ipaddr] netmask [netmask]: 設定網路介面 # /sbin/ifconfig eth0 inet 192.168.1.12 netmask 255.255.255.0
# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:00:E2:54:24:8A
inet addr:192.168.1.12 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15934 errors:0 dropped:0 overruns:0 frame:0
TX packets:6227 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:5320332 (5.0 MiB) TX bytes:643823 (628.7 KiB)
Interrupt:11 Base address:0x2000
Note: inet為inetnet的簡寫,標識IP協議,liux也支持其他幾種協議,如ipx、atalk等, /sbin/ifconfig 指令預設為 inet
一張網路卡設定多個 IP:
# /sbin/ifconfig eth0:1 inet 192.168.0.12 netmask 255.255.255.0
# /sbin/ifconfig eth0:1
eth0:1 Link encap:Ethernet HWaddr 00:00:E2:54:24:8A
inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:11 Base address:0x2000
/sbin/route 顯示及設定路由表
/sbin/route : 顯示目前路由表設定, 若加上 -n 的參數則是不會做 IP 與 Hostname 對應 # /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
140.110.58.0 * 255.255.255.0 U 0 0 0 eth1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
default debian01.local. 0.0.0.0 UG 0 0 0 eth0
# /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
140.110.58.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
/sbin/route add|del default gw [gateway] [dev ifname] # /sbin/route del default gw 192.168.1.1
# /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
# /sbin/route add default gw 192.168.1.1 dev eth1
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
route add|del -net [network] netmask [netmask] dev [ifname]
route add|del -host [host] dev [ifname]
設定路由表 # /sbin/route add -host 192.168.1.3 dev eth0
# /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
140.110.58.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.3 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
# /sbin/route del default gw 192.168.1.1
# /sbin/route del -host 192.168.1.3 dev eth0
# /sbin/route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0
# /sbin/route del -net 140.110.58.0 netmask 255.255.255.0 dev eth1
# /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
# /sbin/route add default gw 192.168.1.1
# /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
# /sbin/route add -net 140.110.58.0 netmask 255.255.255.0 dev eth1
PS: netstate -nr 亦會顯示目前系統的 routing table
/bin/netstat 用來顯示目前本機器所有的網路連線與其狀態
netstat -a [--tcp|--udp|--ip|--raw|--unix]: 列出本機器所有的網路服務連線狀態 # netstat -a --tcp
ctive Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:8000 *:* LISTEN
tcp 0 0 *:32768 *:* LISTEN
tcp 0 0 *:2049 *:* LISTEN
tcp 0 0 *:12865 *:* LISTEN
tcp 0 0 *:cvspserver *:* LISTEN
tcp 0 0 *:printer *:* LISTEN
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:globus-gatekeeper *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 debian01.lo:netbios-ssn *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 *:pop3 *:* LISTEN
tcp 0 0 *:imap2 *:* LISTEN
tcp 0 0 *:911 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:x11 *:* LISTEN
tcp 0 0 *:www *:* LISTEN
tcp 0 0 *:914 *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 debian01.local.o:domain *:* LISTEN
tcp 0 0 os208.nchc.gov.t:domain *:* LISTEN
netstat -i : 列出本機器上所有的網路介面以及其通訊狀況 # netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 11749 0 0 0 3352 0 0 0 BMRU
lo 16436 0 22 0 0 0 22 0 0 0 LRU
netstat --inet | --ip | --tcp | --udp: 列出 Internet 所用的通訊協定(亦即TCP/IP)目前的狀態為何 # netstat --inet
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 os208.nchc.gov.tw:ssh black612.local.os:32902 ESTABLISHED
tcp 0 1 debian01.local.os:58331 192.168.1.99:950 SYN_SENT
tcp 0 0 os208.nchc.gov.tw:58320 clio03.nchc.gov.tw:pop3 TIME_WAIT
netstat -s [--tcp|--udp|--raw]: 列出本機器在 TCP/IP 通訊協定上的統計狀況 # netstat -s --tcp
Tcp:
281675 active connections openings
0 passive connection openings
273953 failed connection attempts
0 connection resets received
4 connections established
2055858 segments received
1748223 segments send out
131515 segments retransmited
6 bad segments received.
963 resets sent
TcpExt:
36 resets received for embryonic SYN_RECV sockets
11 packets pruned from receive queue because of socket buffer overrun
12 ICMP packets dropped because they were out-of-window
3 ICMP packets dropped because socket was locked
ArpFilter: 0
13835 TCP sockets finished time wait in fast timer
1 packets rejects in established connections because of timestamp
16217 delayed acks sent
319 delayed acks further delayed because of locked socket
Quick ack mode was activated 311 times
226003 packets directly queued to recvmsg prequeue.
155812 packets directly received from backlog
9983765 packets directly received from prequeue
1227824 packets header predicted
56266 packets header predicted and directly queued to user
TCPPureAcks: 425235
TCPHPAcks: 206145
TCPRenoRecovery: 2227
TCPSackRecovery: 388
TCPSACKReneging: 0
TCPFACKReorder: 1
TCPSACKReorder: 0
TCPRenoReorder: 3
TCPTSReorder: 5
TCPFullUndo: 5
TCPPartialUndo: 11
TCPDSACKUndo: 3
TCPLossUndo: 163
TCPLoss: 329
TCPLostRetransmit: 3
TCPRenoFailures: 549
TCPSackFailures: 178
TCPLossFailures: 465
TCPFastRetrans: 4423
TCPForwardRetrans: 36
TCPSlowStartRetrans: 4569
TCPTimeouts: 119996
TCPRenoRecoveryFail: 347
TCPSackRecoveryFail: 91
TCPSchedulerFailed: 156
TCPRcvCollapsed: 534
TCPDSACKOldSent: 183
TCPDSACKOfoSent: 4
TCPDSACKRecv: 349
TCPDSACKOfoRecv: 1
TCPAbortOnSyn: 0
TCPAbortOnData: 29
TCPAbortOnClose: 6
TCPAbortOnMemory: 0
TCPAbortOnTimeout: 29
TCPAbortOnLinger: 0
TCPAbortFailed: 0
TCPMemoryPressures: 0
iptraf: Interactive Colorful IP LAN Monitor # apt-get install iptraf
# /usr/sbin/iptraf
/bin/ping 這個指令的用途在於確認網路上的某台機器是否正在網路上運作, 其原理就像潛水艇的聲納系統發出聲波並分析反彈回來的訊號以確定物體位置的方法相同。
ping 程式會丟出 icmp要求回應的封包,並等候對方丟回相對應的icmp封包,計算兩個動作間所耗費的時間,以判斷兩台機器間的「距離」。
# /bin/ping -c 5 opensource.nchc.gov.tw
PING opensource.nchc.gov.tw (140.110.17.49): 56 data bytes
64 bytes from 140.110.17.49: icmp_seq=0 ttl=63 time=0.5 ms
64 bytes from 140.110.17.49: icmp_seq=1 ttl=63 time=0.4 ms
64 bytes from 140.110.17.49: icmp_seq=2 ttl=63 time=0.4 ms
64 bytes from 140.110.17.49: icmp_seq=3 ttl=63 time=0.4 ms
64 bytes from 140.110.17.49: icmp_seq=4 ttl=63 time=0.4 ms
--- opensource.nchc.gov.tw ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.5 ms
# /usr/bin/traceroute tw.yahoo.com
traceroute to tw.yahoo.com (202.1.237.21), 30 hops max, 38 byte packets
1 debian01.local.os208.nchc.gov.tw (192.168.1.1) 0.272 ms 0.185 ms 0.146 ms
2 140.110.17.254 (140.110.17.254) 0.437 ms 0.442 ms 0.356 ms
3 140.110.249.229 (140.110.249.229) 1.093 ms 1.169 ms 1.603 ms
4 140.110.249.246 (140.110.249.246) 0.684 ms 0.713 ms 0.692 ms
5 TANetBackbone-MOE.edu.tw (192.83.196.111) 2.164 ms 4.774 ms 2.227 ms
6 210.242.253.170 (210.242.253.170) 2.349 ms 17.666 ms 2.556 ms
7 tp-twix-r1.router.hinet.net (211.22.35.66) 2.637 ms 2.328 ms 2.217 ms
8 tp-s2-c12r2.router.hinet.net (211.22.35.230) 2.493 ms 2.549 ms 2.254 ms
9 tp-s2-c6r8.router.hinet.net (211.22.35.181) 2.409 ms 2.540 ms 2.044 ms
10 211.22.41.89 (211.22.41.89) 2.804 ms 2.302 ms 2.167 ms
11 alteon5.tpe.yahoo.com (202.1.237.252) 2.992 ms 2.895 ms 2.809 ms
/usr/sbin/bing 測量往路上兩台機器間能用的頻寬為多少, 通常與 traceroute 一起使用
原理: 送多個不同大小的ICMP封包的網路上, 頻寬 = 封包大小差異 / 送到遠端所需時間的差異
(time = transmission delay + propagation delay + queue delay)
bing -e [sample#] -c [cycle#] host1 host2 # /usr/sbin/bing -e 10 -c 1 192.168.1.1 192.168.1.12
BING 192.168.1.1 (192.168.1.1) and 192.168.1.12 (192.168.1.12)
44 and 108 data bytes
1024 bits in 0.000ms
1024 bits in 0.015ms: 68266667bps, 0.000015ms per bit
1024 bits in 0.023ms: 44521739bps, 0.000022ms per bit
1024 bits in 0.024ms: 42666667bps, 0.000023ms per bit
1024 bits in 0.025ms: 40960000bps, 0.000024ms per bit
--- 192.168.1.1 statistics ---
bytes out in dup loss rtt (ms): min avg max
44 10 10 0% 0.071 0.147 0.247
108 10 10 0% 0.069 0.076 0.086
--- 192.168.1.12 statistics ---
bytes out in dup loss rtt (ms): min avg max
44 10 10 0% 0.171 0.187 0.282
108 10 10 0% 0.196 0.198 0.201
--- estimated link characteristics ---
warning: rtt big host1 0.069ms < rtt small host2 0.071ms
estimated throughput 40960000bps
minimum delay per packet 0.083ms (3392 bits)
average statistics (experimental) :
packet loss: small 0%, big 0%, total 0%
warning: rtt big host1 0.076ms < rtt small host2 0.147ms
average throughput 102400000bps
average delay per packet 0.023ms (947 bits)
weighted average throughput 102400000bps
resetting after 10 samples.
其他參考資料
ADSL, PPPoE ADSL(Asymmetric Digital Subscriber Line)簡介 在其頻寬範圍內將線路分成三個頻道: 接收頻道(downstream 1.5Mbps - 6Mbps), 傳送頻道(upstream 640kbps - 1 Mbps), 語音頻道(POTS) 使用 DMT 調變技術 將頻段切成256個各具不同載波信號的子頻道, 再將數位資料用QAM調變方式,分配調變於256個載波子頻道上
每個子通道所佔的頻寬為4KMZ,故ADSL最高傳輸訴率為
(256個通道) * (每個通道4KMZ) * (線路品質最好時用6位元編碼)
256 * 4 * 6 = 6 Mbps
Note: 通常 6 至 31 個子通道用來上傳, 32 至 250 個小通道用來下傳

PPP 簡介 利用串列通訊界面(RS232), 以點對點方式連線遠端主機或網路的一種軟體通訊技術 LCP(Link Control Protocol): 負責建立, 設定及測試點對點連線 NCP(Network Control Protocol): 負責建立及設定在點對對連線上的 網路通訊協定

PPPoE 簡介 在 Ethernet 上建立 PPP Session, 並且包裝 PPP 封包於 Ethernet 封包中 Why? 因為 PPP 有 Authorization 的機制, 透過該機制, ISP 可以進行用互認證, 記錄用戶連線時間, 及取得動態 IP Discovery Stage: 發現對方的 MAC Address, 並且將該 MAC Address 與一個 SESSiOn_ID 對應, 利用 SESSION_ID 管理連線 Session Stage: 傳送 PPP 封包 (當然, PPP封包是包在 Ethernet 封包之中)

設定 # apt-get install pppoe pppoeconf
# pppoeconf
Packet Filtering and Monitoring Reference:
http://www.knowplace.org/netfilter/syntax.html
http://www.knowplace.org/netfilter/ipt_flow_mirror.html
iptables 結構圖 table chain rule
filter INPUT OUTPUT FORWARD
ACCEPT DROP REJECT --reject-with icmp-port-unreachable(default), icmp-net-unreachable, icmp-host-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited
LOG --log-level emerg(0), alert(1), crit(2), err(3), warn(4), notice(5), info(6), debug(7)
--log-prefix "log_prefix" print the quoted string at the start of the log message
--log-ip-options including any IP header options in the log output
--log-tcp-sequence including the TCP packets sequence number in the log output
--log-tcp-options including any TCP header options in the log output
QUEUE RETURN
nat PREROUTING POSTROUTING OUTPUT
SNAT DNAT MASQUERADE REDIRECT
mangle PREROUTING OUTPUT
MARK TOS
封包進入規則表及規則流程圖
Example: 拒絕送到 port 2049, 4045 的 udp 封包 # iptables -A INPUT -i eth0 -p udp -m multiport --destination-port 2049,4045 -j DROP
你也可以使用兩個 rule 來描述上述的一個 rule:
# iptables -A INPUT -i eth0 -p udp --destination-port 2048 -j DROP
# iptables -A INPUT -i eth0 -p udp --destination-port 4045 -j DROP
使用 -m multiport 要注意必須緊接在 -p tcp|udp 之後, 以下兩個例子, 第一個是正確的, 第二個是錯誤的:
# iptables -A INPUT -i -p tcp -m multiport ! --syn --source-port 80,443 -j ACCEPT
# iptables -A INPUT -i -p tcp ! --syn -m multiport --source-port 80,442 -j ACCEPT
A local DNS server operating as a cache-and-forward name server
限定某些使用者(只用於 OUTPUT) # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT --out-interface eth0 -p udp -s [SOURCE_IP] --source-port 53 -d [DESTINATION_IP] --destination-port 53 -m state NEW,RELEATED -j ACCEPT
# iptabls -A OUTPUT -o eth0 -p tcp -s [SOURCE_IP] --sport 1024:65535 -d [DESTINATION_IP] --dport 22 -m owner --uid-owner [UID] --gid-owner [GID] -j ACCEPT
Port Forwarding 改變封包的 IP Header 中的 IP Destination 及 TCP/UDP 中的 Port 號碼 iptables -t nat -A PREROUTING -i incomming_interface -p protocol -d ip_address_of_incomming_interface --dport original_port_number -j DNAT --to destination_ip_address:destination_port_number
將改變的封包送出去 iptables -A FORWARD -i incomming_interface -o outgoing_interface -p protocol -d destination_ip_address --dport destination_port_number -j ACCEPT
Example: 要將送到 192.168.1.1 (eth0) 的 www (port 80) 的封包, 改送到 192.168.2.2 (eth1) 的 port 8888 # /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.1.1 --dport 80 -j DNAT \
--to 192.168.2.2:8888
# /sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.2.2 --dport 8888 -j ACCEPT
Port Forwarding (To "This" Host) 改變封包的 IP Header 中的 IP Destination 及 TCP/UDP 中的 Port 號碼 iptables -t nat -A PREROUTING -i incomming_interface -p protocol -d ip_address_of_incomming_interface --dport original_port_number -j REDIRECT --to-ports destination_port_number
Example: 要將送到 192.168.1.1 (eth0) 的 www (port 80) 的封包, 改送到 192.168.2.2 (eth1) 的 port 8888 # /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.1.1 --dport 80 -j DNAT \
--to 192.168.2.2:8888
# /sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.2.2 --dport 8888 -j ACCEPT
NAT: IP Masquerade 改變封包的 IP Header 中的 IP Source 為對外網卡的 IP iptables -t nat -A POSTROUTING -s inner_net -o outgoing_interface -j MASQUERADE 予許任何 INPUT, FORWARD iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
Example: 要將內部網路 192.168.8.0/24 以 eth0 的 IP 送出 # /sbin/iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE
# /sbin/iptables -P FORWARD ACCEPT
# /sbin/iptables -P INPUT ACCEPT
簡易防火牆設定 outer_nic="eth0"
inner_nic="eth1"
inner_net="192.168.1.0/24"
# clean filter table
iptables -F
iptables -X
# clean mangle table
iptables -F -t mangle
iptables -t mangle -X
# clean nat table
iptables -F -t nat
iptables -t nat -X
#individual port forwarding
iptables -A PREROUTING -t nat -i eth0 -d $inner_net -j DROP
echo "no portfw started"
#forward rules
iptables -t nat -A POSTROUTING -s $inner_net -o $outer_nic -j MASQUERADE
iptables -A FORWARD -i $inner_nic -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#clean up a bad syn which needs a specific rule
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
#clean these up as well
iptables -A FORWARD -m state --state INVALID -j DROP
#Final default policy
iptables -P FORWARD DROP
#iptables -P FORWARD ACCEPT
echo "FORWARD rules now in place"
#INPUT rules
#denied rule
iptables -A INPUT -s 140.110.127.243 -j DROP
iptables -A INPUT -s 140.119.74.54 -j DROP
#general
iptables -A INPUT -i $inner_nic -j ACCEPT
iptables -A INPUT -p tcp --syn --sport 20 -j ACCEPT #ftp-data
iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT #ftp
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT #ssh
iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT #www
iptables -A INPUT -p tcp --syn --dport 443 -j ACCEPT #ssl
iptables -A INPUT -p tcp --syn --dport 1863 -j ACCEPT #msn messagener
# open for specific host
iptables -A INPUT -s 140.110.60.112/32 -j ACCEPT
iptables -A INPUT -s 140.110.58.220/32 -p tcp --syn --dport 25 -j ACCEPT #smtp
iptables -A INPUT -s 140.110.58.220/32 -p tcp --syn --dport 110 -j ACCEPT #pop3
iptables -A INPUT -s 140.110.58.220/32 -p tcp --syn --dport 143 -j ACCEPT #imap2
iptables -A INPUT -s 207.46.104.20/32 -p tcp --syn --dport 1863 -j ACCEPT # msn
iptables -A INPUT -s 140.110.58.220/32 -p tcp --syn --dport 2401 -j ACCEPT #pserver
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $outer_nic -j ACCEPT
#allow ping replies (may not be desired)
iptables -A INPUT -p icmp -s 0/0 --icmp-type echo-request -j ACCEPT
iptables -P INPUT DROP
#iptables -P INPUT ACCEPT
echo "INPUT rules now in place"
#specific defence rules eg DoS attacks
#syn-flood protection
iptables -A FORWARD -p tcp --syn -m limit -j ACCEPT
#furtive port scanner
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit
#ping of death
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit
echo "DoS defences setup"
ICMP(Internet Control Message Protocol)介紹: ICMP封包的結構: 1 2 3 4 5...
Type Code Checksum 根據Type改變
Type/Code的意義: Type Code Function
0/8 0 Echo response/requestping
3 0-15 Destination unreachable network-unreachable host-unreachable protocol-unreachable port-unreachable network-unknown host-unknown network-prohibited host-prohibited ...
4 0 Source quench 當Router可處理的Buffer快滿時, 要求送的機器不要這麼快送來
5 0-3 Redirect 當一個網路上有兩個Router,兩個Router分開兩個不同的網路
11 0-1 TTL exceededtraceroute
12 0-1 Parameter Error 當IP封包有錯誤時
Reference: RFC 792
TTL(Time To Live): 最多可以經過幾個 Routers (之後該封包就無效了, Router收到就會不處理), IP 封包每經過一個 Router, TTL值就會被減去適當的值.
/usr/sbin/tcpdump 收集網路封包 tcpdump -i interface 收集送到 interface 的網路封包
tcpdump -c#_packet 收集最多#_packet個封包
tcpdump -x 輸出結果以16進制表示, 該結果可用 xethereal 來分析
tcpdump host [ip_address] 收集所有送到 [ip_address] 或者是 [ip_address] 送出的封包
tcpdump dst [ip_address] 收集所有送到 [ip_address] 的封包
tcpdump src [ip_address] 收集所有 [ip_address] 送出的封包
tcpdump port [port_number] 收集所有送到 port_number 的封包
Example: 收集 100 個在 eth0 上所有送到 192.168.8.1 的 port 68 及 port 69 的封包, 並以16進制輸出 (觀察 192.168.8.1 上的 dhcpd 的運作情況) # /usr/sbin/tcpdump -c100 -i eth0 host 192.168.8.1 and port 68 or port 69
nmap ntop
五、SNMP
原理
SNMP的網管架構基於三個主要的元件, 這些元件分別伴演不同的角色, 透過這些角色之間的資料傳遞, 就可以讓我們瞭解目前網路環境與狀態

資料來源 管理者(Manager) 進行網路管理的程式, 管理者(Manager)透過SNMP向代理者(Agent)查詢所需要的資訊, 包括網路設備的運作狀態, 系統的配置情況等; 管理者在收到這些資料後, 就可以進行統計及分析的處理, 再整理出圖表讓使用者瀏覽
管理者(Manager)除了主動送出SNMP向代理者(Agent)查詢所需要資訊外, 亦可接收代理者(Agent)所發出的TRAP訊號, 做為特殊狀況處理用
常見的工具程式有:NET-SNMP, MRTG, NTOP 等
代理者(Agent) 在網路設備中預存在設備中的程式, 可以穫得本身設備的狀態, 而這些資訊可以提供管理者(Manager)查詢所需;
代理者(Agent)所扮演的角色是管理者(Manager)與管理資料庫(MIB)間的傳訊角色, 負責由管理資料庫(MIB)中將資料回覆給管理者(Manager)
若是您裝了個 Linux Box, 需要 SNMP Agent 的服務, 您可以裝NET-SNMP
MIB(Management Information Base) 由許多不同資料所組成的虛擬資料庫; 該虛擬資料庫的查詢方式是 KEY=VALUE 的特性, 也就是說一個 KEY 會對應一個值;
KEY 的規劃則是 MIB 的另一個重點, KEY 是利用 SMI (Structure of Management Information), ANS.1 (Abstract Syntax Notation One) 及 BER (Basic Encoding Rule) 定義出來, 為一個樹狀的結構; 該樹狀結構的葉子(lief)部份即為可供查詢的 OID(Object Identifies), 也就是前面所提的 KEY; 樹狀結構中的支點(node), 稱為 SNMP Group
以下介紹幾個常用的 SNMP Group:
.1.3.6.1.2.1 (.iso.org.dod.internet.mgmt.mib-2) 這個 SNMP Groups 定義了網路設備的基本狀態, 其中包含了 10 個 SNMP Groups (MIB I 定義了 8 個, MIB II 中加了 2 個) system(1): 與系統相關的資訊 interfaces(2): 可送出/接收IP資料封包的網路介面卡數目 at(3): 網路位址與實際位址的轉換表 ip(4): IP路由與資料封包的統計 icmp(5): ICMP I/O 統計 tcp(6): TCP 連結參數和資料封包的統計 udp(7): UDP 傳輸統計及資料封包傳遞問題 egp(8): EGP 的傳輸設定與狀態 transmission: 傳輸媒體資料 snmp: 與 snmp 相關的物件
.1.3.6.1.4.1 (.iso.org.dod.internet.private.enterprise) 讓各個網路設備的廠商自行加入OID的SNMP Group, 以 Cisco 為例, 它在此建立了一個 SNMP Group .1.3.6.1.4.1.9 (參考資料),NET-SNMP在此也建立了一個 SNMP Group .1.3.6.1.4.1.2021
當然, 要瞭解各廠商建立的 SNMP Group 及 OID, 最好的方法就是找設備廠商查詢, 以 Cisco 及 Juniper 為例, 您可以在他們的網頁上輸入設備型號, OID, MIB 等關鍵字, 就能查詢到相關的資訊了
以下是 MIB 的參考資料
NET-SNMP (www.net-snmp.org)
NET-SNMP 最早稱之為 UCD-SNMP, 是由 The University of California at Davis 發展出來的 SNMP 工具集, 其中包含了 SNMP 的三個主要元件 (Manager, Agent 及 MIB), 在 Debian 中您只需要下達 apt-get install snmp snmpd 即可
# apt-get install snmp snmpd
以下介紹如何設定與使用 NET-SNMP
設定 NET-SNMP Agent 其實 Debian 上安裝 net-snmp 後的預設設定已經可以跑起一個能查詢 .1.3.6.1.2.1.1 的 SNMP Agent, 若您需要透過 SNMP 查詢進一步的資料, 您只需要設定好 /etc/snmp/snmpd.conf 中的 ACL (Access Control List)即可, 以下的設定, 設定了三個 ACL, 分別給與不同的權限:
在本機(localhost)上, 可透過 SNMP 讀寫 MIB 的 OID 值 在本機所管理的虛擬網路(192.168.1.0/24)中, 可透過 SNMP 查詢所有 MIB 中的 OID 值 其它則可透過 SNMP 查詢 .1.3.6.1.2.1.1 (與系統相關的資料)的 OID 值
# sec.name source community
com2sec local localhost private
com2sec mynet 192.168.1.0/24 public
com2sec public default public
####
# Second, map the security names into group names:
# sec.model sec.name
group MyROSystem v1 public
group MyROSystem v2c public
group MyROSystem usm public
group MyROGroup v1 mynet
group MyROGroup v2c mynet
group MyROGroup usm mynet
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
####
# Third, create a view for us to let the groups have rights to:
# incl/excl subtree mask
view all included .1 80
view system included .iso.org.dod.internet.mgmt.mib-2.system
####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:
# context sec.model sec.level match read write notif
access MyROSystem "" any noauth exact system none none
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
另外, 您也可以在 /etc/snmp/snmpd.conf 中加入一些新的 OID 做為您額外要查詢的資料之用, 以下的例子是在 .1.3.6.1.4.1.2021.50 中加入 date 的查詢, 在 .1.3.6.1.4.1.2021.51 中加入 ps 的查詢:
exec .1.3.6.1.4.1.2021.50 /bin/date -j -u
exec .1.3.6.1.4.1.2021.51 /bin/ps
使用 NET-SNMP 指令進行 SNMP 管理 snmpget snmpgetnext snmpwalk snmptable snmpset snmptranslate snmpnetstat
MRTG(www.mrtg.org) MRTG會利用 SNMP 向網路設備或是主機系統查詢, 然後將回傳的資料製成統計圖表, 除此之外, 亦可配合相關程式的撰寫, 統計其它的系統資訊, 在此我們只討論透過 SNMP 取得資訊的部份
在 Debian 下安裝 MRTG, 只需要 apt-get install mrtg mrtg-contrib 即可
# apt-get install snmp snmpd
接著您可以透過 cfgmaker 及 indexmaker 這兩個工具來設定 MRTG, 以下介紹要透過 SNMP 向 192.168.1.50 上的無線網路基地台查詢相關資料的設定方法
# cfgmaker public@192.168.1.50 --output=/etc/mrtg.cfg
# vi /etc/mrtg.cfg
# mrtg /etc/mrtg.cfg
# mrtg /etc/mrtg.cfg
# mrtg /etc/mrtg.cfg
cfgmaker 只是透過 snmpwalk 向 192.168.1.50 取得可透過 SNMP 得到的資訊, 您要自行去編輯 /etc/mrtg.cfg 將您想要觀察的項目的註解取消, 最後執行 3 次 mrtg /etc/mrtg.cfg 就大工告成了
若是在您的 Linux Box 上裝了 net-snmp 的 SNMP Agent, 想利用 MRTG 透過 SNMP 查詢您電腦的狀況, www.mrtg.org 提供了數個範例
六、NFS/NIS
RPC(Remote Procedure Call)
由於NIS與NFS乃是以RPC為基礎的網路服務. 在正式進行NIS和NFS兩項網路服務介紹之前,我們必須先介紹RPC的基本概念,
RPC是遠端程序呼叫(RPC:Remote Procedure Calls)的縮寫, 是撰寫網路應用程式常用的方法,我們需要 RPC 的原因,主要是因為使用 Socket撰寫網路應用程式時, 必須考慮通訊的所有細節,例如資料型式和資料結構的轉換,連線的管理等等. 試想如果我們能把這些細節簡化,則程式設計者可以把時間轉移至更重要的應用需求開發.其架構如下圖
RPC最早是由Sun提出的標準,我們常聽到的DCOM和CORBA就是類似這種概念. 當程式需要遠端程序提供某種服務時,RPC服務通常是呼叫Server上的某個程式幫我們處理一些資料, 處理完後再把處理結果送回給我們.
開啟 RPC 的服務 (portmap) # /etc/init.d/portmap start
查詢目前有那些程式使用 RPC # rpcinfo -p localhost
NIS(Network Information Service)
因為 Linux 是個多人多工的環境, 所以帳號及群組的管理是非常重要的一個問題; 當我們在負責管理一個網路環境時,我們首先會遇到的一個困難就是—如何維護一份共通的資料,像是密碼檔,群組等. 這些在每台主機上都存在,並且在我們所負責管理的網路環境中的每台電腦應該都是一樣的. 如此一來,我們的使用者便不需要擔心在哪一台機器上他有帳號可以登入,哪台機器他沒有帳號所以不能登入; 在這裡我們所謂的『維護一份共通的資料』是指只要在任何一台我們的機器上所作的改變能夠被傳送到其他台機器, 使得所有的機器上帳號的資訊都能夠一致. 例如,我們若我們今天想要新增加一位使用者的帳號, 我們只要在一台電腦上新增帳號,就能讓這位使用者在每台機器上都擁有帳號一般.
NIS是建構在”主—從架構”上, 由NIS server提供服務給NIS clients。 一般而言,NIS server 可以不只一台,這是為了怕萬一其中一台出問題時,還有其他台可以接手,繼續提供服務給使用者。 所謂的 NIS server 是指一台包含有 NIS data 和 maps 的主機。 而 client 則是向 NIS server 要求這些資料,當 NIS server 收到來自 client 端的請求時, 會傳送資料給 NIS client。
NIS server中,又分為master server和slave server兩種。 NIS master server上所包含的資料,我們視為最具有”權威”的資料。 它們通常都會有備份,NIS slave server可視為它們的備份。 當NIS master server上有資料被更新時,它會將自己變更的資料PUSH到所有NIS slave server上。 NIS slave server並不會自己變更任何資料,變更資料的只有NIS master server。這樣一來,只要在NIS master server上變更資料,NIS slave server便會知道, 而所有的NIS client在請求資料時,所拿到的就會是正確的資訊了。
NIS是利用認 NIS domain 的方式來管理屬於這個 domain 這些機器、使用者、群組。但是,在這裡的這個domain和我們一般所提到的domain有一些出入。 這個NIS domain的名稱,是包含我們所負責的所有機器,並且這個NIS domain的名稱可以是任意的名稱。 NIS Domain涵蓋的範圍,可以是任意IP的集合,並不侷限於Subnet或DNS Domain的限制.
啟動 NIS 服務 NIS Server # apt-get install nis
# vi /etc/default/nis
# vi /etc/yp.conf
# vi /etc/ypserv.securenets
# /usr/lib/yp/ypinit -m
# cd /var/yp; make
# /etc/init.d/nis restart
NIS Client # apt-get install nis
# vi /etc/yp.conf
# vi /etc/passwd
# vi /etc/shadow
# vi /etc/group
# /etc/init.d/nis restart
NIS 管理工具 ypcat: 查詢 NIS Server 分享出來的資料(passwd, group, services, protocols ...) ypwhich: 顯示目前 binding 的 NIS Server ypset: 設定使用那台 NIS Server
NFS(Network File Service)
所謂的Network File System指的是指一個可以提供存取遠方磁碟的檔案系統。 和Network Information Service (NIS)相比較可以發現,NIS所提供的是集中管理我們網域中使用者和主機的資訊, 而Network File System (NFS)則是集中的管理磁碟。利用NFS可以使我們不必複製相同的檔案到每一台主機上, 例如使用者的Mail Spool檔案,同時可能被使用者從Telnet Server進入讀信或管理信件,同時亦可能被Mail Server增加新進的信件,我們為了要使不同機器上能夠對檔案做同步和集中管理的動作, 因此必須使用NFS來達成這樣的目的。
對使用者而言,NFS提供了使用者存取遠方的檔案但【不必】登入對方的主機。使用者在使用這些檔案時也無須把檔案拷貝至本地端的電腦。只要NFS被設定好,我們將能夠在本地端的電腦完成所有的工作,使用者將完全感覺不到有使用到遠方的檔案系統, 所有的檔案感覺都像是【本地端】的。
啟動 NFS 服務 NFS Server # apt-get install nfs-user-server (nfs-kernel-server)
# vi /etc/exports
# /etc/init.d/nfs-user-server restart
NFS Client # mount -t nfs -o rw,intr,soft,bg [NFS_SERVER_IP]:[EXPORTS_FS] [MOUNT_POINT]
or # vi /etc/fstab
or use automounter utilities (eg. amd)
# apt-get install am-utils # ln -s /net/[NFS_SERVER_IP]/[MOUNT_POINT] [LINK_NAME]
七、專題
PenguinZilla (無磁碟遠端開機) 開機程序
Etherboot/PXE 下載 kernel 及 initrd
Initial Ram Disk 載入網路卡所需要的模組, 利用 dhcp 取得設定, 透過 NFS 掛載所需要的根目錄
/sbin/init 透過 NFS 掛載 /etc, /var 等設定 client 的目錄
利用 SSH 及 PPP 架設 VPN Establishing Passwordless SSH Login 在 VPN Client 及 VPN Server 上都建立一個使用者 sshvpn, 在 VPN Client 中產生 ssh key (ssh-keygen -t rsa|dsa -N ‘‘), 將 key 覆製到 VPN Server 的 sshvpn 家目錄下的 .ssh 中, 改名為 authorized_keys (or authorized_keys2)
Setup sudo Cmnd_Alias VPN=/usr/sbin/pppd
sshvpn ALL=NOPASSWD: VPN
Establishing PPP Connection % sudo /usr/sbin/pppd updetach noauth pty "sudo -u sshvpn ssh -t -t [VPN_SERVER] sudo /usr/sbin/pppd noauth 192.168.254.254:192.168.254.253"
Adjust the Routing Table % sudo route add -net 192.168.1.0/24 gw 192.168.254.254
% sudo route add -net 192.168.2.0/24 gw 192.168.254.253
from: http://opensource.nchc.org.tw/intro_to_linux/part2/class/