環境
セットアップ環境の詳細はラズパイ4にraspbian busterをセットアップを参照。
- Raspberry Pi 4 Model B (RAM 4GB)
- raspbian buster (2019-09-26-raspbian-buster.zip)
現象
ラズパイにssh接続すると、繋がるまでに時間がかかる。
原因
デフォルトがIPv6接続→IPv4接続の順となっており、IPv6接続のタイムアウトまでの時間がかかっていた。(セットアップ時にどっかミスったのかもしれないけど)
Windows Powershellから接続しても、他のLinuxから接続しても遅いためラズパイ側の問題だろうとあたりをつけた。
sshするときに-vオプションを付けて実行すると、デバッグ情報が表示できる。ここではWindowsからラズパイに接続しており、IPv6アドレスっぽい接続にタイムアウトで失敗したあと、IPv4で接続していることが分かる。
$ ssh -v ユーザ名@マシン名
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Connecting to マシン名 [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] port 22.
debug1: connect to address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx port 22: Connection timed out
debug1: Connecting to マシン名 [yyy.yyy.yyy.yyy] port 22.
debug1: Connection established.
改善方法
ラズパイの設定を変更する。
$ sudo vi /etc/sysctl.conf
sysctl.confに下記を追記する。
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
sysctl.confの変更を反映する。
$ sudo sysctl -p
下記コマンドでinet6という項目がないことを確認する。
$ ip a
一度、ssh接続を終了.
$ exit
再度sshで接続して確かめる。
$ ssh -v ユーザ名@マシン名
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Connecting to マシン名 [yyy.yyy.yyy.yyy] port 22.
debug1: Connection established.
( ..)φメモ
上記は、全インターフェースでIPv6を無効化している。特定のインターフェースのみ無効化したい場合は、/etc/sysctl.confへの追記項目を下記にすればよい。以下、eth0のみ無効にする例。
net.ipv6.conf.eth0.disable_ipv6 = 1