Debian 9.3 Stretchが入ったディープラーニング用マシンでネットワーク設定を行います。

本記事ではメインPCからの操作に必要となるsshの設定とIPv6の無効化を行います。

前回の続きです。

ipアドレスの固定

我が家のLAN環境ではIPアドレスはルーターからDHCPで割り当てています。ここでは、この割り当てアドレスを固定します。

設定などはルーター準拠になるでしょうが、その際必要な情報(MACアドレスなど)は次のコマンドで調べることができます。

$ ip addr show

link/etherの直後のアドレスがMACアドレスに対応します。
今回はこのMACアドレスを使って、DHCPサーバー側で割り当てIPを固定化しました。

ipv6の無効化

LAN環境においてはIPv6は不要と思われるので無効化しておきます。 次のリンク先を参考に設定を行います。

sysctl.confの設定(単品では失敗)

/etc/sysctl.confの最終行に次を追加します。

net.ipv6.conf.all.disable_ipv6 = 1

内容を反映し、IPv6が無効となっているか確認します。

$ sudo sysctl -p
$ sudo ip addr show

ただ、sysctlを使えばipv6は無効になるものの、 再起動すると再度ipv6のアドレスが有効になってしまっています。 再度sysctlを使えばいいのですが、起動のたびに手動で行うのは手間なので別の方法で調整します。

sysctl.d/xxx.confの設定(単品では失敗)

参考ページにあったMethod 2を試してみます。 /etc/sysctl.d/disable-ipv6.confというファイルを新規に作成し、次の1行を記入します。

net.ipv6.conf.all.disable_ipv6 = 1

そして反映と確認を行います。

$ sudo sysctl -p -f /etc/sysctl.d/disable-ipv6.conf
$ sido ip addr show

こちらもダメでした。手動で読み込んだ際には設定は反映されるものの、読み込まないとipv6が有効になったままとなっています。 このディレクトリには/etc/sysctl.d/99-sysctl.confが存在しますが、これはsysctl.confへのシンボリックリンクであるため、やっていることは先に行ったものと同じでした。

原因調査

sysctl設定の上書き

原因がよくわかりませんがひとまず調査を行い、CentOSで似たような事例にあっている人を確認しました。 Tunedのようにsysctrlを上書きするサービスが存在するようです。 ただ、私の環境ではTunedはなかったので別のサービスが上書きしている可能性がある模様です。

PC起動後、sysctlのサービスの軌道状況を確認してみると、activeになっており、起動自体は行えています。

$ sudo systemctl status systemd-sysctl.service

この状況で再度サービスを再開してみます。

sudo systemctl restart systemd-sysctl.service

すると、ipv6無効になっていることが確認できました。 別のサービスがsysctl.confの読み込みを行っているのがほぼ確定とみてよいでしょう。

上記はラズパイで同様のケースと思われるものです。sysctl.confはboot時に読み込まれるのですが、kernelがipv6のモジュールをそのあとに読み込んでいるのではないか、という話でした。

sysctlの再読み込みによる対処

この状況の対処方法として、モジュールの読み込みが一通り終わった後に再度sysctlコマンドを実行することにします。

service登録してあれこれやるのは面倒なので、rc.localを使って実行させます。 ディレクトリは消えているものの、c.localを実行可能にしていたら自動実行が可能となっています。 $ sudo systemctl status rc-localでサービスの状況を確認可能で、/lib/systemd/system/rc-local.serviceが本体みたいです。

$ sudo vim /etc/rc.local
$ sudo chomod +x /etc/rc.local
$ sudo systemctl start rc-local
$ sudo systemctl status rc-local

上記コマンドで/etc/rc.localを新規作成し、次のような記述を行います。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# restart systemctl for reload settings (disable ipv6 etc)
# sudo systemctl restart systemd-sysctl.service # final way
sysctl -p -f /etc/sysctl.d/disable-ipv6.conf

exit 0

これで起動時にipv6が無効となっていることが確認できましたた。 大分手間取りましたが、SSHの設定に移ります。

sshの設定

/etc/ssh/sshd_configを編集して、次の内容を追加します。

Port xxxx
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
Match Address 192.168.0.*
     PasswordAuthentication yes
Allowsers xxxx

内容としては、sshログインのPortを変更、rootログイン禁止、パスワード認証禁止(公開鍵のみ)、特定ユーザーのみログイン許可といった内容の他、 IPアドレス照合を行ってローカルの特定ユーザーのみログイン可能にします。 なお、ローカルだとパスワード認証でもOKになっていますが、気にされる方はここも公開鍵のみとしておくのがよいでしょう。

これらの編集後、サービスを再起動します。

$ sudo systemctl restart ssh

いまさらですが自動起動のOnOffは次のsystemctlコマンドのオプション指定で行えます。

$ sudo systemctl enable sshd
$ sudo systemctl status sshd
$ sudo systemctl disable sshd

参考にさせて頂いたサイトは以下のページとなります。

今後

まだネットワーク設定はこれで終わりません。
次回以降も引き続きFireWallなどの設定を行っていきます。