差分

移動先: 案内検索

TCP/IP

1,989 バイト追加, 2015年9月8日 (火) 07:53
/* ブリッジ・ルーター */
GNU/LinuxではEthernetのデバイスは基本的にeth0から順番に割り当てられます。
むかしはNIC (Network Interface Card)に対応するデバイスファイル /dev/eth0 というのがあったのですが、今ではそれが存在せず内部的にeth0、eth1という仮想的なネットワークデバイスになっています。
慣用的にloはローカルホスト、eth0はEternet、wlan0は無線LANの仮想ネットワークデバイスとして命名されていますが、これは任意な名前であり、たとえば、新たにPPP (シリアル経由でpoint-to-point接続するプロトコル)で接続を作る時はppp0や、 easytether (AndroidをUSBで接続しテザリングをするツールを利用)など仮想ネットワークデバイスは自由度の高い名前をつけることができます。同種類のデバイスが増えるたびに番数が増えますなど仮想ネットワークデバイスは自由度の高い名前をつけることができます。同種類のデバイスが増えるたびに番数が増えるのが普通<ref>あくまでもコンベンショナル(習慣的)なので、世の中には変な名前の付け方のネットワークのスペシャルデバイスファイルのルールがあるかも知れません。</ref>です ( ex: eth0, eth1, ... )。 
* lo ローカルホストのための仮想ネットワークデバイス
* eth0 Ethernetのための仮想ネットワークデバイス
* wlan0 無線LANのための仮想ネットワークデバイス
 
その仮想ネットワークデバイスにIPアドレスを設定しTCP/IPで利用する形にします。
=== ifconfig ===
仮想ネットワークデバイスにTCP/IPに必要なパラメータを設定するのはifconfigコマンドです。これは米カリフォルニア大学バークレー校でBSDに組み込んだTCPIPに必要なパラメータを設定するのはifconfigコマンドです。これは米カリフォルニア大学バークレー校でBSDに組み込んだTCP/IPの実装が作られた時に、IPアドレスやネットマスクなどのパラメータを設定する、あるいは参照するのに作られたコマンドですが、そのまま今もスタイルを変えず使われています。グラフィカルインタフェース〜といっても項目をリストアップする程度のものですが〜を使って設定するツールは存在しますが、システムがブートする段階でIPの制御を行うのがifconfigです。IPの実装が作られた時に、IPアドレスやネットマスクなどのパラメータを設定する、あるいは参照するのに作られたコマンドですが、そのまま今もスタイルを変えず使われています。グラフィカルインタフェース〜といっても項目をリストアップする程度のものですが〜を使って設定するツールは存在しますが、システムがブートする段階でIPの制御を行うのがifconfigです。 ; 追記 (2015/9): RHEL7/CentOS7 といった新しいディストリビューションはifconfigを標準から外し、ipコマンド([http://lartc.org/howto/ iproute2])がデフォルトで入るようになりました。
低いレベルでコントロールする方法を理解したい、あるいはツールを作成したいと思った時は netdevice のオンラインマニュアルにヒントがあります。
 
/sbin/ifconfigをオプションなしに実行すると、現在のeth0やloが表示されます。
<pre class="bash">
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:c5:41:95:a0
collisions:0 txqueuelen:0
RX bytes:340 (340.0 B) TX bytes:340 (340.0 B)
</pre>
 
仮想ネットワークデバイスeth0はEthernetに接続され、IPアドレス192.168.100.18が設定されています。
 
loはローカルホストです。これは127.0.0.1が割り当てられます。127.0.0.1は特殊なアドレスでこれは自分自身のマシンを指します。
ホスト名はlocalhostとなっています。ホスト名はlocalhostとなっています。他のサンプルもこちら([[Ifconfig-listed]])に載せておきます。
を使ってそのネットワーク上で自動割り当てされるのが一般的ですが、ここではまず固定IPの話から進めましょう。
 
特定のインターフェースを利用可能するには次のようにします。この場合、eth0のインタフェースを利用可能にします。
 
<pre class="bash">
# ifconfig eth0 up
</pre>
これはeth0のインタフェースを利用可能にします。
==== 固定IPアドレス ====
 
<pre class="bash">
# ifconfig eth0 192.168.201.3 netmask 255.255.255.0
</pre>
こう実行することによってeth0にはIPアドレス192.168.1.3、ブロードキャスト:192.168.1.255、マスク:255.255.255.0が設定されます。
ここではeth0に設定していますが物理的に1つのNICに複数のIPアドレスを付与できます。むかしならNIC(network interface card)に1つのIPアドレスしか付加できませんでしたが、複数のIPアドレスが設定する場合、eth0:1、eth0:2といった形でMACアドレスが同じであるeth0のインタフェースが作られます。
 
<pre class="bash">
$ sudo ifconfig eth0:1 192.168.100.99 netmask 255.255.255.0
eth0:1 Link encap:イーサネット ハードウェアアドレス 14:da:e9:71:cd:35
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
割り込み:47 ベースアドレス:0xc000
</pre>
 
==== 動的IPアドレス ====
dhcpサーバがあり動的にネットワークを設定するのは、もちろん事前にGNU/Linuxのネットワーク管理環境に、その処理を委ねますので、通常はネットワーク設定のパネルからセットアップを行います。ここでは機能を説明するために説明しています。Linuxのディストリビューションの用意しているネットワーク管理環境 ([https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-NetworkManager.html NetworkManager]などがバックグラウンドで起動されている) に、その処理を委ねますので、ユーザは一々明示的に処理するようなことはありません。GUI環境であれば通常はネットワーク設定のパネルからセットアップを行います。ここでは機能を説明するためにコマンドレベルで説明しています。
 
eth0にdhcpでアドレスなどを振りたいときはdhclientコマンドでeth0を指定します。
 
<pre class="bash">
# dhclient eth0
</pre>
もちろんeth0だけなくブリッジのインタフェースも同様にIPアドレスを割り当てることができます。ブリッジのインタフェースがbr0として、dhclient もちろんネットワークデバイスはeth0だけなく仮想ブリッジのインタフェースも同様にIPアドレスを割り当てることができます。ブリッジのインタフェースがbr0として、dhclient br0 が可能で、成功すればbr0に動的にIPアドレスが割り振られます。 DHCPサーバ側で指定できるのはipアドレス、ゲートウェイアドレス、ドメイン名などだけではなく、DNSサーバやNTPサーバの指定などクライアント側で必要な情報を用意することができます。
=== ブリッジ・ルーター ===
TCP/IPの機能が一通り使えるようになっているので、ネットワークのブリッジを構築することも、ルータ / NAT を構築することも可能です。Ethernetのインタフェースが物理的に2つあるハードウェア(eth0とeth1)が使え、ディストリビューションはDebain系という前提で話を進めます。を構築することも可能です。ここでは実際にブリッジやルータをどう作るのかを示すことで、ブリッジやルータの機能が標準的に含まれていることを示したいと思います。
念のため作業を行う前に、インタフェースをすべてダウンさせておきましょう(br0は、まだ存在していませんが、念のため)。
# ifconfig eth0 downまず、Ethernetのインタフェースが物理的に2つあるハードウェア(eth0とeth1)が使え、ディストリビューションはDebain系という前提で話を進めます。 # ifconfig eth1 down # ifconfig br0 down :補足: [[Raspberry Piを使ってブリッジ/NATルーターを作る]]ことをイメージしています。
事前の用意としてブリッジを作成するためには、まずbridge-utilsをインストールしておきます。
 
<pre class="bash">
# apt-get install bridge-utils
</pre>
さて次の手順が本番です。インストールが終了したら、作業を行う前に、念のためインタフェースをすべてダウンさせておきましょう。  <pre class="bash"> # ifconfig eth0 down # ifconfig eth1 down</pre> 次の手順でブリッジを構築します。
<pre class="bash">
# brctl addbr br0
# brctl addif br0 eth0
# ifconfig eth0 0.0.0.0 up
# ifconfig eth1 0.0.0.0 up
</pre>
まずbr0という名前のブリッジのインタフェースを作ります。そのbr0にeth0とeth1を加えます。その後にeth0とeth1をIPアドレスをつけない形でアップします。これでeth0側とeth1側のパケットが通過するようになります。# br0という名前のブリッジのインタフェースを作る。# br0にインタフェースeth0とeth1を加える。# eth0とeth1をIPアドレスをつけない形でup(起動)する。  これでeth0側とeth1側のパケットが通過するようになります。
==== ルータ / NAT ====
今度はルータを構築してみましょう。ルータの機能ですが、eth0側はdhcpで自動的にIPアドレスを割り振られることを前提にし、eth1側は192今度はルータを構築してみましょう。ルータの機能ですが、eth0側はdhcpで自動的にIPアドレスを割り振られることを前提にし、eth1側は192.168.32.0/24のネットワークを構築するとしましょう。前提としてはeth0側をWAN側24のネットワークを構築するとしましょう。前提としてはeth0側をWAN側/インターネット側、eth1をLAN側/ローカルネットワーク側とします。尚、作業を始めるまえはeth0もeth1もダウンしていることを前提とします。
まずNATに必要なカーネルのモジュールを読み込み、IPパケットをフォワードする設定にします。
<pre class="bash">
# modprobe iptable_nat
# echo 1 > /proc/sys/net/ipv4/ip_forward
</pre>
eth0側でdhclientを使いeth0にIPアドレスを割り当てます。尚、eth0側/WAN側に上位ルータがあるといった運用をされていてDHCPサーバーがあるとします。eth1側/LAN側は192.168.32.0/24のネットワークがあるとします。
 
<pre class="bash">
# dhclient eth0
# ifconfig eth1 192.168.32.1 netmask 255.255.255.0
# iptables --table nat --append POSTROUTING --out-interface eth0 --jump MASQUERADE
# iptables --append FORWARD --in-interface eth1 --jump ACCEPT
</pre>
; 注意: 192.168.32.0/24 にはこの段階ではDHCPサーバが存在していないので、dhcpを使いネットワークアドレス取得をする前提の機材を接続しても、そのままではIPアドレスが設定されません。
== 脚注 ==