L2TP/IPSec と SSTP VPN を SoftetherVPN 開発版 on Alpine Linux で使う備忘録

Environment
Photo by hyt.

L2TP/IPSec と SSTP VPN を SoftetherVPN 開発版 on Alpine Linux で使う備忘録です.

これまで長く利用してきた Softether VPN のメインテナンスを行ったのですが,その L2TP/IPSec と SSTP 接続機能を elementary os7 (Ubuntu22.04) から利用するのにかなり四苦八苦しましたので,備忘録として以下に残しておきます.

Softether VPN 開発版の導入

Softether VPN の公式ページは,

SoftEther VPN プロジェクト - SoftEther VPN プロジェクト

ですが,ソースコードは GitHub でも公開されており,さらに,開発版

GitHub - SoftEtherVPN/SoftEtherVPN: Cross-platform multi-protocol VPN software. Pull requests are welcome. The stable version is available at https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.
Cross-platform multi-protocol VPN software. Pull requests are welcome. The stable version is available at - GitHub - Sof...

と安定版

GitHub - SoftEtherVPN/SoftEtherVPN_Stable: Cross-platform multi-protocol VPN software. This repository is officially managed by Daiyuu Nobori, the founder of the project. Pull requests should be sent to the master repository at https://github.com/SoftEtherVPN/SoftEtherVPN.
Cross-platform multi-protocol VPN software. This repository is officially managed by Daiyuu Nobori, the founder of the p...

の2種類があります.

これまでは安定版を利用してきたのですが,開発版だと WireGuard に対応していることと IPv6 のサポートが開発版の方がかなり進んでいるようなので,今回は開発版を導入することにしました.

導入する環境は,VMWare ESXi8 上に構築された Alpine Linux 3.18.4 です.なお,Alpine Linux はいわゆる musl 環境なので,導入に注意が必要です.具体的には,

https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/src/BUILD_UNIX.md#install-requirements-on-debianubuntu

の「Build on musl-base linux」に従って構築します.Alpine Linux の場合は以下のような感じになります.

# apk add cmake build-base libsodium-dev git bridge-utils
# git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
# export USE_MUSL=YES
# export CMAKE_INSTALL_PREFIX=/usr/local
# cd SoftEtherVPN
# git submodule init && git submodule update
# ./configure
# make -C build
# make -C build install

上記の通り導入することで,/usr/local 以下に必要なファイルが入りますが,Softether VPN Server の主なものは /usr/local/libexec/softether/vpnserver 以下に入ります.

以前の設定ファイル等がある場合は,vpnserver を停止させてから以前の vpn_server.config と chain_certs 以下のファイルを /usr/local/libexec/softether/vpnserver 以下に上書きすれば OK です.

なお,起動時に自動起動させたい場合は,/etc/init.d/vpnserver を

# vi /etc/init.d/vpnserver
#!/sbin/openrc-run

command="/usr/local/bin/vpnserver"
description="SoftetherVPN Server"

depend() {
        need net
        after firewall
}

start() {
        $command start
}

stop() {
        $command stop
}

のように 作り,

# rc-update add vpnserver
# rc-service vpnserver start
# rc-status
# rc-status
Runlevel: default
 open-vm-tools                                                                                             [  started  ]
 vpnserver                                                                                                 [  started  ]
 crond                                                                                                     [  started  ]
 acpid                                                                                                     [  started  ]
 chronyd                                                                                                   [  started  ]
 sshd                                                                                                      [  started  ]
Dynamic Runlevel: hotplugged
Dynamic Runlevel: needed/wanted
 sysfs                                                                                                     [  started  ]
 fsck                                                                                                      [  started  ]
 root                                                                                                      [  started  ]
 localmount                                                                                                [  started  ]
Dynamic Runlevel: manual

のようにすればOKです.

Softether L2TP/IPSec の利用方法

Softether VPN Server はもともとは独自のプロトコルを用いた VPN 接続を提供するソフトだったのですが,現在はそれに加えて,

  • L2TP/IPSec
  • EtherIP/L2TPv3 over IPSec
  • OpenVPN
  • MS-SSTP
  • WireGuard(開発版のみ)

のプロトコルに対応した VPN Server として使うことができます.

設定も GUI で非常に簡単に行えますし,Windows や macOS や iOS などの商用の OS がクライアントの場合は,公式に,

SoftEther VPN Server での L2TP/IPsec 設定ガイド - SoftEther VPN プロジェクト

のような設定方法が公開されています.しかし,残念ながら Linux や FreeBSD などの場合は設定方法が公開されておらず,さらに,素直に設定しただけではつながりません.

Linux の場合,L2TP/IPSec Client は今だと NetworkManager-l2tp

GitHub - nm-l2tp/NetworkManager-l2tp: L2TP and L2TP/IPsec support for NetworkManager
L2TP and L2TP/IPsec support for NetworkManager. Contribute to nm-l2tp/NetworkManager-l2tp development by creating an acc...

を使うのが普通だと思います.Ubuntu 系のディストリビューションなら,

$ sudo apt install network-manager-l2tp

で導入できますが,これと合わせて(依存関係で)導入される IPSec による暗号化を行うためのソフトウェアとして,

  • StrongSwan
  • Libreswan

の2種類があるようです.最新の22.04系列なら StrongSwan 系が導入されるはずですが,もし Libreswan が導入されている場合は,

$ sudo apt purge libreswan
$ sudo apt install strongswan

のような感じで入れ替えを行わなければならないことにご注意ください.

NetworkManager-l2tp が正しく導入できれば,システム設定などから GUI で L2TP/IPSec 接続設定を行えますが,設定の際注意しなければならないのは以下の点です.

  1. PPP 設定の「認証方式」を MSCHAP, MSCHAPv2 のみとする
  2. PPP 設定の「暗号化と圧縮」で「ステートフル暗号を許可する」以外のチェックを入れる(多分「MMPE 暗号を使用する」以外は全て標準でチェックが入っている)
  3. 同じく,MMPE暗号のセキュリティとして「利用可能なものすべて」を選ぶ

Softether MS-SSTP の利用方法

MS-SSTP は Microsoft の開発した VPN 接続方式ですが,L2TP/IPSec などと違って,利用する接続ポートが https と同じ 443 だけなので,かなり制限がきついネットワークでも使える可能性が高いプロトコルです.

Softether VPN Server の場合,チェックを一箇所に入れるだけで MS-SSTP 接続にも対応してくれますし,Windows から使う場合は,普通に設定すれば特に引っかかるようなところもなく接続できるのですが,MS-SSTP クライアントのオープンな実装である sstp-client

SSTP-Client

から接続するのは少し工夫が必要です.

sstp-client も現在だと,L2TP/IPSec と同様に network-manager-sstp

GNOME / network-manager-sstp · GitLab
Secure Socket Tunneling Protocol Extention for Network Manager

から利用するのが普通だと思いますし,Ubuntu 系の場合は,

$ sudo apt install network-manager-sstp

で簡単に導入できますが,Softether MS-SSTP を利用する場合は,設定時に以下に注意する必要があります.

  1. 「詳細設定」の「Point-to-Point Proxy」タブの「Authentification」から MSCHAP, MSCHAPv2, EAP を選ぶ
  2. 「詳細設定」の「Point-to-Point Proxy」タブの「Security and Compression」から「MPPE 暗号を使用する」のチェックを外す
  3. 「詳細設定」の「Point-to-Point Proxy」タブの「Echo」から「PPP Echo パケットを送信する」のチェックを入れる.
  4. VPN 接続先が IPv4 のみに対応している場合は「IPv6 設定」の「メソッド」を「無効」に設定する.

接続できないときは?

いちおう現時点で最新のものを使っている場合は上記で接続できるはずですが,念のため,接続できなかった場合にどのように原因を突き止めるのかについて少し記しておきます.

まず,当たり前ですが,Softether VPN Server のログを見て下さい.

3.10 ロギングサービス - SoftEther VPN プロジェクト

また,Linux で,かつ systemd が採用されているディスりビューションの場合は,

$ journalctl -b --no-hostname _SYSTEMD_UNIT=NetworkManager.service + SYSLOG_IDENTIFIER=pppd

として表示されるログで error となっていたり,色が付いていたりするところを探すのが良いと思います.

Failed to connect after upgrading to Ubuntu 22.04 · Issue #183 · nm-l2tp/NetworkManager-l2tp
I upgraded to Ubuntun 22.04 from 20.04. I can confirm that the VPN configuration can work on ubuntu 20.04 but is no long...

以上!

タイトルとURLをコピーしました