南アルプス 鳳凰三山 (北岳頂上より)


Date/Time: 2014:09:15 08:34:54
Camera: PENTAX
Model: PENTAX K-5 II s
Exporsure Time: 1/640
FNumber: 5.6
Aperture Value: 5.0
Focal Length: 21.0

Close

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

8

27

2018

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

APU2C4をルータとして機能させる(応用編:NAPT IPマスカレード)


今回は、前回のNATルーティングに引き続き、NAPT(IPマスカレード)機能を使ったオーディオ専用ネットワークを構築してみることにする.


APU2C4 Audio Router NAPT
APU2C4の3番目のポートを使ってNAPTによる準オーディオ専用ネットワークを作ってみる


今回のNAPTルーティングの実験では、3番目のポート(“eth2”) とLAN側ポート(“eth0”)との間でNAPT変換を行うことにする.前回のNATルーティングが1対1の双方向変換であったのに対し、今回のNAPTルータではLAN側からはオーディオ専用のネットワークに置かれた機器類にはアクセスできないことが異なっている.


何もわざわざ自分でLinuxを使った面倒なルータを作らなくても、NAPT機能のある家庭用のブロードバンドルータを2台用意しそれらをタンデムに繋げばそれなりの効果はあるのだが、LAN側からもう一段内側のオーディオ用のネットワークにアクセスする事が困難なため、使い勝手がとても悪いのだ.


家庭用のブロードバンドルータのNAPT機能は一つのグローバルIPアドレスを効果的に利用する事が主目的のため、一般的なWEBやメールなどの用途には向いているのだが、NFSやSMB/CIFSなどのファイルサービスとはとても相性が悪く、これらのサービスを利用するにはファイルサーバや途中に介在するネットワーク機器などを正しく設定する必要があるため、一般的な家庭用のブロードバンドルータではWAN側(外側)とLAN側(内側)との間でファイルサービスを利用するにはそれなりのスキルが要求される.


勿論、ファイルサービスを提供するNASや”Kazoo”や”fidata”などのコントローラアプリをオーディオ用ネットワークの配下に置けば面倒な設定を行うことなく使い勝手は改善されるのだが、今度はこれらの機器が発する余計なトラフィックがオーディオネットワークを汚染してしまうので、音質向上という意味ではマイナスに働いてしまう.


という訳で、今回はNAPTの弱点をカバーするような形でAPU2C4にNAPT機能を搭載してみることにする.


さて、NAPT機能の利用で問題となるファイルサービスへのアクセスと各種コントローラアプリの置き場所だが、ファイルサービスに関しては、APU2C4自体にNFSファイルサービスを実装しているので、今回はNAPTの内側のネットワークからでも直接アクセス可能だ.但し、LAN側に置かれたNAS装置(上記の図では Synology NAS)へはアクセスできないことに留意して欲しい.また、各種コントローラアプリはLAN側に置いたままの状態で使うことにする.



NAPT機能の実装


APU2C4の3番目のポートにNAPT機能を実装するのは、前回のNAT機能の実装と同じようにファイアウォール機能を使う.前回のNAT機能の実装では、3つのポートを全て 標準で備わっている”trusted” というゾーンに割り当てたので、ファイアウォールとしては完全なスルー(全パケットを許可する)状態であった.今回はLAN側からNAPTの内側へmpdなどの特定の通信を許可(ポートフォワード)させるために、LAN側(”eth0″)を別なゾーンに割り当てることにする.


LAN側(”eth0″)に割り当てるゾーン名をとりあえず “lan_trusted” とするが名前は何でも良い.このゾーンの振る舞いは”trusted” と全く同じ扱いとする.標準のゾーンに関する定義ファイルは、”/usr/lib/firewalld/zones” 配下に ”ゾーン名.xml”という名前で定義ファイルが置かれている.自分専用のゾーン定義を作成するには、”/etc/firewalld/zones” 配下に定義ファイルを置けば良い.


今回は 標準の”trusted” の定義ファイル “/usr/lib/firewalld/zones/trusted.xml” の内容を単純にコピーして名前だけを付け替えて “/etc/firewalld/zones/lan_trusted.xml” を作成する.同様にNAT用のネットワークゾーンを”nat_trusted”、NAPT用のゾーンを “napt_trusted” としておく.



[root@jukebox2 ~]# cp /usr/lib/firewalld/zones/trusted.xml /etc/firewalld/zones/lan_trusted.xml 
[root@jukebox2 ~]# cp /usr/lib/firewalld/zones/trusted.xml /etc/firewalld/zones/nat_trusted.xml 
[root@jukebox2 ~]# cp /usr/lib/firewalld/zones/trusted.xml /etc/firewalld/zones/napt_trusted.xml 

[root@jukebox2 ~]# cat /etc/firewalld/zones/lan_trusted.xml  <== 中身を確認してみる


  Trusted
  All network connections are accepted.


[root@jukebox2 ~]# nmcli c mod eth0 connection.zone lan_trusted <== "eth0"のゾーンを変更する
[root@jukebox2 ~]# nmcli c mod eth1 connection.zone nat_trusted
[root@jukebox2 ~]# nmcli c mod eth2 connection.zone napt_trusted

[root@jukebox2 ~]# systemctl restart network  <== ネットワークを再起動する

[root@jukebox2 ~]# firewall-cmd --reload   <== ファイアウォール設定を反映させる
success
[root@jukebox2 ~]# firewall-cmd --get-active-zone  <== 現在のアクティブなゾーンを確認
nat_trusted
  interfaces: eth1
napt_trusted
  interfaces: eth2
lan_trusted
  interfaces: eth0
[root@jukebox2 ~]# 

3つのポートが所属するゾーン名を変更したところで、NAPTに関するファイアウォールのルールを追加する.前回のNATはファイアウォールのダイレクトルールという設定方法を使って実装しているが、今回のNAPTではゾーンに対してNAPTのルールとポートフォワーディングルールを適用することにする.



[root@jukebox2 ~]# firewall-cmd --direct --get-all-rules   <== 現在のダイレクトルールの設定内容を確認
ipv4 nat POSTROUTING_direct 0 -s 192.168.10.101 -j SNAT --to 192.168.100.51
ipv4 nat PREROUTING_direct 0 -d 192.168.100.51 -j DNAT --to 192.168.10.101
[root@jukebox2 ~]#

[root@jukebox2 ~]# firewall-cmd --zone=lan_trusted --query-masquerade
no
[root@jukebox2 ~]# firewall-cmd --zone=nat_trusted --query-masquerade
no
[root@jukebox2 ~]# firewall-cmd --zone=napt_trusted --query-masquerade
no

[root@jukebox2 ~]# firewall-cmd --zone=napt_trusted  --add-masquerade --permanent
success
[root@jukebox2 ~]# firewall-cmd --zone=lan_trusted  --add-masquerade --permanent
success
[root@jukebox2 ~]# firewall-cmd --reload
success
[root@jukebox2 ~]# firewall-cmd --zone=napt_trusted --query-masquerade
yes
[root@jukebox2 ~]# firewall-cmd --zone=lan_trusted --query-masquerade
yes


前回と同様、これらのコマンドや設定の細かい内容については気にすること無く、単純なおまじないとして実行して欲しい.この状態で、”eth2″ のネットワーク内の機器から外部の家庭内LAN(“eth0″側)や更に外側(インターネット)のネットワークへ通信可能となっている筈だ.勿論、この状態では “eth2” のネットワークから外部方向への一方的な通信(outbound: 発信接続)しか許されていないので、家庭内LAN(“eth0″側)からは”eth2” のネットワークは一切アクセスできない状態だ.


TestPC Network Settings 2
Test PCのIPアドレスを192.168.20.101/24 に設定してNAPT機能をテスト

External Web Access Test
LAN側に置かれた”smokeping”サーバや外部のインターネットサイトへも問題無く接続できている

TestPC NFS Mounted Volume
勿論、APU2C4上のNFSボリュームも直接アクセス可能だ

LAN側からのアクセス経路の設定(ポートフォワーディング:静的NAPT)


NAPT機能が上手く実装できたところで、LAN側からNAPTの内側のネットワーク内の機器へアクセスするために、ファイアウォールに穴を開ける(通信を許可させる)設定を実施することにしよう.今回はNAT/NAPTで行ったダイレクトルールを設定するのではなく、もう少し簡単なゾーン間にポートフォワーディング転送ルールを追加する方法を採用することにする.


オーディオネットワークプレイヤーが使用しているプロトコルに応じたポートフォワーディング設定(mpdの場合、TCP/6600)を行えば良い.今回は例として、テストPC上のWEBサーバ(TCP/80)に対するポートフォワーディング設定を行ってみることにする.


先に、LAN側(“eth0”) のゾーンを “lan_trusted” に変更したのは、LAN側のゾーンだけにポートフォワーディング設定を適用させたかったためで、3つのポートが同じ”trusted”というゾーン設定では内側のオーディオネットワークに対しても適用されてしまうことになり、おかしな事になってしまうためだ.


LAN側(“eth0”)のゾーンに対して、テストPC(192.168.20.101)宛のWEBアクセス要求HTTP(TCP/80)が届いたら、それをオーディオ用のネットワーク側(“eth2″)にそのまま転送する設定(ポートフォワーディング)を施す.このためのファイアウォールコマンドは、”# firewall-cmd –zone=ext-trusted –permanent –add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.20.101” のようになるだろう.



[root@jukebox2 ~]# firewall-cmd --permanent --zone=lan_trusted --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.20.101
success
[root@jukebox2 ~]# firewall-cmd --permanent --zone=lan_trusted --add-forward-port=port=6600:proto=tcp:toport=6600:toaddr=192.168.20.101
success
[root@jukebox2 ~]# firewall-cmd --reload
success
[root@jukebox2 ~]# firewall-cmd  --list-all --zone=lan_trusted
lan_trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.20.101
	port=6600:proto=tcp:toport=6600:toaddr=192.168.20.101
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@jukebox2 ~]# firewall-cmd  --list-all --zone=napt_trusted
napt_trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: eth2
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@jukebox2 ~]# 

【注記】ゾーン “lan_trusted” に対して80番ポートをポートフォワードでNAPT用ネットワークの192.168.20.101 へ転送する設定を行うと、NAT用のネットワーク配下に置いたVolumio2に対して、LAN側からWEBコンソルを接続する場合に問題が発生する.これは、Volumio2のWEBコンソールがAJAXを多用しているため、LAN側のWEBブラウザとVolumio2との間で、NAT中継IP(192.168.100.51)を介さずに直接Volumio2(192.168.10.101)と tcp:80 でセッションを張ってしまう.ポートフォワード設定で tcp:80 を192.168.20.101 へ転送する設定を行っているので、Volumio2(192.168.10.101)へはAJAXセッションが張れないので、AJAXがタイムアウトエラーとなってWEBコンソール画面がいつまで経っても ”ぐるぐる” 状態のままになってしまう.


これを避ける方法としては、NAT側のVolumio2(192.168.10.101)に対するポートフォワーディング設定を追加しておけば良いだろう.


[root@jukebox2 ~]# firewall-cmd --permanent --zone=lan_trusted --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.10.101
success
[root@jukebox2 ~]# firewall-cmd  --list-all --zone=lan_trusted
lan_trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: port=6600:proto=tcp:toport=6600:toaddr=192.168.20.101
	port=80:proto=tcp:toport=80:toaddr=192.168.20.101
	port=80:proto=tcp:toport=80:toaddr=192.168.10.101
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@jukebox2 ~]# 

HTTP Port-forwarding Test
Test PC上のWEBサーバにLAN側のiMacからアクセスしてみる
(この場合のIPアドレスは、”eth0″ に付けられた実IPアドレス)


今回は、ポートフォワーディングの設定方法についてだけ説明したが、実際にVolumioなどのmpdオーディオプレイヤーを繋ぐ場合の設定は別途説明する予定だ.今回は、ポートフォワーディングで設定を行ってみたが、前回のNAT設定が理解できていれば、ポートフォワーディングではなくてNATで設定しても全く問題無いことがお解りだろうか.前回のNATのIPとは別のIP(例えば192.168.100.52)を設定して、宛先を 192.168.20.xxx とすれば良い.



DHCPサーバ、DNSプロキシ機能の実装


さて、NAPTとポートフォワーディング機能を実装できたところで、DHCPサーバ、DNSプロキシ機能を追加実装してみることにしよう.勿論、ポートフォワーディングを行うには、オーディオプレイヤー側はIPアドレス固定でなければ難しい(浮動IPアドレスに対応させるにはかなり高度なテクニックが必要)のだが、配下にネットワークスイッチを置き、無線LANのアクセスポイントや外付けNASなどを置いて、簡易オーディオ専用ネットワークとして利用する想定だ.勿論、音質的には好ましくはないのだが、それよりも使い勝手の向上を目指すという方向性だ.


APU2C4 Media Network Router
今回のNAPT機能によるオーディオネットワークの利用イメージ

普通の家庭用ブロードバンドルータには、DHCPサーバ、DNSプロキシ機能が実装されているので、ユーザはIPアドレスの設定やDNSの設定などを意識すること無く簡単に使えるのだが、今回はできるだけ簡単にこれらの機能を実装してみることにする.Linux OS なのでDHCPサーバとDNSサーバを個別に実装すれば良いだけの話なのだが、今回はこれらの機能を一体化した “dnsmasq” という簡易型のDNSフォワーダ&DHCPサーバソフトウェアアプリケーションが有るので、それを使ってこれらの機能を実装してみることにする.


“dnsmasq”の実装は簡単で、”yum -y install dnsmasq” でインストールするだけだ.後は、”/etc/hosts” に関連するホスト名とIPアドレスの組みあわせを追記し、”dnsmasq”の設定ファイル “/etc/dnsmasq.conf” に必要な設定を書き込むだけだ.但し、”/etc/dnsmasq.conf”の中身が膨大(約1000行)で雑然としていて、必要な設定項目を探し出すのが大変だ.


今回、”/etc/dnsmasq.conf”に設定した項目として、
 no-dhcp-interface=eth0 (115行目あたり)
 domain=openhome.home.yoko,192.168.20.0/24 (144行目あたり)
 dhcp-range=192.168.20.101,192.168.20.150,255.255.255.0,12h (157行目あたり)
 dhcp-option=option:router,192.168.20.254 (339行目あたり)
 dhcp-option=option:netmask,255.255.255.0 (追加)
 dhcp-option=option:ntp-server,133.243.238.243,133.243.238.163 (343行目あたり)

を設定している.”no-dhcp-interface” はDHCPサーバ機能を除外するインタフェース指定で、LAN側(“eth0”)を除外している.これは、既にブロードバンドルータ側でDHCPサーバ機能が働いているので、DHCPサービスの対象から除外している.原則として、DHCPサーバは同じLANセグメント内に1つしか置いてはいけないからだ.除外しておかないと、LAN側の機器が混乱してネットワークが大混乱となる可能性が高い.これらのパラメータを自分のネットワークに合わせて適宜変更すれば良いだろう.


“dnsmasq”が便利なのは、ホスト側(APU2C4のCentOS7)の”/etc/resolv.conf”情報を参照して、上位側(フォワーダー)にDNSクエリーを送ってくれる機能(DNSプロキシ)を簡単に実装してくれる.今回は、LAN側(“eth0”)のDHCPによる設定で得られた上位(ブロードバンドルータ)に設定されているDNSサーバ情報が、そのまま”dnsmasq”のDNSフォワーダに引き継がれることになる.この場合のオーディオネットワーク配下に置かれたDHCPクライアントには、”eth2″のIPアドレスがそのままDNSサーバとして利用することになる.勿論、DNS情報はクライアント側がDHCPでネットワークを設定するようになっていれば、自動で設定してくれるので、ユーザは何も意識する必要はない.



[root@jukebox2 network-scripts]# yum -y install bind-utils  <== DNS関連のツールをインストール
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * epel: mirror.dmmlabs.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Resolving Dependencies
--> Running transaction check
---> Package bind-utils.x86_64 32:9.9.4-61.el7 will be installed
--> Processing Dependency: bind-libs = 32:9.9.4-61.el7 for package: 32:bind-utils-9.9.4-61.el7.x86_64

 途中省略

Installed:
  bind-utils.x86_64 32:9.9.4-61.el7                                                                                                                 
Dependency Installed:
  bind-libs.x86_64 32:9.9.4-61.el7                                                                                                                  

Complete!

[root@jukebox2 network-scripts]# cat /etc/resolv.conf  <== 名前解決の設定状況を確認
# Generated by NetworkManager
search home.yoko
nameserver 192.168.100.11
nameserver 192.168.100.20
nameserver 2404:1a8:7f01:a::3
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 2404:1a8:7f01:b::3

[root@jukebox2 network-scripts]# yum install dnsmasq
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Resolving Dependencies
--> Running transaction check
---> Package dnsmasq.x86_64 0:2.76-5.el7 will be installed
--> Finished Dependency Resolution

 途中省略

Transaction test succeeded
Running transaction
  Installing : dnsmasq-2.76-5.el7.x86_64                                                                                                        1/1 
  Verifying  : dnsmasq-2.76-5.el7.x86_64                                                                                                        1/1 

Installed:
  dnsmasq.x86_64 0:2.76-5.el7                                                                                                                       

Complete!
[root@jukebox2 network-scripts]# 
[root@jukebox2 network-scripts]# vi /etc/hosts  <== "/etc/hosts" に必要な項目を追加

 ...
 
[root@jukebox2 network-scripts]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.254 mpd-gw
192.168.20.254 openhome-gw

[root@jukebox2 network-scripts]# 

[root@djukebox2]# vi /etc/dnsmasq.conf   <== "/etc/dnsmasq.conf" に必要な項目を設定
 
 ...
 
[root@jukebox2]# systemctl start dnsmasq
[root@jukebox2 ]# systemctl enable dnsmasq
Created symlink from /etc/systemd/system/multi-user.target.wants/dnsmasq.service to /usr/lib/systemd/system/dnsmasq.service.
[root@jukebox2]# 

[root@jukebox2]# systemctl status dnsmasq   <== "dnsmasq" の稼働状況を確認
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-08-25 21:09:52 JST; 13h ago
 Main PID: 1205 (dnsmasq)
   CGroup: /system.slice/dnsmasq.service
           └─1205 /usr/sbin/dnsmasq -k

Aug 25 21:09:52 jukebox2 dnsmasq[1205]: using nameserver 2404:1a8:7f01:b::3#53
Aug 25 21:09:52 jukebox2 dnsmasq[1205]: read /etc/hosts - 4 addresses
Aug 25 21:09:55 jukebox2 dnsmasq-dhcp[1205]: DHCPDISCOVER(eth2) 00:16:cb:8f:24:6c
Aug 25 21:09:55 jukebox2 dnsmasq-dhcp[1205]: DHCPOFFER(eth2) 192.168.20.115 00:16:cb:8f:24:6c
Aug 25 21:09:56 jukebox2 dnsmasq-dhcp[1205]: DHCPREQUEST(eth2) 192.168.20.115 00:16:cb:8f:24:6c
Aug 25 21:09:56 jukebox2 dnsmasq-dhcp[1205]: DHCPACK(eth2) 192.168.20.115 00:16:cb:8f:24:6c MB13W
Aug 26 07:46:46 jukebox2 dnsmasq-dhcp[1205]: DHCP packet received on eth2 which has no address
Aug 26 07:46:47 jukebox2 dnsmasq-dhcp[1205]: DHCPREQUEST(eth2) 192.168.20.115 00:16:cb:8f:24:6c
Aug 26 07:46:47 jukebox2 dnsmasq-dhcp[1205]: DHCPACK(eth2) 192.168.20.115 00:16:cb:8f:24:6c MB13W
Aug 26 07:52:49 jukebox2 dnsmasq-dhcp[1205]: DHCPRELEASE(eth2) 192.168.20.115 00:16:cb:8f:24:6c
[root@jukebox2 network-scripts]# 

前回のNATと今回のNAPTによるオーディオ専用ルータの作成について要点が理解できたであろうか.Linux OS のファイアウォール機能を駆使しなければならないので、多少Linuxを弄った程度の知識では、太刀打ちできなかったと思う.この辺は日頃Linuxを扱っている専門のITエンジニアでも困難を極める箇所なので、内容がわからなくてもあまり気にする必要はない.今回の内容をきちんと理解できる人は専門のITエンジニアだけかもしれない....


次回は、音質的な面では有利なmpdを、UPnP/OpenHomeインタフェースを使って市販のオーディオネットワークプレイヤー的な使い方ができるようにする仕組みを、今回のオーディオ用ルータに導入する方法を紹介することにする.これにより、”Kazoo”や”ifidata”などのポピュラーなネットワークオーディオコントローラを通じてmpdプレイヤーを操作することが可能となり、使い勝手が向上する.



実験君(NAT編)


先ずは、家庭内LAN上のiMacからNATルータ配下のネットワーク上に置かれたMPDプレイヤー(lightMPD)に対してきちんとアクセスできるかどうか確かめてみよう.lightMPDの設定を今回のNAT変換の仕様に合わせて、IPアドレスを 192.168.10.101(255.255.255.0)に設定する.gatewayは 192.168.10.254、DNSサーバはLAN側に置かれたDNSサーバ 192.168.100.11 としている.”lightmpd.conf” の内容を下記に示す.



#
[network]
	interface=eth0
	address=192.168.10.101
	netmask=255.255.255.0
	gateway=192.168.10.254
	nameserver=192.168.100.11
	domain=music.home.yoko

[ntp]
	server=ntp.nict.jp
	ntpd=no
	timezone=Asia/Tokyo

[nas:NASMusic]
	type=nfs
	host=192.168.100.20
	remotedir=volume2/NASData2T
	proto=tcp
	rsize=65536
	wsize=65536
#
#[nas:NASID2]
#	type=cifs
#	host=nashost2
#	remotedir=audio_data
#	remoteuser=usrid
#	remotepass=passwd
#	iocharset=utf8
#       file_mode=0644
#       dir_mode=0755
#       rsize=61440
#       wsize=65536

#[mpd]
#	load_module=mpd-0.19.14rt-native-dsd
#	db_file=/tmp/tag_cache
#	sticker_file=/tmp/sticker.sql
#	log_file=/dev/null
	
[mpd]
	load_module=mpd-0.19.14rt-native-dsd
	music_directory=NASMusic/Music
	playlist_directory=NASMusic/MPD/mpd-cubox/playlists
	db_file=NASMusic/MPD/mpd-cubox/tag_cache
	sticker_file=NASMusic/MPD/mpd-cubox/sticker.sql
#	log_file=NASMusic/MPD/mpd-cubox/mpd.log
	log_file=/dev/null

[httpd]
#  yes | no
	enable=yes
	port=80

[ympd]
#  yes | no
	enable=yes
	webport=8080
	mpdport=6600

[telnetd]
#  yes | no
	enable=yes
	port=23

[webconsole]
#  yes | no
#  start page:   http://thishost:${port}/index.html
	enable=yes
	port=9000

[cpuaffinity]
#  0   normal
#  1   cpu1:    usb irq handler
#  2   cpu1:    usb irq hadnler
#      cpu2:    mpd
	type=2


[irqpriority]
#       upper usb port (default)
#	2184000.usb=FIFO:99
#	lower usb port
#	2184200.usb=FIFO:99


[debug]
	interfaces=yes
	resolvconf=yes
	ntpd=yes
	ntpconf=yes
	ifconfig=yes
	cards=yes
	mounts=yes
	ps=yes
	mpdversion=yes
	date=yes
	ntpq=yes
	music=no
	messages=yes
	save=no

Cantata MPD-NAT Test
iMac上のMPDクライアント(Cantata)で問題無くアクセスできる事を確認

この場合の、MPDクライアント(Cantata)の設定は簡単で、MPDクライアントの接続先を単にLAN側のNAT変換用アドレスに設定すれば良い.勿論使い勝手は、MPDプレイヤーがLAN側に置かれている場合と違いはない.ついでに、世間ではポピューラーなMPDクライアントである、”Volumio2″ でも試してみよう.



Volumio2 NAT Playback
Volumio2のWEBインタフェースも同じIP(192.168.100.51)でアクセス可能だ

Volumio Direct Access
ルーティング情報が設定されていればクライアントの実IP(192.168.10.101)でもアクセス可能だ


今回のNATによるアクセスでは、LAN側に作成した玄関ポートのIPアドレス(192.168.100.51)にアクセスしたが、IPルータとしても機能しているので、MPDクライアント側の実IPアドレス(192.168.10.101)にアクセスしても繋ぐことは可能だ.但し、MPDクライアント側のネットワーク(192.168.10.0/24)に対するルーティングテーブルが上位のルータ(ブロードバンドルータ)やiMacなどのLAN側の機器に正しく設定されていればの話である.今回は、APU2C4のLAN側(”eth0″)インタフェースを固定IPアドレスではなく、DHCPによる自動設定にしてあるので、上位側のルータにMPDクライアント側のネットワーク(192.168.10.0/24)に対する宛先(Gateway)アドレスを設定するのは現実的ではない.


LAN側に作成した玄関ポート(192.168.100.51)はAPU2C4のLAN側(”eth0″)インタフェースのIPアドレスに依存しないので、常に固定されている玄関ポートのIPアドレスにアクセスすれば良い.



実験君(NAPT編)


NATの場合と同じように “Volumio2” で実験環境を作るが、”Volumio2″のIPアドレスを 192.168.20.101 に設定しておく.NAPTポート(“eth2”)の先に家庭用のL2SWを接続し、そこから “Volumio2” とテスト用のPC(DHCPで設定)を繋いでいる.



NAPT MPD Test
NAPT環境でのMPDテスト用にL2SWを繋いで実験

Cantata NAPT Test
Cantataの設定では、LAN側(“eth0”)のポートのIPアドレスを指定する

Volumio WEB Console
Volumio2のWEBコンソールアクセスも問題無いように思えたが...

Volumio NAPT XHR Error
LAN側のiMacからVolumio2のWEBコンソールへのアクセスに問題発生

LAN側のiMacからVolumio2のWEBコンソールへのアクセスに問題が発生した原因であるが、WEBブラウザのDeveloperツールで、エラーとなっている箇所を探した結果、AJAXの処理部分(XHR)が機能していないことが確認された.AJAX通信が行われていないのだ.この原因は簡単で、LAN側のiMacのWEBブラウザ上で実行される AJAX Javaスクリプトが、Volumio2サーバとAJAXで通信を行う必要があるが、その宛先IPアドレスがVolumio2サーバの実アドレス(192.168.20.101)となっている為である.iMac側がVolumio2のネットワーク(192.168.20.0/24)に関するルーティング情報を持っていないため、デフォルートルートに向けられたが、上位のルータ(NEC IX2215)にもVolumio2のネットワーク(192.168.20.0/24)に関するルーティング情報が登録されていなかったからだ.


これを解決する一番簡単な方法は、上位のルータ(NEC IX2215)にVolumio2のネットワーク(192.168.20.0/24)に関する宛先を登録すれば良い.



ix2215(config)# show run
! NEC Portable Internetwork Core Operating System Software
! IX Series IX2215 (magellan-sec) Software, Version 9.5.11, RELEASE SOFTWARE
! Compiled Mar 10-Fri-2017 19:04:04 JST #2
! Current time Aug 27-Mon-2018 00:59:24 JST
!
hostname ix2215
timezone +09 00
!
ntp server 133.243.238.164
ntp server 2001:3a0:0:2006::87:123
ntp server 2001:3a0:0:2001::27:123
ntp interval 3600
!
ip ufs-cache enable
ip route default Tunnel0.0
ip route 10.11.12.0/24 192.168.100.1
ip route 192.168.10.0/24 192.168.100.167
!
!
ipv6 ufs-cache enable
ipv6 dhcp duid-list duid-ll-ge0 00:03:00:01:00:60:b9:e3:db:fe
ipv6 dhcp duid-list duid-ll-ge1 00:03:00:01:00:0d:5e:c4:c3:4c
ipv6 dhcp enable

 ...

ix2215(config)# ip route 192.168.20.0/24  192.168.100.167 <== NAPT側への静的経路を追加
ix2215(config)# show run
! NEC Portable Internetwork Core Operating System Software
! IX Series IX2215 (magellan-sec) Software, Version 9.5.11, RELEASE SOFTWARE
! Compiled Mar 10-Fri-2017 19:04:04 JST #2
! Current time Aug 27-Mon-2018 02:06:48 JST
!
!
hostname ix2215
timezone +09 00
!

ntp server 133.243.238.164
ntp server 2001:3a0:0:2006::87:123
ntp server 2001:3a0:0:2001::27:123
ntp interval 3600

!
ip ufs-cache enable
ip route default Tunnel0.0
ip route 10.11.12.0/24 192.168.100.1
ip route 192.168.10.0/24 192.168.100.167
ip route 192.168.20.0/24 192.168.100.167
!
!
ipv6 ufs-cache enable
ipv6 dhcp duid-list duid-ll-ge0 00:03:00:01:00:60:b9:e3:db:fe
ipv6 dhcp duid-list duid-ll-ge1 00:03:00:01:00:0d:5e:c4:c3:4c
ipv6 dhcp enable


Volumio WEB Console On iMac
今度は無事iMacのWEBブラウザからVolumio2のWEBコンソールへアクセスできた