概要
ここではTCP/IPネットワークへ接続する為の基本的な設定方法を解説します。RedHatLinux7.2ベースですが、それ以前のバージョンやTurboLinuxではほぼ同じ内容で大丈夫だと思います。
※もしかしたらファイルの位置などは違うかもしれません。
なお、ハードウエアデバイスの設定に関しては省いています。
IPネットワークの基礎
ここではIP(インターネットプロトコル)ネットワークの基本的な部分を開設します。
プロトコルとOSIの7階層
プロトコルとはよく「通信規約」と訳されますが、いわゆる2点間の通信をお互いが理解しえるようにする為のルールだと思ってください。たとえば、米国人が米国語で喋って、日本人が日本語で返事するるという状況ではお互いのコミュニケーションが取れないため、お互いの言葉を統一することによりコミュニケーションが取れるようにするというルールのようなものです。
OSIの7階層というのは、そのネットワークプロトコルのガイドラインのようなものです。全ての通信ソフトに通信デバイスの制御や、パケットの組み立てなどをやらせてしまうと、プログラマーは大変です。ですので、デバイスドライバのようなものを介在させることにより、アプリケーションの開発を楽にさせたりと言うのが重要です。ネットワークカードが何をするか、ドライバが何をするかというのを決めなければならないですが、そういう仲介役同士をどのように分けるかというガイドラインを示したものがOSIの7階層モデルと言うものです。
- 応用(アプリケーション)層
- プレゼンテーション層
- セッション層
- トランスポート層
- ネットワーク層
- データリンク層
- 物理層
各層の役割をさらに知りたい人はそれなりの専門書を読んでください。簡単に説明すると、いわゆるアプリケーションプログラマは通信ソフトを作るときに、アプリケーション層との通信をコーディングするだけでOKです。細かいデバイスの電気信号の制御は物理層がやってくれますし、遠いところへ通信する際のルーティングの制御はネットワーク層がやってくれます。
このように開発の負荷を軽減したり、開発者の違いによる実装の差を減らしたりすることが可能となります。
IPネットワークのプロトコル
IPネットワークはOSIの7階層のようには分かれていません。だいたい5階層くらいに分かれています。
まず、プログラマが意識しなければならない応用(アプリケーション)層には、Webサイトを見る為のHTTPやメールの送受信の為のSMTP等があります。
パケットのコントロールをする為のトランスポート層でTCPやUDPと言ったプロトコルが使用されています。
さらにルーティング制御等のネットワーク層がIPです。
さらにその下の階層では、PPPなどのデータリンク層があったり、モデムなどの機器が物理層となるわけです。
よく、インターネットに使用されるプロトコルのことを「TCP/IP」と言いますが、これは「TCP」と「IP」という2階層のプロトコルを表しており、実際にはインターネットで使用されるプロトコルは「IP」が基本にあり、その上で「TCP」「UDP」等のプロトコルが使用されます。また、インターネットでは「IP」プロトコルだけではなく、ping等に使用される「ICMP」等もあります(他にもあるけど以下略)。
※「IP」の「P」は「プロトコル」の略なので「IPプロトコル」って書き方はおかしい気がするけど、気にしない。
パケットとIP
パケットは直訳で「小包」という意味ですが、ネットワークの世界では一つの通信データを示します。ネットワークでの通信中は常に1ビットづつ送受信している訳ではなく、「パケット」と呼ばれるデータの固まりを送受信してるます。通信データは、あるサイズの「パケット」に分割され、受信側で再度組み立てられます。その為、パケットにはデータだけではなく、組み立ての順序や送信元/先の情報などが「パケットのヘッダー」に蓄えられています。
パケットの構造には当然ルールが必要ですが、そのルールと言えるものが「プロトコル」です。IP(インターネットプロトコル)はインターネットのデータ通信の基本とも言えるプロトコルです。
主な役割はIPアドレスの伝送制御で、IPヘッダには送信元のIPアドレスと送信先のIPアドレスが記述されています。
よく、「httpはtcpポート80番」とか言われますが、IPヘッダにはそう言った情報は含まれず、IPのデータ部(にあるtcpの情報の中)にあります。
TCP/UDP
TCP(Transmission Control Protocol)と、UDP(User Datagram Protocol)は、実際にアプリケーション同士の通信制御に使用されます。
ヘッダー部にはよく言われる「http」や「ftp」等のルール化された通信ポートの情報や、パケットの順序を示すシーケンス番号、セッションの状態(通信開始、通信中、通信終了のような物)を示す情報など、非常に多彩な情報を格納しています。なお、送信先のIPアドレス等はIPヘッダに含まれる為、ここにはありません。
TCPとUDPは同じ層のプロトコルですが、幾つかの違いがあります。
TCPはデータが送信された際にその応答がなされる為、信頼性の高い通信を行いますが、その分通信速度に難があります。UDPはセッション後一方的にデータを送るので、データが相手側に到着したがどうかの確認がワンセッションで出来ませんが、その分高速です。
UDPは主にFTPのデータグラム(データの受信用のセッション)や、NetBios(SAMBAやWindowsのファイル共有)のデータグラムなどの多量のデータ転送や、DNS(UDP53番)等に用いられます。
ICMP
ICMP(Internet Control Message Protocol)は、もっとも有名な使われ方は「ping」や「tracert(Traceroute)」だと思います。
※Windows版の「tracert」コマンドがICMPを使います。UNIXの「traceroute」は主にUDPを使用。
このプロトコルはデータ転送が主たる目的ではなく、通信が目的地まで到達するかの確認などが主な目的です。
ICMPは軽視されがちですが、セキュリティの保持という側面では重要なプロトコルです。
ICMPにはTCPやUDPのような「ポート番号」はありませんが、「ICMP type」という番号があり、どの番号をパケットが所持しているかによって、その種類が決定します。
ICMP type | 種類 |
---|---|
0 | エコー応答 |
3 | 終点到達不能通知 |
4 | 送出抑制要求 |
5 | 経路変更要求 |
8 | エコー要求 |
11 | 時間切れ通知 |
12 | 不正パラメータ通知 |
13 | 時刻要求 |
14 | 時刻応答 |
17 | アドレスマスク要求 |
18 | アドレスマスク応答 |
たとえば、pingを打った場合、送信元はICMP:8(エコー要求)を送信し、受信側がICMP:0(エコー応答)を返します。Firewall等で「Reject(拒否)」された場合はICMP:3(終点到達不能通知)が返され、pingが届かない時やFirewall等で「Drop(無視)」された場合は何の応答もありません。
ちなみに、「Reject(拒否)/ICMP:3」の送信元を調べることにより、Firewallで遮断されているのか、サーバで拒否してるのかを調べることも出来る為、インターネット側の通信遮断は「Drop(無視)」のルールを適用した方が、不正アクセス者に余計な情報を与えないので好都合です。じゃあ全ての通信遮断を「Drop(無視)」にすればよいかというとそうでもなく、「Drop(無視)」された場合は応答が無いので、ping等はタイムアウトまで待たなければならないので応答が非常に遅くなるのと、回線断との見分けがつかないのでメンテナンス性に問題が生じます。その為、LAN等での通信遮断は「Reject(拒否)」の方がいいでしょう。
※ping(ICMP)で「Reject(拒否)」された場合は、非常に応答の早いエラーが帰ってくるので、すぐにわかります。「Drop(無視)」された場合は、タイムアウト(通常のpingでは1秒)までの遅延が発生します。
ICMPにはエコー以外にも、時刻関連とアドレスマスク関連がありますが、これらの情報もそれなりのツールを使えば読み出すことが出来ます。
# ./icmpquery -t 192.168.1.xxx
192.168.1.245 : Sat Aug 10 22:20:46 2002
普通、時間やアドレスマスク等の情報は公開しても無意味なので、遮断した方がいいでしょう。
設定ファイル解説
ここでは各設定ファイルのサンプルとその意味を解説します。
※位置や内容はOSやディストリビューションによって違うかもしれないので注意してください。ここの内容は主にRedHat系の設定です。
/etc/modules.conf
この設定はどちらかと言うとデバイスの設定ですが、たとえばインストーラの自動認識でeth0とeth1が逆転してしまった場合、これを書き換えることで直すことが出来ます(そのときは当然、ゲートウエイなどの関連設定もなおす)。
alias eth0 ne2k-pci
alias eth1 8139too
/etc/sysconfig/network-scripts/ifcfg-eth0
各インターフェースの設定です。
ファイル名はインターフェース毎に違うので、注意する(ifcfg-pppとか)。
- DHCPを使用する場合
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
- DHCPを使用しない場合
DEVICE=eth0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
BOOTPROTO=none
ONBOOT=yes
- DEVICE
- デバイス名
- IPADDR
- そのデバイスのIPアドレス
- NETMASK
- サブネット用のネットマスク
- NETWORK
- ネットワークアドレス
- BROADCAST
- ブロードキャストアドレス
- BOOTPROTO
- DHCPやBOOTPを使うときはこれを指定する。
- ONBOOT
- OSを起動するときにインターフェースも起動するならyesにする。
/etc/sysconfig/network
もっとも基本となる設定ファイルです。
ネットワークインターフェースが複数ある場合でも、全てのインターフェースがまずこれを参照します。
NETWORKING=yes
HOSTNAME=localhost.localdomain
DOMAINNAME=localdomain
FORWARD_IPV4=no
GATEWAYDEV=eth0
GATEWAY=192.168.0.1
- HOSTNAME
- ホストのフルネーム(FQDN)です。
- DOMAINNAME
- ドメイン名です。
- FORWARD_IPV4
- NATやIPマスカレードを使用する場合はyesにします(別途、ipchainsやiptablesなどの設定が必要)。
- GATEWAYDEV
- ゲートウエイデバイスです。
- GATEWAY
- ゲートウエイのIPアドレスです。
/etc/resolv.conf(2002/02/04)
レゾルバ(DNSのクライアント側)の設定。DNSサーバのIPアドレスを指定してやればいい。通常、プライマリとセカンダリがあるので、複数行になる。
nameserver 203.165.xxx.xxx
nameserver 203.165.yyy.yyy
/etc/hosts
hostsファイル(DNSを使わないで名前解決する為のファイル)の設定。
127.0.0.1 localhost.localdomain localhost
192.168.1.1 server.localdomain server
必要に応じて上記のように列挙する(間はスペースやタブで大丈夫)。DNSの応答が遅いときなどにも使える。
/etc/host.conf
名前解決に関する設定。
order hosts,bind
multi on
- order
- 名前解決時の参照順序。上記の例では「hosts→DNS(resolv.confに書いてある)」の順に参照する。
:multi:自サーバに複数のIPがある場合、onだと全てのIPを返し、offは初めに見つかったIPのみを返す。
Leave a Reply