WSLのhostnameでLinux同士をSSH接続する方法
mDNSってなんですか?
関連記事:
WSLのLinux側からPodmanを利用する方法: ポッドマンが倒せない(5)
Distrodを使ってWSLでsystemdを動かす
前回の記事にてnpiperelayを介したLinux経由のアクセスを実現した。
ただ、実際使ってみるとやりたいことが実現できなかったり、
動作が遅かったりと不便な箇所も出てきている。
シェルを駆使すればどうにかなるのかもしれないが、
それより他の手段を探した方が良さそうだ。
単純にローカルIPを使用すれば接続自体は可能。
ただし、この方法はIPが動的に変わるWSLでは不便なところが多い。
その上、インスタンス複数立ち上げたらこの手法はとれない。
そこでドメイン名を使って接続する方法はないかと探したら条件付きだが可能っぽい
今回は特定のLinuxにhostnameをつけて接続する方法をやってみる。
肝になるソリューションは
ちなみに、IPを調べる方法は、
wsl -d [distro] -e hostname -I
それからWSLの仕様上IPは一つで各Distroに割り振るのは無理っぽい
(誰かやり方おせーて)
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
準備
今回はホストにUbuntu(focal)、ゲストにDebian(bullseye)を使用。
以下のような接続が出来るようにする
各WSLのインストール
wsl --install debian
wsl --install Ubuntu-20.04wsl --install
アップデートを済ませておく
sudo apt update && sudo apt upgrade -y
ホスト名の設定
Ubuntu側にホスト名を設定する
ホスト名は ubuntuhost
[network]
hostname=ubuntuhost
[boot]
systemd=true
Ubuntuを再起動
wsl -t Ubuntu-20.04;wsl -d Ubuntu-20.04
avahiのインストール
インストール
mDNS(マルチキャストDNS)というソリューションがある。
これはDNSサーバを立てて名前解決していた従来の形ではなく、
ローカルエリアネットワークに一斉に問い合わせをして、
クライアント側からIPを返却させるという方式
.localというドメインで各クライアントに接続するというもの。
そのモジュールをであるavahiおよびlibnss-mdnsをインストールする。
sudo apt install -y avahi-daemon libnss-mdns
sudo service --status-all
[ + ] avahi-daemon
[ + ] ssh
動作確認
Powershellで動作確認
Resolve-DnsName ubuntuhost
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
ubuntuhost.local AAAA 120 Answer fe80::215:5dff:fe0b:fa24
ubuntuhost.local A 120 Answer 172.20.45.43
(・∀・) ひけた
IPV6でも引けるのがいい
他OS(Debian)からSSH接続
さて、特定のLinuxにhostnameでアクセスできるのなら、
SSHなどどのプロトコルでも基本的には大丈夫なはず。
wsl -d debian
sudo apt install -y dnsutils ssh
nslookup ubuntuhost.local
Server: 172.20.32.1
Address: 172.20.32.1#53
Non-authoritative answer:
Name: ubuntuhost.local
Address: 172.20.45.43
Name: ubuntuhost.local
Address: fe80::215:5dff:fe0b:fa24
ssh dozo@ubuntuhost.local
The authenticity of host 'ubuntuhost.local (172.20.45.43)' can't be established.
ECDSA key fingerprint is SHA256:kg2PNabW0gT5J/AoIfhTq0uoPQsDEiwn6jLYjuBCeno.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ubuntuhost.local,172.20.45.43' (ECDSA) to the list of known hosts.
(-_-;)鍵認証じゃないと怒られた
まぁ接続が出来たのはわかったのでヨシ!
------------------- ↓ 後書はここから ↓-------------------
hostnameを使って特定のWSLに接続を試みたわけだが、
各WSLインスタンスにhostnameを設定すれば相互に接続できるのかと言えばそうではない。
理由はIPが全部共通だから。
なので特定のインスタンスをサーバー機能としてクライアントサーバー的に運用するのが良いかもしれない。
Fedora
sudo dnf install -y avahi nss-mdns
sudo systemctl enable --now avahi-daemon
Discussion