CloudReady(PartII)

前回の記事でOpenVPN、独自CA証明書の取り込みをしたいと思ったので、調査結果を記事にしました。
結論
下記に点について調査したが、出来ると思う。。。という状態で調査終了とした。
- ovpnファイルは読み込むことは出来ないが、oncファイルは読み込み可能みたい。
- ただ、ovpnファイルを読み込みしたらうまいこと動かなかった
- ONCファイルインポート前にCA証明書を行った際に、CA証明書の読み込みはできたので、独自CA証明書が発行したサーバー証明書についても受け付けてくれそう。
OpenVPNファイル使えないか調査してみる
OpenVPNの中身を見てみる
OpenVPN接続する際、ファイルを使ってID・パスワードを指定なしない場合下記の情報がある
- openvpn接続時の設定(IPとかVPNのグローバルIDを使用するとかね)
- CA証明書
- サーバー証明書
- プライベートキー(おそらくこれで接続しているユーザを認識sてるんだろうね。)
OpenVPNのファイルを取り込むアプリとかない?
調べてみるとなさそうだね。
なので、諦めて下記の通りopenvpnコマンドで接続するってのが解決策何じゃないかな?と思い試行(これは失敗に終わります)
Setting up OpenVPN on Chromium OS / Google Chrome OS | StrongVPN
openvpnコマンドを使うまで
Linux有効化

Linuxを有効化する。
このとき記憶領域に空き容量が3G程度必要とされるようなので注意。

設定としては、イメージ名?とディスクサイズでした。
適当に指定して次にとすると、下記の通り、Linuxのインストールが行われます。

容量の指定があるってことは、そのへんに関してもDockerみたいに分離しているのかもね。
OpenVPNインストール
インストール完了後、ターミナルが出てきますので、openvpnのインストールを行っていきます。
sudo apt install openvpn
totugekiluna@penguin:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 2.0G 1.6G 334M 84% /
none 492K 0 492K 0% /dev
devtmpfs 1.4G 0 1.4G 0% /dev/tty
/dev/vdb 2.0G 1.6G 334M 84% /dev/kvm
tmpfs 100K 0 100K 0% /dev/lxd
tmpfs 100K 0 100K 0% /dev/.lxd-mounts
run 1.4G 28K 1.4G 1% /dev/.host_ip
/dev/root 170M 167M 0 100% /dev/.ssh/sshd_config
9p 1.9G 800K 1.9G 1% /mnt/chromeos
/dev/vda 48M 48M 0 100% /opt/google/cros-containers
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 8.2M 1.4G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
tmpfs 282M 16K 282M 1% /run/user/1000
ただ、CloudReady側のディスクが見つからないなぁ。と思っていたらCloudReady側から共有しておかないといけないんですね。
ファイルから右クリックで「Linuxに共有」ってすると共有できます。
共有したものは、/mnt/chromeos
OpenVPNに接続
totugekiluna@penguin:~$ sudo openvpn keys/router.ovpn
Sat Oct 24 04:01:51 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Sat Oct 24 04:01:51 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
Sat Oct 24 04:01:51 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]XXX.XXX.XXX.XXX:1194
Sat Oct 24 04:01:51 2020 UDP link local: (not bound)
Sat Oct 24 04:01:51 2020 UDP link remote: [AF_INET]XXX.XXX.XXX.XXX:1194
Sat Oct 24 04:01:52 2020 [server] Peer Connection Initiated with [AF_INET]XXX.XXX.XXX.XXX:1194
Sat Oct 24 04:01:53 2020 TUN/TAP device tun0 opened
Sat Oct 24 04:01:53 2020 Note: Cannot set tx queue length on tun0: Operation not permitted (errno=1)
Sat Oct 24 04:01:53 2020 /sbin/ip link set dev tun0 up mtu 1500
Sat Oct 24 04:01:53 2020 /sbin/ip addr add dev tun0 local 10.8.0.14 peer 10.8.0.13
RTNETLINK answers: File exists
Sat Oct 24 04:01:53 2020 ERROR: Linux route add command failed: external program exited with error status: 2
Sat Oct 24 04:01:53 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Sat Oct 24 04:01:53 2020 Initialization Sequence Completed
Sat Oct 24 04:04:23 2020 [server] Inactivity timeout (--ping-restart), restarting
Sat Oct 24 04:04:23 2020 SIGUSR1[soft,ping-restart] received, process restarting
Sat Oct 24 04:04:28 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]XXX.XXX.XXX.XXX:1194
Sat Oct 24 04:04:28 2020 UDP link local: (not bound)
Sat Oct 24 04:04:28 2020 UDP link remote: [AF_INET]XXX.XXX.XXX.XXX:1194
と、一見すると大丈夫なのですけど、CloudReady、LinuxともにグローバルIPが想定したものではないし、内部ネットワークに対しての接続が行えていない。
ChrominiumOSのLinuxってネイティブではないのか?
下記ブログに書いてありますが、どうもコンテナのようですね
開発環境としてChromiumOSを使ってみる(インストール編) - takapiのブログ
いずれにしても、使いたい機能が使えないので、他の方法を検討します。
他の方法を探してみる
Chromebook から OpenVPN(TLS-Auth、LZO圧縮有り)へ接続してみた - Qiita
ONCファイルってのがあるんですね。
ONCファイルを作ってみる
Chromebook から OpenVPN(TLS-Auth、LZO圧縮有り)へ接続してみた - Qiita
こちらをもとに作ってみます。
手動で作ってみたらうまく行かなかったので、なんかコンバーターないかな?と思ったら Convert OpenVPN config files to ChromeOS ONC filesがありましたのでそのまま使ってみることに
ONCコンバーターを使ってみる
docker-compose.yml
version: "3"
services:
converter:
build:
context: src
dockerfile: Dockerfile
entrypoint: python main.py --infile=router.ovpn --outfile=router.onc
volumes:
- ./src:/src
working_dir: /src
FROM python:alpine
RUN apk update && \
apk add openssl build-base libffi-dev gcc
RUN pip3 install pyOpenSSL
docker-compose run --rm converter
上記でoncファイルを出力します。
ONCをインポートする
chrome://network/#general にアクセスして、ONCファイルをインポートする。
結果やってみたけどダメでした。(証明書エラー)
本気で開発環境を整えるとしたらこの先原因調査してやるべきなんですけども、ベッドで使えたらいいかな?くらいの需要なので、今回は調査はここでとどめておきます。
P.S.
CloudReady関係ないけど、Raspberry Pi OSを最新化したらカーネルがcfsをサポートしていて超感動しました。