分享

Linux 系統管理入門

 农夫子oice 2007-05-02


一、概論
  • 參考資料: www.
  • TCP/IP(DoD)模型

    資料來源
    1. 應用層(Application Layer)
      定義應用程式如何提供服務

    2. 傳訊層(Host-to-Host Transport Layer)
      負責傳輸過程中的流量控制, 錯誤處理, 資料重送等

    3. 網路層(Internet Layer)
      決定資料如何傳送到目的地

    4. 連結層(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. 1~32: 32 個 bit 中要用幾個 bit 來代表網路號碼
      2. 如同 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

    • 設定名稱伺服器(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

      編輯 /etc/hosts 檔, 該檔案格式為:
      [IP_Address] [FQDN] [Aliases]
      # vi /etc/hosts

      140.110.17.49 opensource. opensource os
      140.110.25.72 cpc002. 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.
      # ping -c 10 os

      ping 指令介紹

  • RedHat
    1. 使用 RedHat 提供的網路設定工具: netcfg, linuxconfig
    2. 編輯兩個設定檔: /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=
      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
    1. 可以到這裡下載 netcardconfig, 這個工具是 knoppix 發展出來的 (OSTF改成中文)
    2. 編輯 /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

    1. 主機上安裝及設定 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;
        }

        }

    2. 用戶端取得 DHCP 核發的 IP 與相關網路設定
      1. pump
        語法: pump -i [interface]
        # /sbin/pump -i eth0

      2. dhclient
        語法: dhclient [interface]
        # /sbin/dhclient eth0
        Note: /etc/dhclient-script

      3. 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


四、網管程式
  1. /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

  2. /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

  3. /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.:ssh black612.local.os:32902 ESTABLISHED
    tcp 0 1 debian01.local.os:58331 192.168.1.99:950 SYN_SENT
    tcp 0 0 os208.:58320 clio03.: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


  4. iptraf: Interactive Colorful IP LAN Monitor
    # apt-get install iptraf
    # /usr/sbin/iptraf
  5. /bin/ping
    • 這個指令的用途在於確認網路上的某台機器是否正在網路上運作, 其原理就像潛水艇的聲納系統發出聲波並分析反彈回來的訊號以確定物體位置的方法相同。

    • ping 程式會丟出 icmp要求回應的封包,並等候對方丟回相對應的icmp封包,計算兩個動作間所耗費的時間,以判斷兩台機器間的「距離」。

    # /bin/ping -c 5 opensource.
    PING opensource. (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. ping statistics ---
    5 packets transmitted, 5 packets received, 0% packet loss
    round-trip min/avg/max = 0.4/0.4/0.5 ms

  6. /usr/bin/traceroute
    這個指令是用來將兩台機器間的路徑及延遲的時間顯示出來,就好像你把從家裡到辦公室的路徑畫在地圖上是一樣的意義
    # /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. (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

  7. /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.

其他參考資料
  1. 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

  2. Packet Filtering and Monitoring
    Reference:
    http://www./netfilter/syntax.html
    http://www./netfilter/ipt_flow_mirror.html

    • iptables 結構圖
      table chain rule
      filter
      • INPUT
      • OUTPUT
      • FORWARD
      • ACCEPT
      • DROP
      • REJECT
        --reject-with <ICMP type 3> icmp-port-unreachable(default), icmp-net-unreachable, icmp-host-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited
      • LOG
        --log-level <syslog 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:
      1. 拒絕送到 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 <interface> -p tcp -m multiport ! --syn --source-port 80,443 -j ACCEPT
        # iptables -A INPUT -i <interface> -p tcp ! --syn -m multiport --source-port 80,442 -j ACCEPT

      2. A local DNS server operating as a cache-and-forward name server

      3. 限定某些使用者(只用於 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
      1. 改變封包的 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

      2. 將改變的封包送出去
        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)
      1. 改變封包的 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
      1. 改變封包的 IP Header 中的 IP Source 為對外網卡的 IP
        iptables -t nat -A POSTROUTING -s inner_net -o outgoing_interface -j MASQUERADE
      2. 予許任何 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/request ping
    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 exceeded traceroute
    12 0-1 Parameter Error 當IP封包有錯誤時

    Reference: RFC 792

  • TTL(Time To Live): 最多可以經過幾個 Routers (之後該封包就無效了, Router收到就會不處理), IP 封包每經過一個 Router, TTL值就會被減去適當的值.
  1. /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

  2. nmap
  3. ntop

五、SNMP
  1. 原理

    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 的參考資料
  2. NET-SNMP (www.)

    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, 分別給與不同的權限:
      1. 在本機(localhost)上, 可透過 SNMP 讀寫 MIB 的 OID 值
      2. 在本機所管理的虛擬網路(192.168.1.0/24)中, 可透過 SNMP 查詢所有 MIB 中的 OID 值
      3. 其它則可透過 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

  3. MRTG(www.)
    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. 提供了數個範例


六、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
    1. 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)
    2. Setup sudo
      Cmnd_Alias VPN=/usr/sbin/pppd
      sshvpn ALL=NOPASSWD: VPN

    3. 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"
    4. 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多