ブログ

Armadillo Base OS:SoftEtherVPNのサーバとして使用する(VSCode編)

at_takuma.fukuda
2024年10月11日 8時04分

以前、以下の記事でDockerhubで配布されているコンテナイメージを使ってArmadilloをSoftEtherVPNのサーバとする方法を案内しました。
Armadillo Base OS:SoftEtherVPNのサーバとして使用する
この記事では、ATDE上のVSCodeを使ってArmadilloへSoftEtherVPNのサーバを構築する方法を案内します。

概要

SoftEtherVPNのGithubでDockerfileが公開されているので、これを活用します。
https://github.com/SoftEtherVPN/SoftetherVPN-docker/tree/master

手順

構築のための手順を記載します。

プロジェクト作成

製品マニュアルを参考にATDE上のVSCodeで「shell new project」を実行してCUIアプリケーション用のプロジェクトを作成してください。
Armadillo-IoT A6Eの製品マニュアルのリンクを記載しておきます。 3.14. CUI アプリケーションの開発

Dockerfile

先述の通りSoftEtherVPNのGithubで公開されているDockerfileを活用します。
*2024/10/11時点では、DockerfileではなくDockerfile.stableを使用することを推奨します。
 SoftEtherVPNの最新のソースコードは、仮想環境でビルドしようとしてもホスト側のCPUの情報を取ってしまうため、  ビルドに失敗してしまうことがあります。
 そのため、最新のソースコードでは無く安定版を使用するDockerfile.stableを使用します。
Dockerfile.stableは以下からアクセスできます。
https://github.com/SoftEtherVPN/SoftetherVPN-docker/blob/master/Dockerfile.stable
これを活用しつつ、Armadillo向けにビルドできるようにコンテナイメージに対してアーキテクチャの指定を追加しています。

ARG ARCH
FROM docker.io/${ARCH}/alpine as builder
ARG GIT_TAG=v4.41-9782-beta
RUN mkdir /usr/local/src && apk add binutils --no-cache\
        build-base \
        readline-dev \
        openssl-dev \
        ncurses-dev \
        git \
        cmake \
        zlib-dev \
        libsodium-dev \
        gnu-libiconv 
 
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so
WORKDIR /usr/local/src
RUN git clone -b ${GIT_TAG} https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git
ENV USE_MUSL=YES
RUN cd SoftEtherVPN_Stable &&\
    git submodule init &&\
    git submodule update &&\
    ./configure &&\
    make
 
FROM docker.io/${ARCH}/alpine
RUN apk add --no-cache readline \
        openssl \
        libsodium \
        gnu-libiconv\
        iptables
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so
ENV LD_LIBRARY_PATH /root
WORKDIR /usr/local/bin
VOLUME /mnt
RUN ln -s /mnt/vpn_server.config vpn_server.config && \
        mkdir /mnt/backup.vpn_server.config &&\
        ln -s /mnt/backup.vpn_server.config backup.vpn_server.config &&\
        ln -s /mnt/lang.config lang.config
COPY --from=builder /usr/local/src/SoftEtherVPN_Stable/bin/vpnserver/vpnserver /usr/local/src/SoftEtherVPN_Stable/bin/vpncmd/vpncmd /usr/local/src/SoftEtherVPN_Stable/bin/vpnserver/hamcore.se2 ./
 
EXPOSE 443/tcp 992/tcp 1194/tcp 1194/udp 5555/tcp 500/udp 4500/udp
CMD ["/usr/local/bin/vpnserver", "execsvc"]

conf

プロジェクト内のapp.confを以下のように編集します。 Dockerfileで起動時コマンドを定義しているため、set_commandの部分をコメントアウトしていることに留意してください。

set_image localhost/{{PROJECT}}:latest
 
# mount app sources and data:
# - /var/app/rollback/volumes can be rolled back on failed
# upgrades, suitable for application sources and assets.
# - /var/app/volumes is not copied on updates and more suitable
# for volatile data such as logs and databases.
add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data
 
# Allow LED to be written. This is application specific
# and should be changed depending on your needs.
add_volumes /sys:/sys
 
# Allow input to containers and see output from containers
add_args -it
 
# Add environment variables set by Atmark Techno.
add_armadillo_env
 
# launch app
#set_command bash /vol_app/src/main.sh
add_ports 443:443/tcp 992:992/tcp 1194:1194/udp  5555:5555/tcp  500:500/udp 4500:4500/udp 1701:1701/udp
#サーバの設定ファイル等を格納するディレクトリをコンテナ上にマウント
add_volumes /var/app/volumes/softether:/mnt
#ホストOSのネットワークをそのまま使用する設定
set_network host
#特権を設定
add_args --privileged

SWUのビルド・インストール

製品マニュアルを参考にコンテナイメージとconfファイルを書き込むためのswuファイルをビルドしてArmadilloへインストールしてください。
Armadillo-IoT A6Eの製品マニュアルのリンクを記載しておきます。 3.14.3.4. アプリケーション実行用コンテナイメージの作成

VPNサーバ設定・動作確認など

SWUによるインストールが完了してArmadilloが再起動すると、SoftEtherVPNサーバコンテナが自動起動した状態となります。 後は、下記記事と同様にSoftEther VPNサーバー管理マネージャーを使って設定を行って下さい。
Armadillo Base OS:SoftEtherVPNのサーバとして使用する