前回記事を書いた際、色々調べました。
あ、そんな感じになってるのね.…
と思ったことを記事にします。
ChromeOS上でLinuxが使えるということがどういうことなのか、今まであまり深く考えてこなかったのですが、自宅のネットワーク環境を何気なくLinuxのターミナル上でIPアドレスを確認したところ100.115.92.205/28と表示されました。
事前に宅内設置Wi-Fiルーターで確認したところ192.168.0.XX/24に接続されていることは確認していたので、100.115.92.205/28である筈がないことはすぐに気が付きました。
そして、なんとなく想像しました。ルーターに直接繋がっているのはChromeOSであって、その配下に位置するLinuxは物理的にはルーターと直接繋がるわけではない、ということか?
思ったより複雑だった
参考にさせていただいたサイトで書かれている表現もそのままコピーさせていただきます。
”今も謎であることに違いないのですが、ちょっと進んだ理解”を整理します。
細部は間違っているのかもしれませんが、おおよそのイメージを図示するとこんな感じではないかと思います。で、Linux環境からインターネット通信をする場合、図内に登場するChrome OS、Termina、Linuxという、PC内に存在するソフトウェア達が、あたかも物理的なネットワークで繋がるような感じで、IPアドレスを持って通信しているように振る舞っているということのようです。ちなみに、公式っぽい図が掲載されていますが、私には複雑過ぎて理解できなかった…。
個人的な新出単語は以下の通りです。
■Termina
ChromeOS内部で稼働している仮想イメージの名称です。この中でLinuxコンテナが動いているらしい。この仮想イメージはLinuxコンテナを立ち上げるために特化していて、一般的な仮想イメージが備えている機能の大半は削ぎ落とされている。
■仮想化 ↔ コンテナ
仮想化では複数のOS(WindowsやLinux)を単一のシステム上で同時に実行できる。
対してコンテナではOSのカーネルを共有しアプリケーション・プロセスを他の部分から独立させる。
■LXC:LinuX Containers(コンテナ)
オープンソースのコンテナ・プラットフォーム。
Linux コンテナとは何か - コンテナ技術の仕組みと歴史| Red Hat
■LXD:LinuX container Demon
Canonical社とUbuntuコミュニティによって開発が進められており、Linuxコンテナのマルチホスト対応をしている。
■Chromeシェル(crosh)
以下はDellのサポート技術情報文章からの抜粋です。
Chromeシェル(CROSH)は、Linux BASHまたはWindowsコマンド(cmd.exe)ターミナルと似た、コマンド・ライン・インターフェイスです。Chrome OSはLinuxベースですが、CROSHはほとんどのLinuxコマンドを認識しません。
内部のIPアドレス
参考にしたサイト情報を元に、先程の図に追記してみます。
「wlan0」はパソコンの物理的なWiFiインターフェース(wan側)。「vmtap0」はChromeOSから内側向き(LAN側)のインターフェース。「eth0」はTerminaからみてWAN側のインターフェース。「lxdbr0」はTerminaのLAN側のインターフェース。それらを経由してLinuxのインターフェース「eth0」はに到達する。外側と内側はルーターのWAN側の口とLAN側の口のようなイメージかと。
実機(Spin311)で検証
まず、Chrome OSにもターミナルが備わっています。(これも初めて知りました。)
起動方法は、Ctrl + alt + t。その名もcroshなるものが立ち上がります。ここでipaddrsを実行(たぶんWindowsのipconfig?)すると、私の環境では添付画像のようになりました。インターフェース名「wlan0」で192.168.0.26/24と表示されているのがWi-Fiルーターから割り当てられたIPアドレスだと思われます。それ以外に「lo」はループバックだとして、よくわからないインターフェース名が2つ「arcbr0」、「arc_wlan0」が出てきました。文献を見ている限り、androidに関連するインターフェースが見えているような気はします。
この後、Linuxターミナルを立ち上げ、再度「ipaddrs」を実行すると新たに「vmtap0」というインターフェースが登場します。これのIPアドレスは100.115.92.25/30。
この状態で「termina」に入ります。実行コマンドは「vsh termina」。その後「ifconfig」を実行します。(Linuxターミナルではifconfig使えないのに、ここで使えるとは。)
すると「lo」以外に「eth0」と「lxdbr0」というインターフェース名が登場します。
・eth0 : 100.115.92.26/30
・lxdbr0 : 100.115.92.193/28
Termina上で稼働しているコンテナを表示してみます。「lxc list」。すると、ついにLinuxターミナル上に出てくるIPアドレスが。
最後にterminaからユーザー名penguinでコンテナの中にログインします。
「lxc exec penguin bash」を実行。その後「ip addres show」を実行すると...。
ついにLinuxに割り当てられたIPアドレスに行き着きました。長かった...。
参考にさせていただいたサイト
Chromium OS Docs - Running Custom Containers Under Chrome OS
Chromebook Crostini の構造を簡単に辿る - Qiita
Dell™ ChromebookでのCROSH Diagnostics(診断)の使用 | Dell 日本
Linux コンテナとは何か - コンテナ技術の仕組みと歴史| Red Hat
How does networking work in a crostini container? Pentesting possible? : Crostini