WSL2でVPN接続

WSL2でUbuntuを動かしてCiscoを使ってVPN接続しようとしたら存外に面倒だったという話。実際に実行した手順で雑にメモしておく。気が向いたら「こうすればよかったよね」案も示す。

夜な夜な書いているのでちょいちょい日本語がおかしい

 

 

目標

WSL2で動いているUbuntu20.04にCisco annyconnectを使ってVPN接続できるようにする。

 

環境

・WSL2を利用したUbuntu20.04

 - GUIは使えない

・PCは Windows11 / AMD Ryzen7 / メモリ16GB

 

注意

WinでVPN接続しているとWSLでネットワーク接続できないっぽいので、WinでVPN繋いでいたら切りましょう。ケースによるだろうし対処法もあるんだろうけど…

 

0.はじめに

$sudo apt update

$sudo apt upgrade

とりあえずこれはやっておきましょう

 

1.ネットワークが使えるか確認する

$ping youtube.com

┗なんかいろいろデータ来てるっぽかったらOK(どんどん行が追加されていればOK)

$name resolution failure とか言われたら $ping 8.8.8.8 を試す。

 ┗うまくいってる=DNSがしんでるので設定確認*

 ┗うまくいかない=ネットワークにつなげていないのでpower shellとかWin側から確認

 

*DNSを何とかするヒント:「WSL2 名前解決」とかでググると先人の知恵がある。雑に言えば、WSL2では毎度毎度新たにIPが振られてそれが問題起こしがちなので、 $resolv.conf を書き換えるなりころして新しいファイルにするなりして、IPアドレスを固定してやればいい。固定先は $8.8.8.8 とか。

 

2.Ciscoを入れる

前過程でいろいろあってWinに~.tar.gzを入れていたのでそれを移してきて*展開した。

 *WinからWSLへ移すのは $cp /mnt/User/****といった感じ

ので、展開するところからの記録。

参考:

yumetodo.hateblo.jp

 

2.1解凍

 $tar -xf {ファイル名.tar.gz}

 

2.2インストール

 $sudo apt-get install network-manager-openconnect

 $cd {ファイルのあるディレクトリ}

 $sudo ./vpn_install.sh

とまあ、ここまではよかったのだが…

次の

 $sudo systemctl daemon-reload

を叩いたらエラーをはかれた。エラー文は正確には記録していないが

 System has not been booted with systemd as init system (PID 1). Can't operate.

のような感じ。

 

2.3systemctlを有効にする

 $systemctlが使えないことには先に進めないので、とりあえず使えるようにする。

ちなみに、$systemctl が使えないのは、PID 1がsystemdじゃないかららしい。

2.3.1genieを入れる

genieというのを入れて適用させれば、PID 1をsystemdにできる。便利なものを作ってくれた人がいるもんだ…

参考:

shikiyura.com

 

$sudo apt install -y daemonize dbus gawk libc6 libstdc++6 policykit-1 systemd systemd-container

$wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb

$sudo apt update;

$sudo apt upgrade;

$sudo apt install dotnet-runtime-5.0

 

$sudo su

--以下ルートユーザーで

$apt install apt-transport-https

$wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg

$chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg

$cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main EOF

$apt update

$exit

--ルートユーザー抜ける

$sudo apt install systemd-genie

2.3.2genieを実行する

上記でインストールが完了したので、実行してみる。

$genie -s

…と、困ったことに2つほどエラーを吐かれた。

Failed units will now be displayed (systemctl list-units --failed)

: UNIT LOAD ACTIVE SUB DESCRIPTION

● systemd-remount-fs.service loaded failed failed Remount Root and Kernel File Systems

● multipathd.socket loaded failed failed multipathd control socket

↑こんな感じ

ただインターネットの海は素晴らしく、これについても対処法が見つかったのでそれを参考に実行。

参考:

zenn.dev

 

$mount | grep '\s/\s'

出力結果の最初の部分を確認 例:/dev/sdc

$sudo e2label {上で確認したやつ} cloudimg-rootfs

$sudo systemctl disable multipathd.socket

$sudo usermod -aG lxd $USER

$exit

 

これで再度実行

$genie -s

すると

Waiting for systemd....!!!!!

と表示されてエラーもなくめでたしめでたし。

元記事だとさらに何かしているようだけど、とりあえず今のところこれで回ってる。

 

2.4インストール続き

$systemdctl が使えるようになったので、Ciscoのインストールに戻る。

$sudo systemctl daemon-reload

$sudo systemctl start vpnagentd.service

これでインストール完了。

 

2.5起動

てなわけで起動してみる。GUIはないのでアイコンとか探せない。

 $cd /opt/cisco/anyconnect/bin

 $./vpn

 

できたー--!!!

 

あとは

 VPN>connect {繋ぎたい先}

でユーザーネームなりパスワードなりを入力していけばOK。