SoftEtherVPNサーバーの機能制限解除を行う

Linux

無償版SoftEtherにはパケットログが記録できない等の制約がありますが、Linux用に配布されているソースコードを用いて機能制限を解除することができます。

この機能制限は、権利問題に抵触しないよう意図的に制限されているものであるため、自分で改造する分には問題はないとされているので、その解除方法について解説します。

ご注意:改造作業については自己責任でお願いします。

事前作業

本改造はバイナリで配付されている無償版ライブラリを、改造版ライブラリへの入れ替え対応で行います。

そのため、作業前にバイナリ版SoftEtherのインストールと動作確認を完了しておく必要があります。

SoftEtherのインストール方法はこちらに記載しています。

改造作業

ソースコード入手

ソースコードは以下HPから入手します。

ダウンロード - SoftEther VPN プロジェクト

Webブラウザから、Source Code of SoftEther VPN → tar.gz packageに進み、バイナリ版と同じバージョンのソースコードをダウンロードします。

ソースコードのバージョンは、バイナリ版と合わせたものを用います。

Source Code of SoftEther VPN (Ver 4.42, Build 9798, rtm)
softether-src-v4.42-9798-rtm.tar.gz (24.46 MB)

Webでダウンロードすると「ダウンロード」フォルダに入ってしまうため、コンパイル作業がしやすいようにファイルは1階層上に移動しておきます。

homeディレクトリから
$ cd ./ダウンロード
$ mv softether-src-v4.42-9798-rtm.tar.gz ..

ソースコード展開

ソースコードはtar.gzで固められているため、tarコマンドで展開します。

展開後、作成されたディレクトリに移動します。

$ tar xvf softether-src-v4.42-9798-rtm.tar.gz
$ cd v4.42-9798

必要パッケージをインストール

ビルド(コンパイル)には追加ライブラリが必要であるためaptで入手します。

build-essentialはバイナリ版の構築で入れていると思いますので、省略しても構いません。

# apt install build-essential
# apt install libreadline-dev libssl-dev libncurses-dev libz-dev

ソースコード修正

src/Cedar/Server.c.orig src/Cedar/Server.c のソースコードを修正します。

C++で記述されていますので、先頭に"//"(コメントアウト)を追加します。

10906行の関数でリージョン判定している
10921行をコメントアウトすればリージョン制限が外れる
bool SiIsEnterpriseFunctionsRestrictedOnOpenSource(CEDAR *c)
{
        char region[128];
        bool ret = false;
        // Validate arguments
        if (c == NULL)
        {
                return false;
        }


        SiGetCurrentRegion(c, region, sizeof(region));

        //if (StrCmpi(region, "JP") == 0 || StrCmpi(region, "CN") == 0)
        //{
        //      ret = true;
        //}

        return ret;
}

ビルド

configureでMakefileを生成し、ビルド(コンパイル)します。

makeでは大量のwarningがでますが、errorでなければ無視しても良いと思います。

$ ./configure
$ make

makeがエラー停止しなければ、置き換えに必要なライブラリファイルは完成していると思います。

エラーが出る場合は、ライブラリのインストールに問題がないかを確認してください。

ライブラリの入れ替え

置き換え前にvpnserverのバックアップを行います。

$ sudo su -
# systemctl stop vpnserver
# cd /usr/local
# cp -rp vpnserver vpnserver.bak

ライブラリの置き換えと再リンク

改造ライブラリは置き換えだけでは動作しません。

nanoで実行ファイル側のMakefileを書き換えて再リンク処理を行うことで有効化されます。

書き換え対象ファイル:/usr/local/vpnserver/Makefile

書き換え箇所は以下のdiffを参照してください。

$ diff -up /usr/local/vpnserver/Makefile.orig /usr/local/vpnserver/Makefile
--- /usr/local/vpnserver/Makefile.orig	2024-05-12 14:51:06.055696087 +0900
+++ /usr/local/vpnserver/Makefile	2024-05-12 14:55:05.201709272 +0900
@@ -7,7 +7,7 @@
 CC=gcc
 
 
+# OPTIONS=-fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -ldl
+OPTIONS=-fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -lssl -lcrypto -lreadline -lncurses -lz -ldl
 
 default:
 	@./.install.sh
@@ -18,14 +18,6 @@ default:
 
 main:
 	@echo "Preparing SoftEther VPN Server..."
+#	-ranlib lib/libcharset.a
+#	-ranlib lib/libcrypto.a
+#	-ranlib lib/libedit.a
+#	-ranlib lib/libiconv.a
+#	-ranlib lib/libintelaes.a
+#	-ranlib lib/libncurses.a
+#	-ranlib lib/libssl.a
+#	-ranlib lib/libz.a
 	-ranlib code/vpnserver.a
 	$(CC) code/vpnserver.a $(OPTIONS) -o vpnserver
 	-ranlib code/vpncmd.a

コンパイルしたディレクトリ配下に移り、コピーでライブラリを置き換え後、makeで再リンク処理を行います。

/v4.42-9798# cp -rp tmp/as/vpnserver.a /usr/local/vpnserver/code
/v4.42-9798# cp -rp tmp/as/vpncmd.a /usr/local/vpnserver/code
/v4.42-9798# cp -rp bin/vpncmd/hamcore.se2 /usr/local/vpnserver/
/v4.42-9798# cd /usr/local/vpnserver/
root@vpn-server:/usr/local/vpnserver# make
root@vpn-server:/usr/local/vpnserver# systemctl start vpnserver

以上で改造は終了です。

動作確認

ログ記録をみて制限解除が確認できます。

WindowsのSoftEtherサーバー管理アプリから、VPNサーバーの管理モードに接続し、ログファイル一覧をクリックします。

packe_log/VPN/pkt_****.logファイルをダウンロード表示すると、改造できていることがわかります。

(改造前)
この VPN Server はオープンソース版または無償版であるため、パケットログの保存に対応していません。そのため、IP アドレスや TCP/UDP などのデータは保存されません

(改造後)
無償版の文字が消え、パケットログが記録されるようになる

作業工程がわかれば簡単ですね。

SoftEtherVPNは単体でL2TP, OpenVPN, SoftEtherVPNの3種のプロトコルが使えます。

VMware, Proxmoxなどの仮想サーバー環境があればルータいらずですし、アカウント管理もできるという素晴らしい国産ソフトです。