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/****
といった感じ
ので、展開するところからの記録。
参考:
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にできる。便利なものを作ってくれた人がいるもんだ…
参考:
$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
↑こんな感じ
ただインターネットの海は素晴らしく、これについても対処法が見つかったのでそれを参考に実行。
参考:
$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。