東京駅(丸の内口)


Date/Time: 2021:02:07 12:32:19
Camera: Apple
Model: iPhone SE (1st generation)
Exporsure Time: 1/1261
FNumber: 2.2
Aperture Value: 2.3
Focal Length: 4.2

Close

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

8

18

2018

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

APU2C4をルータとして機能させる(構築編)


前回は、IPルーティング、NAT/NAPTの説明だけで終わってしまったので、本題に入る前に今回作成するミュージックサーバ兼オーディオ専用ルータの概要を確認しておくことにする.


APU2C4 Audio Server and Router

【基本要件】


(1)家庭内LAN側インタフェース (“eth0”)
 ・家庭内のブロードバンドルータのLAN側インタフェースで定義されているネットワークに繋ぐ
 ・ネットワークパラメータはDHCPにより自動取得する
 ・Zeroconf技術を導入しLANネットワーク内の名前解決を自動で行えるようにする(Avahiを導入)
 ・


(2)ミュージック専用インタフェース1 (“eth1”)
 ・音質最優先のネットワークとするため、不要なネットワーク通信は全て排除する
 ・ネットワークパラメータは全て固定で運用する
 ・mpdの利用を前提とする
 ・


(3)ミュージック専用インタフェース2 (“eth2”)
 ・それなりに音質も重視するが利便性についも拘る
 ・ネットワークパラメータは全てDHCPで運用する
 ・UPnP系のミュージックプレイヤーを導入する前提
 ・


(注)NICのインタフェース名は、ここでは前回の記事で説明したように旧形式の名前 “eth0〜eth2” で説明しているが、インタフェース名を変えていない場合は、デフォルトの “enp1s0”, “enp2s0”, “enp3s0″に置き換えて欲しい


ミュージック専用インタフェース(”eth1, eth2″)の設定


今回はLAN側のインタフェースは既に設置されているブロードバンドルータのLAN側DHCPサーバ機能によって、自動的にIPアドレスやDefault Route、DNSサーバなどの情報を取得するという前提なので、”eth0″ をDHCPに設定する.既にOSインストール時にインストーラの設定でネットワークインタフェースを設定済みであれば設定変更は不要だ.


CentOS 7 系列から、ネットワーク関係の設定方法が変わったということは前回の記事で簡単に触れたが、CentOS 6 系列の時のように、ネットワークインタフェースの設定ファイル “/etc/sysconfig/network-scripts/ifcfg-xxxx” を変更する方法も使えるようだが、この方法は 非推奨になっているようなので、今回は、推奨されているネットワーク設定コマンドによる方法を紹介する.


今回はヘッドレスでGUIインタフェースが使えないので、勿論テキストベースのコマンドを使用する.テキストベースではあるが、対話型ユーザインタフェースの “nmtui” コマンドと完全なコマンドラインの “nmcli” の二種類ある.対話型ユーザインタフェースはカーソルの制御をしたり、画面の遷移がかったるいので、今回はシンプルに コマンドラインの “nmtui” コマンド を使う.


先ずは、”ip addr” コマンドでネットワークインタフェースの状態を確認する.


[root@jukebox2 ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:42:e9:40 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.161/24 brd 192.168.100.255 scope global noprefixroute dynamic eth0
       valid_lft 83332sec preferred_lft 83332sec
    inet6 2409:10:ad40:xxxx:xxxx:xxxx:86ca:d8ec/64 scope global noprefixroute dynamic 
       valid_lft 10841sec preferred_lft 9041sec
    inet6 fe80::a56d:93e:8842:cb6c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:42:e9:41 brd ff:ff:ff:ff:ff:ff
4: eth2:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:42:e9:42 brd ff:ff:ff:ff:ff:ff

次に、”nmcli connection” コマンドで現在のネットワーク設定関係の情報を表示してみる.


[root@jukebox2 ~]# nmcli connection 
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  593b12cb-e14a-39f2-9e1f-bdbb112cf622  ethernet  eth0   
Wired connection 2  1da0dba6-2faa-30c1-9b22-8b48e265e587  ethernet  --     
Wired connection 3  19c3c2ce-43a5-352b-950b-184564bae4df  ethernet  --     
enp1s0              69d7345e-f270-4877-a341-18420e370d74  ethernet  --     
enp2s0              a30c672d-4112-4454-a245-9c121db9ba83  ethernet  --     
enp3s0              7b8e42a6-d6f7-4878-bd58-70263e63d68a  ethernet  --     

デバイス “eth0” は “Wired connection 1″ という名前(プロファイル)で管理されているようだが、”/etc/sysconfig/network-scripts/” 配下には、このプロファイル名が見当たらない.有るのは変更前のデフォルトの “ifcfg-enp1s0”, “ifcfg-enp2s0”, “ifcfg-enp3s0” が残っているだけだ.どうやらきちんと手順に従ってプロファイルを作り直した方が良さそうだ.


[root@jukebox2 ~]# cd /etc/sysconfig/network-scripts/
[root@jukebox2 network-scripts]# ls -la
total 252
drwxr-xr-x. 1 root root   806 Aug 18 11:09 .
drwxr-xr-x. 1 root root   542 Aug 18 13:09 ..
-rw-r--r--. 1 root root   311 Aug 18 11:09 ifcfg-enp1s0
-rw-r--r--. 1 root root   312 Aug 18 11:09 ifcfg-enp2s0
-rw-r--r--. 1 root root   312 Aug 18 11:09 ifcfg-enp3s0
-rw-r--r--. 1 root root   254 Jan  3  2018 ifcfg-lo
lrwxrwxrwx. 1 root root    24 Aug 18 10:57 ifdown -> ../../../usr/sbin/ifdown
-rwxr-xr-x. 1 root root   654 Jan  3  2018 ifdown-bnep
-rwxr-xr-x. 1 root root  6569 Jan  3  2018 ifdown-eth
-rwxr-xr-x. 1 root root   781 Jan  3  2018 ifdown-ippp
-rwxr-xr-x. 1 root root  4540 Jan  3  2018 ifdown-ipv6
lrwxrwxrwx. 1 root root    11 Aug 18 10:57 ifdown-isdn -> ifdown-ippp
-rwxr-xr-x. 1 root root  2102 Jan  3  2018 ifdown-post
-rwxr-xr-x. 1 root root  1068 Jan  3  2018 ifdown-ppp
-rwxr-xr-x. 1 root root   870 Jan  3  2018 ifdown-routes
-rwxr-xr-x. 1 root root  1456 Jan  3  2018 ifdown-sit
-rwxr-xr-x. 1 root root  1621 Mar 18  2017 ifdown-Team
-rwxr-xr-x. 1 root root  1556 Mar 18  2017 ifdown-TeamPort
-rwxr-xr-x. 1 root root  1462 Jan  3  2018 ifdown-tunnel
lrwxrwxrwx. 1 root root    22 Aug 18 10:57 ifup -> ../../../usr/sbin/ifup
-rwxr-xr-x. 1 root root 12415 Jan  3  2018 ifup-aliases
-rwxr-xr-x. 1 root root   910 Jan  3  2018 ifup-bnep
-rwxr-xr-x. 1 root root 13442 Jan  3  2018 ifup-eth
-rwxr-xr-x. 1 root root 12075 Jan  3  2018 ifup-ippp
-rwxr-xr-x. 1 root root 11893 Jan  3  2018 ifup-ipv6
lrwxrwxrwx. 1 root root     9 Aug 18 10:57 ifup-isdn -> ifup-ippp
-rwxr-xr-x. 1 root root   650 Jan  3  2018 ifup-plip
-rwxr-xr-x. 1 root root  1064 Jan  3  2018 ifup-plusb
-rwxr-xr-x. 1 root root  4981 Jan  3  2018 ifup-post
-rwxr-xr-x. 1 root root  4154 Jan  3  2018 ifup-ppp
-rwxr-xr-x. 1 root root  2001 Jan  3  2018 ifup-routes
-rwxr-xr-x. 1 root root  3303 Jan  3  2018 ifup-sit
-rwxr-xr-x. 1 root root  1755 Mar 18  2017 ifup-Team
-rwxr-xr-x. 1 root root  1876 Mar 18  2017 ifup-TeamPort
-rwxr-xr-x. 1 root root  2711 Jan  3  2018 ifup-tunnel
-rwxr-xr-x. 1 root root  1836 Jan  3  2018 ifup-wireless
-rwxr-xr-x. 1 root root  5419 Jan  3  2018 init.ipv6-global
-rw-r--r--. 1 root root 19948 Jan  3  2018 network-functions
-rw-r--r--. 1 root root 31027 Jan  3  2018 network-functions-ipv6
[root@jukebox2 network-scripts]# less ifcfg-enp1s0

先ずは、デフォルトのプロファイル名 “enp1s0”, “enp2s0”, “enp3s0″ と”Wired connection 1”, “Wired connection 2”, “Wired connection 3″ を削除する.この際に、”Wired connection 1” は現行のActiveなネットワークなので、sshからログインしている場合は、削除と同時にセッションが切れてしまうので、この作業は、シリアルコンソール画面から行うこと.


・プロファイルの削除: nmcli connection delete <プロファイル名>
・プロファイルの追加: nmcli connection add type <タイプ名> ifname <インタフェース名> con-name <プロファイル名>

”タイプ名” は “ethernet” 、”インタフェース名” は “eth0″、 ”プロファイル名” は”インタフェース名”と同じ “eth0” を指定する.



[root@jukebox2 ~]# nmcli connection delete  "Wired connection 1"
Connection 'Wired connection 1' (593b12cb-e14a-39f2-9e1f-bdbb112cf622) successfully deleted.
[root@jukebox2 ~]# nmcli connection delete  "Wired connection 2"
Connection 'Wired connection 2' (1da0dba6-2faa-30c1-9b22-8b48e265e587) successfully deleted.
[root@jukebox2 ~]# nmcli connection delete  "Wired connection 3"
Connection 'Wired connection 3' (19c3c2ce-43a5-352b-950b-184564bae4df) successfully deleted.
[root@jukebox2 ~]# nmcli connection delete enp1s0 
 ...

次に、新しいコネクションプロファイルを作成する.


[root@jukebox2 ~]# nmcli connection add type ethernet ifname eth0 con-name eth0
Connection 'eth0' (c7460606-c9af-4767-8858-55e10d8e8521) successfully added.
[root@jukebox2 ~]# nmcli connection add type ethernet ifname eth1 con-name eth1
Connection 'eth1' (c8e3ca1a-3394-4ffd-89dd-9c47ddec5171) successfully added.
[root@jukebox2 ~]# nmcli connection add type ethernet ifname eth2 con-name eth2
Connection 'eth2' (c4daf0cb-338b-4c5e-9e0c-6ccc108cc85c) successfully added.

[root@jukebox2 ~]# nmcli connection
NAME  UUID                                  TYPE      DEVICE
eth0  c7460606-c9af-4767-8858-55e10d8e8521  ethernet  eth0
eth1  c8e3ca1a-3394-4ffd-89dd-9c47ddec5171  ethernet  --
eth2  c4daf0cb-338b-4c5e-9e0c-6ccc108cc85c  ethernet  --
[root@jukebox2 ~]#  

新しいコネクションプロファイルが “eth0”, “eth1”, “eth2″ という名前で作成されたので、このプロファイルにネットワークの構成情報を設定する.”eth0″は DHCP、”eth1″ は固定(Static)、”eth2” も固定にする.

 ・アドレスのDHCP設定: nmcli connection modify <プロファイル名> ipv4.method auto99-sysctl.conf  ・アドレスの手動設定: nmcli connection modify <プロファイル名> ipv4.method manual ipv4.addresses xxx.xxx.xxx.xxx/yy

 ・GWの設定: nmcli connection modify <プロファイル名> ipv4.gateway xxx.xxx.xxx.xxx
 ・DNSの設定: nmcli connection modify <プロファイル名> ipv4.dns xxx.xxx.xxx.xx


[root@jukebox2 ~]# nmcli connection modify eth0 ipv4.method auto
[root@jukebox2 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.10.254/24
[root@jukebox2 ~]# nmcli connection modify eth2 ipv4.method manual ipv4.addresses 192.168.20.254/24

 reboot (再起動)

[root@jukebox2 ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:42:e9:40 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.161/24 brd 192.168.100.255 scope global noprefixroute dynamic eth0
       valid_lft 86368sec preferred_lft 86368sec
    inet6 2409:10:ad40:xxx:xxx:xxx:69bc:1ffc/64 scope global noprefixroute dynamic 
       valid_lft 11835sec preferred_lft 10035sec
    inet6 fe80::8298:6f8c:648a:b350/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:42:e9:41 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.254/24 brd 192.168.10.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::31e9:b2e3:a936:4456/64 scope link tentative 
       valid_lft forever preferred_lft forever
4: eth2:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:42:e9:42 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.254/24 brd 192.168.20.255 scope global noprefixroute eth2
       valid_lft forever preferred_lft forever
    inet6 fe80::b505:7d2a:720d:a52/64 scope link tentative 
       valid_lft forever preferred_lft forever
[root@jukebox2 ~]# cd /etc/sysconfig/network-scripts
[root@jukebox2 network-scripts]# ls -la
total 252
drwxr-xr-x. 1 root root   794 Aug 18 16:06 .
drwxr-xr-x. 1 root root   542 Aug 18 13:09 ..
-rw-r--r--  1 root root   278 Aug 18 17:11 ifcfg-eth0
-rw-r--r--  1 root root   353 Aug 18 17:17 ifcfg-eth1
-rw-r--r--  1 root root   310 Aug 18 17:14 ifcfg-eth2
-rw-r--r--. 1 root root   254 Jan  3  2018 ifcfg-lo
lrwxrwxrwx. 1 root root    24 Aug 18 10:57 ifdown -> ../../../usr/sbin/ifdown
-rwxr-xr-x. 1 root root   654 Jan  3  2018 ifdown-bnep
-rwxr-xr-x. 1 root root  6569 Jan  3  2018 ifdown-eth
-rwxr-xr-x. 1 root root   781 Jan  3  2018 ifdown-ippp
-rwxr-xr-x. 1 root root  4540 Jan  3  2018 ifdown-ipv6
lrwxrwxrwx. 1 root root    11 Aug 18 10:57 ifdown-isdn -> ifdown-ippp
-rwxr-xr-x. 1 root root  2102 Jan  3  2018 ifdown-post
-rwxr-xr-x. 1 root root  1068 Jan  3  2018 ifdown-ppp
-rwxr-xr-x. 1 root root   870 Jan  3  2018 ifdown-routes
-rwxr-xr-x. 1 root root  1456 Jan  3  2018 ifdown-sit
-rwxr-xr-x. 1 root root  1621 Mar 18  2017 ifdown-Team
-rwxr-xr-x. 1 root root  1556 Mar 18  2017 ifdown-TeamPort
-rwxr-xr-x. 1 root root  1462 Jan  3  2018 ifdown-tunnel
lrwxrwxrwx. 1 root root    22 Aug 18 10:57 ifup -> ../../../usr/sbin/ifup
-rwxr-xr-x. 1 root root 12415 Jan  3  2018 ifup-aliases
-rwxr-xr-x. 1 root root   910 Jan  3  2018 ifup-bnep
-rwxr-xr-x. 1 root root 13442 Jan  3  2018 ifup-eth
-rwxr-xr-x. 1 root root 12075 Jan  3  2018 ifup-ippp
-rwxr-xr-x. 1 root root 11893 Jan  3  2018 ifup-ipv6
lrwxrwxrwx. 1 root root     9 Aug 18 10:57 ifup-isdn -> ifup-ippp
-rwxr-xr-x. 1 root root   650 Jan  3  2018 ifup-plip
-rwxr-xr-x. 1 root root  1064 Jan  3  2018 ifup-plusb
-rwxr-xr-x. 1 root root  4981 Jan  3  2018 ifup-post
-rwxr-xr-x. 1 root root  4154 Jan  3  2018 ifup-ppp
-rwxr-xr-x. 1 root root  2001 Jan  3  2018 ifup-routes
-rwxr-xr-x. 1 root root  3303 Jan  3  2018 ifup-sit
-rwxr-xr-x. 1 root root  1755 Mar 18  2017 ifup-Team
-rwxr-xr-x. 1 root root  1876 Mar 18  2017 ifup-TeamPort
-rwxr-xr-x. 1 root root  2711 Jan  3  2018 ifup-tunnel
-rwxr-xr-x. 1 root root  1836 Jan  3  2018 ifup-wireless
-rwxr-xr-x. 1 root root  5419 Jan  3  2018 init.ipv6-global
-rw-r--r--. 1 root root 19948 Jan  3  2018 network-functions
-rw-r--r--. 1 root root 31027 Jan  3  2018 network-functions-ipv6
[root@jukebox2 network-scripts]# cat ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=c7460606-c9af-4767-8858-55e10d8e8521
DEVICE=eth0
ONBOOT=yes
[root@jukebox2 network-scripts]# cat ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=c8e3ca1a-3394-4ffd-89dd-9c47ddec5171
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.10.254
PREFIX=24
[root@jukebox2 network-scripts]#    

私の環境ではIPv6環境を構築しているので、”eth0″ に自動でIPv6アドレスが設定されているが、今回のネットワークオーディオ専用ルータではIPv6を一切使わないので、今回はIPv6を強制的にOFFにしておくことにする.やり方は幾つかあるが、簡単な方法を紹介しておく.


“/etc/sysctl.conf” 内に、下記の2行を書き加えておく.”

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1


[root@jukebox2 sysctl.d]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
[root@jukebox2 sysctl.d]# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
[root@jukebox2 sysctl.d]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:42:e9:40 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.161/24 brd 192.168.100.255 scope global noprefixroute dynamic eth0
       valid_lft 86268sec preferred_lft 86268sec
3: eth1:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:42:e9:41 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.254/24 brd 192.168.10.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
4: eth2:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:42:e9:42 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.254/24 brd 192.168.20.255 scope global noprefixroute eth2
       valid_lft forever preferred_lft forever

LinuxカーネルでのIPパケット転送の有効化


ここまでの作業でAPU2C4の3つ有るNICインタフェースのIPアドレス設定が行えたが、最後にLinux OSをIPルータとして機能させるには、LinuxカーネルがIPパケットを転送できるように設定を行う必要がある.先程のIPv6無効化の場合と同じように、”/etc/sysctl.conf” 内に次の1行を追加設定する.追加後に再起動すれば、パケット転送が有効化されているはずだ.

net.ipv4.ip_forward = 1


[root@jukebox2 sysctl.d]# /sbin/sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
[root@jukebox2 sysctl.d]# echo "net.ipv4.ip_forward = 1" >>  /etc/sysctl.conf
[root@jukebox2 sysctl.d]# cat  /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.ip_forward = 1
 
 reboot(再起動)
 
[   20.600736] NFSD: starting 90-second grace period (net ffffffff9a6fc9c0)

CentOS Linux 7 (Core)
Kernel 3.10.0-862.11.6.el7.x86_64 on an x86_64

jukebox2 login: root
Password:
Last login: Sat Aug 18 18:09:28 on ttyS0
[root@jukebox2 ~]# /sbin/sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@jukebox2 ~]#     


説明が長くなったので、続きは次回ということで...