Kodama's home / tips.

ネットワ−クの基本設定などを確認(Linux版)

ネットワークの設定,変更などをどこで設定するか. 何を確認するか. (大抵の場合,設定は /etc/init.d, /etc/rc.d などにあるスクリプトなどで行っている.)

関連ファイル

ハード的な認識, ドライバ

NIC のハードウェアを認識し, さらに, ドライバが組み込まれていることを確認. ここまでで, eth0 のようなデバイスが有効になる. (まだ通信はできない)
  1. ハード的に検出可能か?
    カーネルが認識していないカードでも, PCI バスから情報を引き出せる.
    cat /proc/pci, lspci -b, lspci -vv , lspci -b
    lspci -b はカーネルの認識とは独立に, PCI バスから IRQ を調べる.
  2. カーネルがどう認識しているか?
    cat /proc/ioports, cat /proc/interrupts
    $ cat /proc/pci
    ....略
    Bus  1, device   8, function  0:
    Ethernet controller: Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller (rev 66).
    IRQ 11.
    Master Capable.  Latency=66.  Min Gnt=8.Max Lat=56.
    Non-prefetchable 32 bit memory at 0xd0200000 [0xd0200fff].
    I/O at 0x7000 [0x703f].
    
    $ cat /proc/ioports
    ...略
    7000-703f : Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
      7000-703f : eepro100
    
    $ cat /proc/interrupts 
               CPU0       
    ...略
     11:    1243459          XT-PIC  Intel ICH3, usb-uhci, usb-uhci, usb-uhci, i82365, eth0
    ...略
    
  3. ドライバ が組み込まれているか?
    dmesg でドライバの組み込みを確認.
    /var/log/syslog, /var/log/messages なども参考に.
  4. モジュールを, 認識できているか?
    lsmod で使用中のモジュール一覧を見る.
    /lib/modules/(カーネル version)/modules.dep にモジュール一覧がある.
  5. ドライバの起動オプションは正しいか?
    カーネルオプションで ether=0,0,0x30,eth0 とか
    insmod で insmod e1000 TxDescriptors=80,128 のように (man insmod, /etc/modules.conf)
    パラメータを指定することがある.
    カーネルソースの Documentation/kernel-parameters.txt, Documentation/networking/ の文書を読む.
  6. インターフェースが生きているか?
    /sbin/ifconfig eth0 で Device not found, unknown interface にならないこと.

インターフェース

eth0 に IP アドレスを与える. ルーターを越えない隣接ホストには ping -nr (IPアドレス) で通信を確認できるようになる.
  1. インターフェースが生きているか?
    /sbin/ifconfig eth0 で Device not found, unknown interface にならないこと.
  2. IPアドレスなどを設定
    /sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
  3. のエラーが出る場合,
    ハード認識かドライバに問題がある.
  4. インターフェースが正しく設定されているか?
    /sbin/ifconfig
    $ /sbin/ifconfig eth0
    eth0      Link encap:Ethernet  HWaddr 00:01:02:03:04:05  
              inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST NOTRAILERS RUNNING  MTU:1500  Metric:1
              RX packets:600988 errors:0 dropped:0 overruns:0 frame:0
              TX packets:446624 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:100 
              Interrupt:11 Base address:0xd000 
    
  5. パケットが流れているか?
    /sbin/ifconfig の表示の packets の項.
  6. 隣接(ルータを越えない)マシンと通信できるか?
    ping -nr (相手のIPアドレス)
  7. 異常が無いか
    ifconfig, cat /proc/net/dev , netstat -i も用いて, errs(エラー), colls(パケット衝突) など確認.

ルーティング

ネットワークのパケットの送付先などを設定します. ルーターを越えたマシンとパケットをやりとりできるようになります.
  1. ルーティング設定.
    /sbin/route ....
  2. ルーティング確認.
    /sbin/route -n, cat /proc/net/route
    $ /sbin/route   
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
    127.0.0.0       *               255.0.0.0       U     0      0        0 lo
    default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
    
  3. ルーターを越えたマシンと通信できるか?
    ping -n (相手のIPアドレス)
    相手を IP でなく マシン名で指定するには, /etc/hosts か DNS でマシン名参照を可能にする必要がある.
  4. パケットの送付経路は?
    traceroute -n (相手のIPアドレス)
  5. この段階でルーターを越えたマシンとパケットをやりとりできる.

参考:

  1. ルータ,ファイアウォール などでは更に iptables で パケットの送付/受理などに関する設定を行う. (...がここでは省略.)
  2. pingを耳で聞きながら作業できます.
    ping IPアドレス | gawk '{printf "\a"}'

マシン名参照, DNS サーバ

IPアドレスでなく, マシン名を使う事ができるようになります.
  1. 自分自身のマシン名を確認/設定
    /bin/hostname, /bin/domainname コマンドで
  2. 名前の参照方針
    /etc/nsswitch.conf の hosts の項で大まかな参照方法をきめます.
  3. DNS の参照方法を指定.
    /etc/resolv.conf に
  4. /etc/hosts に自分自身が書かれていないと問題がおこる事があります.
  5. DNS 参照ができるか?
    nslookup マシン名, dig マシン名
  6. ここまでで, ping などに IPアドレスでなく マシン名を使う事ができる.

接続の許可/禁止

ネットワークサービスを行うサーバを運用する場合は以下も確認する. 接続の処理の順序を考慮しながら確認してゆく.
  1. 接続要求が(ネットワークから)到達.
    tcpdump, iptraf などで確認
  2. iptables によるパケットフィルタ.
    iptables -L -n などで確認
  3. サーバプロセスがデーモンとして待機している場合(ps aux でデーモンが見える), そこで処理される.
    各サーバの設定ファイル, ログなどを確認.
  4. そうでない場合, inetd が処理.
    /etc/inetd.conf で inetd を介したネットワーク接続の処理方法を決めます. ここで用いる サービス名は /etc/services に書かれています.
    例.
    次は telnet サービスの(ネットワークから自分への)接続要求に対して tcpd が(hosts.allow, hosts.deny で)確認してから, in.telnetd プログラムが対処する事を意味します.
    telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    	  
  5. tcpd が接続アドレスの許可条件などを確認 (/etc/hosts.allow)
  6. tcpd が接続アドレスの禁止条件などを確認 (/etc/hosts.deny)
  7. (上の例では) in.telnetd が実際のサービスを行う.
  8. netstat でソケットの使用状況を確認できる

Kodama's home / tips.