8
18
2018
UPnP/OpenHome Music Server の自作(その4)
APU2C4をルータとして機能させる(構築編)
前回は、IPルーティング、NAT/NAPTの説明だけで終わってしまったので、本題に入る前に今回作成するミュージックサーバ兼オーディオ専用ルータの概要を確認しておくことにする.
【基本要件】
(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 ~]#
説明が長くなったので、続きは次回ということで...