カテゴリー

アクセスカウンター


since 1996/06/14

Count per Day

  • 38今日の訪問者数:
  • 67昨日の訪問者数:
  • 1178月別訪問者数:
  • 0現在オンライン中の人数:

家庭内LAN

最近、家の中のネットワーク構成が微妙な気がしてきたので、速度の計測とかやってみました。 回線の引き回しとかでHUBが三台あります。NetGenesisなんてもう6年前の製品なのね。 これで、各ポイント間毎に通信速度を測りました。  TransferBandwidth A-A間206 Mbytes172 Mbits/sec B-B間208 MBytes174 Mbits/sec C-C間207 MBytes174 Mbits/sec A-B間195 Mbytes163 Mbits/sec A-B-C間178 Mbytes149 Mbits/sec A-B-D間41.8 MBytes35.0 Mbits/sec たとえば「A-A間」は、同じHUBで違うポートに2台のPCを接続して計測してる感じです。 すべてのポートが1000BASEですが、製品の違いによる差は出ませんね。発売時期が違うとは言え、安定してます。 やはりHUBを複数渡ると軒並み速度が落ちるのはよくわかりました。 ちなみに「D」は無線なので遅くて当然の結果です。 HUBが多いので微妙だけど、思いの外安定した速度が出てるので良しという感じですね。

ネットワークの基礎

概要  ここでは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終点到達不能通知 […]

ポリシールーティングとか

うちは固定IPでは無いので、Interlinkの固定IPサービスを使ってます。  仕組みは、うちのサーバからInterlinkのサーバへVPNで繋いでるだけ。固定IPはInterlink側が保持してて、外からのアクセスはすべてこのInterlinkの固定IPからVPN経由でうちのサーバに入ってきます。  ただ、とてもこのVPNがすごく遅いです…。たぶん1Mbpsとかそういうレベル。なので某所用にダイレクト接続を試みてみました。 まず、もともとのルーティング設定で、ローカル側(192.168.xxx.0/24)はルーティングの設定でeth0側に抜けます。これは問題無し。 しかし、それ以外のアクセスは、このVPN側(絵の中では61.xxx.xxx.A)がデフォルトゲートウェイになっていますので、そこから出入りすることになります。  これが非常に大きな問題で、VPNを使わない側、絵で言う211.xxx.xxx.AというIPへ外部からアクセスされても、戻りのパケットはppp0側から抜けます。  IPパケットにはSRC(source:アクセス元)IPとDST(destination:アクセス先)が設定されていますが、たとえば111.xxx.xxx.xxxという人が211.xxx.xxx.Aへアクセスした場合は、

上りパケット…SRC-IP:111.xxx.xxx.xxx DST-IP:211.xxx.xxx.A

下りパケット…SRC-IP:61.xxx.xxx.A DST-IP:111.xxx.xxx.xx

になります。実際には

上りパケット…SRC-IP:111.xxx.xxx.xxx DST-IP:211.xxx.xxx.A

下りパケット…SRC-IP:211.xxx.xxx.A DST-IP:111.xxx.xxx.xx

で無ければ通信は成り立ちません。サーバのデフォルトゲートウェイが61.xxx.xxx.Aなので、下りパケットのSRC-IPが変化しています。  通常ルーティングはIPアドレス毎に、どの回線を使うかを判断しますが、SRC/DST-IP両方は見ていません。上記例の場合はSRC-IP(サーバから見るとDestinationなんだけどね)しか見ていません。ですので、今回は以下のような対策をとりました。 デフォルトゲートウェイをeth0側に変更(ちょっと別の訳あり)。 ppp0側から入ってきたパケットは、すべてppp0へルーティング。 eth0をデフォルトゲートウェイにした場合は、当然ppp0側からのパケットはeth0から抜けますが、ここをポリシールーティングという方法を使って強制的にppp0から抜けさせます。  やり方はこんな感じ

# 前のデフォルトゲートウェイを削除

route del default gw 61.xxx.xxx.A

# デフォルトゲートウェイを192.168.xxx.Aに設定

route add default gw 192.168.xxx.A

# ppp0へ入ってきたすべてのパケット(0/0 = 0.0.0.0/0)を、ppp0(61.xxx.xxx.A)側へとばす。

ip route add 0/0 dev ppp0 table 20

ip rule add from 61.xxx.xxx.A table 20 […]