y2blog » UPnP/OpenHome Music Server の自作(その3)

8

09

2018

UPnP/OpenHome Music Server の自作(その3)

APU2C4をネットワークルータとして機能させる


ここから暫くは、デジタルオーディオの世界を離れて単純なLinux系OSのネットワーク機能の話になってしまうが、Linuxネットワークの基礎を覚える良い機会だと思って辛抱して欲しい.


今回はLinux OSとしてCentOS 7.x を採用しているが、困った事にLinuxの世界ではディストリビューションと呼ばれているLinux OS実装環境が異なると、管理のためのコマンド体系や設定方法などが微妙(かなりと言った方が良いかな)に異なる.


同じCentOS系のLinuxでもCentOS 6.x 系と今回のCentOS 7.x系では、OS管理のコマンドや管理方法が大きく変わってしまった.正確にはCentOSが変わったと言うよりは、CentOSの母体で有る RedHat Enterprise Linux(REHL) が変わってしまったというところが正しい表現だろうか.


REHL7系であまりにも大きな変更があったためか、未だに6系を使い続けているユーザが多いのも事実だ.とは言う物の、セキュリティ面などを考えると何れは新しい7系列の環境に移行しなければならないのは明確なのだが...


前置きが長くなってしまったが、やはり RHEL7(CentOS7)系のネットワークデバイスの管理の仕方はまだ馴染めない.せめてネットワークデバイス名の命名方法だけでも昔に戻したいというノスタルジーから、先ずは気持ちの悪い “enp1s0” というデバイス名(ユーザのHW環境によって変わってしまう!!!)から昔ながらの “eth0” という形式に変更することから始めようと思う.


【蛇足】昔のネットワークデバイス名 “eth0” に強制変更してみる


新しいネットワークデバイス名の付け方に馴染めないのは私だけではなく、皆不満があるようで、昔ながらの命名ルールに戻す方法について検索してみると直ぐに沢山見つかるだろう.


今回は、単に具体的な手順だけを示すだけに留めるので、詳しい中身について知りたければ各自で情報を追って欲しい.


先ずは、現行のネットワークデバイス名を確認しておく.昔はこの手の物は”ifconfig” コマンドを叩いていたが、7系列では “ip” コマンドという新しいコマンド体系に変わっている.



“enp1s0”, “enp2s0”, “enp3s0” という3つのネットワークデバイスが有ることが分かるだろう.”enp1s0″が物理的につながった状態で、192.168.100.187というIPv4形式のプライベートIPアドレスがDHCPによって割り当てられていることが確認できる.


この”enp1s0″には IPv4アドレスの他にも、prefix:64bit長のIPv6アドレス(2409:10:ad40:xxxx:yyyy:zzzz:90d7:5f6e/64) がDHCP経由で割り当てられているが、普通の家庭ではIPv6環境を構築していることはまずないので、このIPv6アドレスの存在についてはあまり気にしなくても良い.(私の家ではIPv4/IPv6のデュアルスタック環境でLANを組んでいるので、IPv6環境で通信が行われる環境になっている)


勿論、インターネット上に公開サーバを立てたりするする際は、IPv4/IPv6の設定についてきちんと理解した上で、適切な設定を行わなければならないが、今回の様なホームネットワーク環境ではIPv6は使わない設定に変更しておいた方が良いだろう.IPv6を無効化する方法もネット上で沢山紹介されているので、それらを参考にIPv6を無効化しておくと良いだろう.


機会があれば、IPv4環境とIPv6環境とでネットワークオーディオの世界で違いが出るかどうか試して見たいが、果たしてIPv6完全準拠のネットワークオーディオ環境が準備できるかどうかは微妙なところだろう.OS側は問題無いけど、多分アプリケーション環境がIPv6など全く考慮されていないだろう.


“enp1s0″というネットワークデバイス名を “eth0” に完全に変えるには、OSのブートローダレベルで、見つけ出した各デバイスの名前を使わない(無視する)ように設定する必要があるようだ.具体的には、CentOS7のデフォルトのブートローダである “grub2” の起動設定ファイル、”/etc/default/grub”の “GRUB_CMDLINE_LINUX” パラメータに、次のようなオプションをつけ加えれば良い.


GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=ttyS0,115200n8 net.ifnames=0 biosdevname=0

この変更を行った後、grub2のパラメータ変更を反映させるコマンド “grub2-mkconfig” を実行し、OSを再起動するとネットワークデバイス名は昔ながらの懐かしい “eth0”, “eth1”, … に戻っていることだろう.\(^-^)/



【本題】Linux OSのカーネルパラメータを変更してIPルーティングを可能にする


またしても変な寄り道をしてしまったが、ここからが本題のAPU2C4のCentOS7環境下でネットワークルータとして機能させる話に戻すことにしよう.ネットワークルータという言葉は一般の人でも良く聞く言葉だと思うが、果たしてルータという言葉をきちんと理解できてているのはネットワークエンジニアかIT関係の専門家に限られてしまうのではないだろうか.


今回どのレベルまで掘り下げて話を進めて行けば良いのか迷っているが、とりあえず今回はネットワークの基本中の基本で有る、ネットワークの階層(レイヤー)構造とIPアドレスの仕組みやTCP(UDP)/IP 通信の仕組みがある程度理解できているという前提で話を進めることにする.


L2ネットワークレイヤー、L3ネットワークレイヤーのおさらい


Home Broadband Router
家庭用ブロードバンドルータの一般的な接続形態


一般的な家庭のネットワーク環境はネットワークセグメントが2つ(WAN側ネットワークとLAN側ネットワーク)で構成されている.家庭用の多くのブロードバンドルータには、WANポートとLANポートが別々に備わっていて、通常WAN側は1ポート、LAN側は複数ポート備わっていることが多いだろう.


WAN側で1つのネットワーク、LAN側で別なもう1つのネットワークが構成されている.このようなネットワークをLayer2(L2)ネットワーク(データリンク層)と呼び、同一ネットワーク内の通信はイーサネットフレームと呼ばれるパケットを単位として通信が行われている.この際にイーサネットフレームに付けられるているアドレスはMACアドレスと呼ばれている48bit長のアドレスだ.


このL2ネットワークの世界で使われるネットワーク機器が所謂L2ネットワークスイッチと呼ばれている物で、その辺の家電量販店でも簡単に入できるバッファローやIODATAなどの家庭用ネットワークスイッチが該当する.L3スイッチと呼ばれているスイッチも存在するが、Ciscoなどのエンタープライズ系の何十万円もする代物で、一般家庭で用いるような物ではない.L3スイッチを一言で言えば、IPルータ(L3)機能を持ったL2ネットワークスイッチと理解しておけば良いだろう.


WAN側のネットワークは通常インターネットプロバイダ(I.S.P.)側で決まったL2ネットワークセグメントが一つユーザに割り当てられる.このL2ネットワークセグメント自体が複数のユーザで共用されている場合もあるが、固定IPサービスなどを利用している場合や、セキュリティーを重視しているプロバイダでは、ユーザ専用のL2ネットワークセグメントを割り当てていることだろう.


WAN側のL2ネットワークセグメントにあるネットワーク機器が別なLAN側のL2ネットワークセグメントのネットワーク機器と通信するには、L2の一つ上のLayer3(L3:ネットワーク層)で両者間のデータのやり取りを中継する仕組み(機能)が必要で、この機能を有するネットワーク装置を一般的にルータと呼んでいる.Layer3で使われるプロトコル(通信の約束事)の代表的な物がInternet Protocol(IP)であり、IPルータと呼ばれている.現在では使われることは無くなったが、NetwareのIPXやAppleTalkのDatagram Delivery ProtocolなどもかつてはL3プロトコルとして存在していた.


IP Routing Layers
IPルーティングのレイヤー

企業や大学などでは通常複数のネットワークに分かれていて、それぞれのネットワークがルータを介して相互につながっている.インターネットの原理も実はこれと全く同じで、何十、何百万というL2ネットワークセグメントがルータを介して結びついているに過ぎない.


家庭用ブロードバンドルータにも、WAN側とLAN側のネットワークの間に、このルータ機能が備わっている.但し、家庭用ブロードバンドルータは一般的なネットワークの世界で言うところのルータとは少し異なっている部分がある.それは家庭用のインターネット接続用途に特化した機能しか持たないルータで、一般的なルータのように、L2ネットワークセグメント同士を相互に結びつけることはできない(行わない)のである.


これは主に一般家庭の素人ユーザでも安心して使えるように、LAN側のネットワークのセキュリティーを確保する目的で、NAPT(IPマスカレード)機能がデフォルトで設定されるようになっている.但し、ブロードバンドルータと呼ばれている物の中には、設定をユーザが自由に変更できて、所謂汎用的なルータとして利用できるようになっている物も存在する.YAMAHAのRTXシリーズのような家庭用と言うよりはどちらかと言うと小規模事業拠点用のルータは、汎用的なルータとしての利用がメインだろう.勿論、家庭用のブロードバンドルータ的な使い方も可能なので、ネットワークスキルの高いユーザはYAMAHAのRTXシリーズを愛用している人が多い.



Broadband  Routers
ブロードバンドルータあれこれ(上から、NEC Aterm WR9500N、 YAMAHA RTX-1100、Cisco C-841M)

My Home Routers
我が家のメインルータ(NEC IX-2215:最下段向かって右側)


NECのAterm WR9500N は純粋な家庭用なので、WANポート1個とLAN側スイッチポート4個というシンプルな構成になっている.YAMAHA RTX-1100 は小規模事業者用なので、WANという表記では無くLAN1(L2-SW:4ポート)、LAN2、LAN3 各1ポートという構成になっている.LAN2かLAN3をアップリンク(WAN)側につなぐのが一般的な使い方で、汎用ルータとしての性格が強い製品だろう.Cisco C-841M も小規模事業拠点用の物で、RTX-1100 より後の時代の製品と言うことも有って、全てのポートが Gigabit ポートになっている.昨年のNTT-XストアのCisco製品バナナ叩き売りセールに釣られて、衝動買いしてしまったが、今まで一度も現役として活躍していないので、そのうち誰かに寄贈という運命を辿るだろう.


我が家のメインルータの NEC IX-2215 に関しては、一般的な家庭内ネットワークとは余りにも掛け離れてしまっている(IPv6, 802.1q VLAN Tagging, LACP, IPoE, VPNルータ、IP電話、...)ので、ここでは解説しないが何れどこかで、我が家のネットワーク環境についての説明を行う予定だ.

IPルーティング、NAT、NAPT(IPマスカレード)のおさらい


先ずは、IPルーティングの根本的な原理を理解して貰うために、細かい部分や内容の正確性は一先ず棚上げした状態で簡単な図を用いて説明してみる.


IP Routing Mechanism
説明用の仮想的なネットワーク構成

IP Routing Tables
各Routerが保持している経路情報(ルーティングテーブル)


ルータにはルーティングテーブルと呼ばれている宛先ネットワークアドレスと、その宛先ネットワークにデータを送るためにリレー(中継)すべきルータのアドレス(またはデータを送り出すインタフェース情報)のペア(対)が登録されている.今回はとても簡単なネットワーク構成なので、各ルータのテーブル内容はシンプルであるので、このように手作業でテーブルの中身を書き出すことができているが、実際の企業内ネットワークやインターネットの世界では、とても手作業ではテーブルを管理することはできないことは容易に想像が付くだろう.


このルータのルーティングテーブルを管理し、隣接するルータ間でルティング情報を交換するための仕組みが、ルーティングプロトコルと呼ばれているものだ.インターネットの世界で使われている代表的なプロトコルとして、”Static”, “BGP(Boarder Gateway Protocol)”, “OSPF(Open Shortest Path First)”, “RIP(Router Information Protocol)” という4つがある.この内、RIPはインターネットの黎明期には使われていたが現在では殆ど使われていない.”Static”というのは、内部のネットワーク構成が殆ど変わらないような企業内LANなどで使われるルーティング手法で、今回の様な家庭内に数個程度の固定ネットワークを作るのであれば、この手作業による”Static”ルーティングで十分間に合う.


BGP, OSPF, RIPなどのルーティングプロトコルはネットワークエンジニアの世界の話なので、今回はこれらの仕組みについては触れないことにする.


“PC A(202.176.12.11)” が “Server A(43.16.240.100)” にデータを送るには、”Router A” ⇒ ”Router B” と中継されて行くが、”Router B”からは 2つの経路を採ることが可能であることに気付くだろう.一つは”Router B” ⇒ “Router D” ⇒ “Server A” で、もう一つは ”Router B” ⇒ “Router C” ⇒ “Router D” ⇒ “Server A” だ.


このように途中の経路が複数有る場合に、どの経路を採るべきかを決めるためのプロセスを決めているがルーティングプロトコルで、殆どの場合、最終的に ”PC A” ⇒ ”Router B” ⇒ “Router D” ⇒ “Server A” という経路が採られることになるだろう.これは、”PC A” ⇒ ”Router B” ⇒ “Router D” ⇒ “Server A” の方が “PC A” ⇒ ”Router B” ⇒ “Router C” ⇒ “Router D” ⇒ “Server A” よりもルータの経由数(ホップ数)が少ないからだ.


「殆どの場合」と書いたのは、実際のインターネット環境では、途中の経路で何らかの障害が発生したり、回線やルータ機器のメンテナンス等で停止するなど、その時々でネットワークの状況が変化する.その時々の状況によって経路情報は常に変化している.”Router B” と “Router C” を繋いでいるネットワークで障害が発生した場合、”Router B” ⇒ “Router C” ⇒ “Router D” ⇒ “Server A” という経路が使われることになる.


Home Broadband Router Usage
一般的な家庭でのブロードバンドルータの使用イメージ


IPルーティングの基本はルータ間でのバケツリレーということが理解できたところで、家庭用のブロードバンドルータの特徴であるNAPT(Network Address Port Translation) 機能について理解しておいて欲しい.NAPTは別名 IPマスカレードとも呼ばれており、インターネット側で使われるグローバルIPアドレスと家庭内LANで使われているプライベートIPアドレスとを紐付け、プライベートIPを使用しているネットワーク内の機器に対して、インターネット接続機能を提供している.


先程のIPルーティングでは、通信する方向は双方向でどちら側からでも直接通信を行うことができるが、このNAPTでは基本的にLAN側(プライベートIP側)から、WAN側(グローバルIP側)への一方向接続(発信接続)となる.WAN側からLAN側へのアクセスは許されていないのである.WAN側からLAN側への通信ができないのであれば、一体どうやってLAN側のクライアントが外部のサーバに送ったリクエスト結果を受け取るのかと疑問に思うかもしれないが、実はLAN側から送り出した外部当ての通信情報を、NAPTが記憶していて、外部からやってきた通信パケットをチェックして、LAN側のクライアントから送り出されたリクエストに対する返答だけをLAN側のクライアントに戻すという処理をやっているのである.


このNAPTの仕組みが有るおかげで、外部からの攻撃を自動的に防いでくれていることがお解りだろうか.プライベートIPアドレスとグローバルIPアドレスの仲介だけではなく、ファイアウォール機能も提供してくれるという一石二鳥の機能がNAPTなのである.


良い事ずくめのNAPTのような気もするが、勿論、外部のサーバとの間で直接データを送受信しなければならないようなネットワークアプリケーションは、上手く動かないという欠点もあるが、ネットワークのド素人でもそれなりに安心してインターネット接続が行えるのはひとえにこのNAPT機能のお陰なのである.


NAPTの仕組みを説明する前に、原理が簡単なNAT(Network Address Translation)を説明しておく.


NAT Mechanism
NATの仕組み

NATの原理は簡単で、クライアントから送出されたパケットがNATルータに届いたら、NATルータは送信元のIPアドレスをNATルータ自身の相手先側のポートのIPアドレスで置き換え、次のホップ先のルータに渡す.この後は通常のIPルーティングに従って最終的な宛先にパケットが届けられる.


宛先のサーバはクライアントへ返答を送り返すが、この際の返信の宛先IPは先程のNATルータとなっているので、NATルータまでは通常のIPルーティングに従って届けられる.NATルータでは宛先のIPアドレスをクライアントのIPアドレスへ書き換えて、クライアントへ送信する.


このようなNATの仕組みにより、プライベートIPアドレスを使用しているLAN側のネットワーク機器が、グローバルIPの世界のネットワーク機器との間でデータのやり取りを行う事が可能となるである.


NATは仕組みが簡単で、アドレス変換のための負荷も小さくて済むが、最大の欠点は常に1対1のアドレス変換しか行えないことだ.グローバルIPアドレスとプライベートIPアドレスとの間で変換させる場合は、プライベートIPと同数のグローバルIPアドレスが必要になってしまう.残念ながらGlobal IPv4 IPアドレス枯渇対策としては全く役に立たない.


もう一つNATで気に留めておいて欲しいことがある.それはNATの場合LAN側ではプライベートIPアドレスを使っていたとしても、グローバル(インターネット)側から見れば完全に外部に置かれているのと同じで、セキュリティー的には非常に厳しい状態に置かれてしまうということだ.ファイアウォールなどできちんと防御態勢が整えていない状態でLAN内部に置かれたサーバをNATで外部に晒してはならないということを肝に銘じておいて欲しい.


次は、NATよりも複雑なNAPT(Network Address Port Translation)の仕組みを簡単に図式化してみることにしよう.先程のNATはIPアドレスだけの変換だったが、NAPTではIPアドレスとポート番号の組みあわせを対で管理しなければならないので結構面倒だ.


NAPT Mechanism
NAPTの仕組み

NAPTではIPアドレスの変換とポート番号の変換が同時に行われることになるが、内部のクライアント側から外部へ出て行く変換を行う際に、クライアントのIPアドレスとクライアントが待ち受けるポート番号である、送信元ポート番号をNAPTルータのメモリ上設けられたNAPTテーブルに記録する.


NAPTルータはNATの場合と同じように送信元のIPアドレスを自分自身のIPアドレスに書き換えるが、この時に送信元のポート番号もNAPTルータが管理する新しいユニークなPort番号(1025-65535)に書き換える.宛先のIPアドレスと書き換えたポート番号を先程のテーブルの同じレコード上にこれらの項目を記録する.


このユニークなポート番号に書き換えるのがNAPTのミソで、NATではできなかった多対多の接続(セッション)を同時に行う事ができるようになる.勿論Port番号の割り当て可能な数が限られているので、最大でも64000程度のセッションしか張れないが、一般的な家庭で利用する分にはこれで十分だろう.


ここから先、相手先からの戻りパケットを受け取るまでの過程ははNATと同じなのだが、NAPTルータでは戻って来たパケットの送信元IPアドレスと宛先Port番号をキーとして、先程のNAPTテーブルのエントリーを検索する.合致するエントリーを見つけたら、NAPTルータは宛先IPアドレスと宛先ポートをそのエントリーに記録されている送信元クライアントのIPアドレスとポート番号に書き換えて、クライアント側のネットワークに送出する.この一連の処理により、クライアントと外部のサーバとの間で通信が成り立っている.


NAPTでは内側から外側への接続(発信接続)が成立することが理解できたと思うが、逆方向の外側のサーバが内側のクライアントへの接続するにはどのようにすれば良いだろうか?.


先程のNAPTの仕組みが理解できていれば、外側のサーバが内側のクライアントへの接続するには、NAPTルータのエントリーに記録されている条件を満たす場合にしか内側のクライアントへデータを届けられないことに気付くだろう.つまり、NAPTルータが相手先に送ったIPアドレスとNAPTルータが待ち受けるポート番号が一致しない限り、外部から内部へはパケットを送り込めないのである.


元々NAPTは少ないグローバルIPアドレスを多くのプライベートIPアドレスのネットワーク機器で共有するための仕組みだったが、NAPTの欠点でもある片方向の一方的な通信しかできないと言う面を逆手にとって内部側のセキュリティーを高めることにも使うことができるという、家庭用の機能としては正にうってつけの機能なのだ.



長々とした説明が続いてしまい、結局本題にまで辿り着けなかったが、IPルーティング、NAT、NAPTの内容が一通り理解できていれば、この後説明するAPU2C4をIPルータ兼NAPTルータとして実装するという記事の内容が理解できることだろう.


…という訳で、本題は次回ということで.




VMWareのアイコンライブラリ利用に関する Notation



This document was created using the official VMware icon and diagram library. Copyright © 2012 VMware, Inc. All rights reserved. This product is protected by U.S. and international copyright and intellectual property laws. VMware products are covered by one or more patents listed at http://www.vmware.com/go/patents. VMware does not endorse or make any representations about third party information included in this document, nor does the inclusion of any VMware icon or diagram in this document imply such an endorsement.

VMWare LOGO

Local Search

Calendar

August 2018
S M T W T F S
« Jul    
 1234
567891011
12131415161718
19202122232425
262728293031  
  • Blogroll

  • Meta