LoginSignup
2
0

背景

Windowsユーザーのエンジニアの皆さんの中にはWSL環境で開発を行っている方も多いと思います。私もその一人です。

先日WSL環境で開発中、WindowsにインストールしたVPNクライアントからIBM CloudにSSL VPN接続してもWSLからアクセスできず困ったため、備忘録を兼ねて記事にしました。

WSL2からIBM CloudにSSL VPN接続する

タイトルの通りです。本記事で使うSSL VPNクライアントのMotion Proは公式ではWSL非対応としており、動作が不安定な部分もあります。もっといい方法があればコメントにてご教示ください。

環境

Ubuntu 20.04 LTS on WSL2 on Windows11

事前準備

初めて接続する際に必要です。すでに別環境から接続できる方は飛ばしてください。

  1. IBM Cloud ダッシュボード中の「ユーザー・アクセス」→「ユーザーの管理」から自分のユーザー名を選び、VPNパスワードを設定しておく
    スクリーンショット 2022-12-12 090853.png

  2. タブ「クラシック・インフラストラクチャー」内のタブ「VPNサブネット」に移動し、次の設定をして、保存する

    • 「SSL VPNアクセスを有効にする」にチェック (*必須)
    • (自動割り当て「オフ」)
    • (接続したいサブネットにチェック)
      スクリーンショット 2022-12-12 091353.png

VPNクライアント(MotionPro)のインストール

IBM Cloud公式ドキュメントの「Linux スタンドアロン・クライアント」を参考にインストールします。

1. ダウンロード

Array Network公式ページ(https://support.arraynetworks.net/prx/001/http/supportportal.arraynetworks.net/downloads/downloads.html) より、最新版のMotionProのリンクをコピーしてwgetします。

コマンド
wget --no-check-certificate https://support.arraynetworks.net/prx/001/http/supportportal.arraynetworks.net/downloads/pkg_9_4_0_461/MP_Linux_1.2.15/MotionPro_Linux_Ubuntu_x64_build-22.sh

2. 実行権限付与

コマンド
chmod +x MotionPro_Linux_Ubuntu_x64_build-22.sh

3. インストールスクリプト実行

コマンド
sudo ./MotionPro_Linux_Ubuntu_x64_build-22.sh

インストール直後のプロセスを見ると、"vpnd"および"MotionProHttpd"の2つのプロセスが起動しています。
スクリーンショット 2022-12-12 104357.png
このうち"vpnd"について、WSL環境だと自動起動が設定されないため、Windowsを起動する都度vpndの起動が必要になります。
面倒なので起動を自動化します。

vpnd自動起動の設定

1. systemdの有効化

自動起動を設定するため、まずWSL2でsystemdを使えるようにします。

コマンド
sudo nano /etc/wsl.conf

以下の内容を追記

/etc/wsl.conf
[boot]
systemd=true

2. vpndインストール先の確認

コマンド
which vpnd
結果
/usr/bin/vpnd

3. Unit定義ファイルの作成

コマンド
sudo nano /etc/systemd/system/vpnd.service

以下の内容を入力 (ExecStart=のパスは先ほど確認したパスを指定)

/etc/systemd/system/vpnd.service
[Unit]
Description = vpnd-service
After = local-fs.target network-online.target

[Service]
ExecStart = sudo /usr/bin/vpnd
Restart = no
Type = oneshot
RemainAfterExit = yes

[Install]
WantedBy = multi-user.target

4. 自動起動登録

コマンド
sudo systemctl enable vpnd

5. wslの再起動

systemdの有効化のため、wslを再起動します。
WSLのシェルを閉じてWindows側でPowershellを開き、以下のコマンドを入力します。

コマンド(PowerShell)
 wsl --shutdown

6. 起動確認

再度WSLのシェルを開き、自動起動が設定できたことを確認します。

コマンド
sudo ps -A | grep vpnd
結果
 373 ?        00:00:00 vpnd

2023/08/08 追記

systemdの有効化後、WSLからWindowsの.exeファイルを直接開けなくなる事象があるようです(Exec format error)。
以下コマンドで修正できます。

$ echo ":WSLInterop:M::MZ::/init:PF" | sudo tee /usr/lib/binfmt.d/WSLInterop.conf
$ sudo systemctl restart systemd-binfmt

VPN接続

準備が終わったので、VPN接続をします。

コマンド
sudo /opt/MotionPro/vpn_cmdline -h '[接続先]' -u '[VPN接続ユーザー名]' -p '[VPN接続パスワード]'
結果
failed to open file /sys/class/net/bonding_masters/flags, error 20
failed to open file /sys/class/net/bonding_masters/address, error 20
login successfully!
starting vpn...
current status:0
current status:0
current status:0
current status:0
Connect successfully!
Vpn is connected!

エラーメッセージが出ますが、VPN接続は完了しています。

切断は以下のコマンドで行います。

コマンド
sudo /opt/MotionPro/vpn_cmdline -s
結果
stop connection successfully!

補足

この記事の内容とは直接関係ないですが、長時間スリープ復帰後などにWSLのシステム時刻がずれて名前解決できず、接続できなくなるエラーが発生することがあります。以下コマンドで対応できます。

コマンド
$ sudo hwclock --hctosys

参考文献

以下の記事を参考にさせていただきました。著者の皆さまに感謝いたします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0