スキップしてメイン コンテンツに移動

softether developer editionのDebian 12 .debパッケージを作成

レポジトリから取得したソースの自前ビルドだとsoftetherのサーバは大丈夫だったのですが、クライアントのほうがうまく動作していなかったので、調査も兼ねてdeb パッケージを作成してみました。(5.02.5187+git20241024)調べたところsystemdサービスファイルのパッチが正常に当たらないことが原因のようでした。またvpnclietの挙動が変わったのかもしれませんが、vpncmdをローカルで起動しRemoteEnableとPasswordSetしておかないと管理端末からは接続できませんでした。
パッケージの作成は以下のようにしましたが、いわゆる野良ビルドでとりあえずパッケージにしているだけなので注意してください。
sudp apt-get install git build-essential devscripts dpkg-dev pkg-config libsodium-dev

sudo mkdir /usr/src/softether-vpn.deb.orig
sudo chown buildUser:buildUser /usr/src/softether-vpn.deb.orig
sudo mkdir /usr/src/softether-vpn
sudo chown buildUser:buildUser /usr/src/softether-vpn

cd /usr/src/softether-vpn.deb.orig
su buildUser
apt-get source softehter-vpn
apt-get build-dep softether-vpn

cd /usr/src/softether-vpn
git clone https://github.com/SoftEtherVPN/SoftEtherVPN
cd SoftEtherVPN
git submodule init && git submodule update
#サブモジュールを含めたソースコードの抽出
git ls-files --recurse-submodules | tar caf ../softether-vpn-5.02.5187+git20241024.orig.tar.gz --xform s:^:softether-vpn-5.02.5187+git20241024/: --verbatim-files-from -T-
pwd
cd /usr/src/software-vpn
tar xzf softether-vpn-5.02.5187+git20241024.orig.tar.gz
tar xJf ../softether-vpn.deb.orig/softether-vpn_5.01.9674+git20200806+8181039+dfsg2-2.debian.tar.xz

# debian/rulesを以下のように変更(makefileなので行頭の空白はタブです。)
================================
#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk

export DH_VERBOSE=1

%:
        dh $@ --buildsystem=cmake --builddirectory=$(CURDIR)/build

override_dh_auto_configure:
        mkdir -p src/Mayaqua/3rdparty/cpu_features/
        touch src/Mayaqua/3rdparty/cpu_features/CMakeLists.txt
        CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX:PATH=/usr -DSE_PIDDIR=/run/softether \
                -DSE_LOGDIR=/var/log/softether -DSE_DBDIR=/var/lib/softether" ./configure
================================
# debian/patches/fix-systemd-units.patch を以下のように変更
===============================
diff -urN a/systemd/softether-vpnbridge.service b/systemd/softether-vpnbridge.service
--- a/systemd/softether-vpnbridge.service       2024-10-24 02:03:51.000000000 +0900
+++ b/systemd/softether-vpnbridge.service       2024-10-24 02:18:01.046014372 +0900
@@ -1,19 +1,22 @@
 [Unit]
 Description=SoftEther VPN Bridge
 After=network.target auditd.service
-ConditionPathExists=!@DIR@/softether/vpnbridge/do_not_run

 [Service]
-Type=exec
-ExecStart=@DIR@/softether/vpnbridge/vpnbridge execsvc
+Type=forking
+EnvironmentFile=-/etc/defaults/softether-vpnbridge
+ExecStart=/usr/libexec/softether/vpnbridge/vpnbridge start
+ExecStop=/usr/libexec/softether/vpnbridge/vpnbridge stop
+KillMode=process
 Restart=on-failure

 # Hardening
 PrivateTmp=yes
 ProtectHome=yes
-ProtectSystem=full
-ReadOnlyDirectories=/
-ReadWriteDirectories=-@DIR@/softether/vpnbridge
+ProtectSystem=strict
+RuntimeDirectory=softether
+StateDirectory=softether
+LogsDirectory=softether
 CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYSLOG CAP_SETUID

 [Install]
diff -urN a/systemd/softether-vpnclient.service b/systemd/softether-vpnclient.service
--- a/systemd/softether-vpnclient.service       2024-10-24 02:03:51.000000000 +0900
+++ b/systemd/softether-vpnclient.service       2024-10-24 02:18:01.030014310 +0900
@@ -1,19 +1,22 @@
 [Unit]
 Description=SoftEther VPN Client
 After=network.target auditd.service
-ConditionPathExists=!@DIR@/softether/vpnclient/do_not_run

 [Service]
-Type=exec
-ExecStart=@DIR@/softether/vpnclient/vpnclient execsvc
+Type=forking
+EnvironmentFile=-/etc/defaults/softether-vpnclient
+ExecStart=/usr/libexec/softether/vpnclient/vpnclient start
+ExecStop=/usr/libexec/softether/vpnclient/vpnclient stop
+KillMode=process
 Restart=on-failure

 # Hardening
 PrivateTmp=yes
 ProtectHome=yes
-ProtectSystem=full
-ReadOnlyDirectories=/
-ReadWriteDirectories=-@DIR@/softether/vpnclient
+ProtectSystem=strict
+RuntimeDirectory=softether
+StateDirectory=softether
+LogsDirectory=softether
 CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYSLOG CAP_SETUID

 [Install]
diff -urN a/systemd/softether-vpnserver.service b/systemd/softether-vpnserver.service
--- a/systemd/softether-vpnserver.service       2024-10-24 02:03:51.000000000 +0900
+++ b/systemd/softether-vpnserver.service       2024-10-24 02:18:01.014014247 +0900
@@ -1,20 +1,23 @@
 [Unit]
 Description=SoftEther VPN Server
 After=network.target auditd.service
-ConditionPathExists=!@DIR@/softether/vpnserver/do_not_run

 [Service]
-Type=exec
-TasksMax=infinity
-ExecStart=@DIR@/softether/vpnserver/vpnserver execsvc
+Type=forking
+TasksMax=16777216
+EnvironmentFile=-/etc/defaults/softether-vpnserver
+ExecStart=/usr/libexec/softether/vpnserver/vpnserver start
+ExecStop=/usr/libexec/softether/vpnserver/vpnserver stop
+KillMode=process
 Restart=on-failure

 # Hardening
 PrivateTmp=yes
 ProtectHome=yes
-ProtectSystem=full
-ReadOnlyDirectories=/
-ReadWriteDirectories=-@DIR@/softether/vpnserver
+ProtectSystem=strict
+RuntimeDirectory=softether
+StateDirectory=softether
+LogsDirectory=softether
 CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYSLOG CAP_SETUID

 [Install]
===============================
# debian/*.installを以下のようにそれぞれ変更
========
# debian/softether-common.install
#/usr/lib/*/*/lib*.so
build/hamcore.se2 /usr/share/softether-common/
========
# debian/softether-vpnbridge.install
build/vpnbridge /usr/libexec/softether/vpnbridge/
/usr/bin/vpnbridge
/lib/systemd/system/*vpnbridge.service
========
# debian/softether-vpnclient.install
build/vpnclient /usr/libexec/softether/vpnclient/
/usr/bin/vpnclient
/lib/systemd/system/*vpnclient.service
========
# debian/softether-vpncmd.install
build/vpncmd /usr/libexec/softether/vpncmd/
/usr/bin/vpncmd
========
# debian/softether-vpnserver.install
build/vpnserver /usr/libexec/softether/vpnserver/
/usr/bin/vpnserver
/lib/systemd/system/*vpnserver.service
========
cd debian
#dchコマンドにて適当にリリース理由などを書く
dch
cd ..
===============================
cp -a debian softether-vpn-5.02.5187+git20241024
cd softether-vpn-5.02.5187+git20241024
# ビルド
dpkg-buildpackage -nc -b
#手元の12C24Tマシンで約2分
cd ..
ls *.deb
softether-common_5.02.5187+git20241024_amd64.deb
softether-vpnbridge-dbgsym_5.02.5187+git20241024_amd64.deb
softether-vpnbridge_5.02.5187+git20241024_amd64.deb
softether-vpnclient-dbgsym_5.02.5187+git20241024_amd64.deb
softether-vpnclient_5.02.5187+git20241024_amd64.deb
softether-vpncmd-dbgsym_5.02.5187+git20241024_amd64.deb
softether-vpncmd_5.02.5187+git20241024_amd64.deb
softether-vpnserver-dbgsym_5.02.5187+git20241024_amd64.deb
softether-vpnserver_5.02.5187+git20241024_amd64.deb
パッケージ作成の詳細は以上です。ソースも公開しているので参考にしてみてください。
https://drive.google.com/drive/folders/1A8Vb2RaFrPsUP7CMHYGg94hlLmoSY1Vb?usp=drive_link
また当方の環境ではGUIツールをつかって、"高度な通信設定" -> "UDP 高速化機能を無効にする"にチェックを入れないとDebianクライアントはサーバへの接続が正常にできませんでしたが、これはDebian純正パッケージと同様でした。
何かの参考になれば幸いです。今回は以上です。それでは。

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかも...

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-...

IPv6 Linux router with NDP proxy

更新:2024/07/07 Debian 12のオリジナルndppdパッケージで下記設定にてndppdが機能することを確認しました。 ---------------------------------------------------------------- LinuxでIPv6 routerを設定しました。 プロバイダーから提供されたルータ機能付きのONUの配下に、パブリックなIPv6サブネットを構成できるルータを設定した時のメモです。 プロバイダはNuro光 で、G2Vというサービスです。通常、このサービスでは、ルータ付きのONU(図のONU+RT)には、IPv6で接続する場合、クライアントを直接接続する事はできます。しかし、図のように内側にさらにLinux Routerを接続し、eth1以下のClinet側サブネットにPublicなIPv6 addressを付与するには、NDP proxyの設定が必要でした。 構成はおよそ以下の通りです。(図再差し替え:2020/07/04) 1. 問題点と対策方針 今回来たONU+RTはZTE社のF660Aという物でした。このルータには、/56のアドレスが付与され、なおかつ、「プレフィックスデリゲーション」という項目があるのですが、設定しても、RA(ルーターアドバタイズ)は/64しか降りてこず、また、DHCPv6でも/64しか取得できません。つまり、このG2Vというサービスでは、DHCPv6-PDでも、/64 しか すら降りてきません。(なお、このサービスとしては機能的にはこれが正常です。) この制約を説明するとおよそこのような感じです。 26xx:1234:5678:9A00::/56 ← ONU+RTに払い出されたアドレス 26xx:1234:5678:9A00::/64 ← ONU+RTから払い出されるアドレス。 つまり、この設定では、64-56=8bit以下のサブネットを構成できるルータを別途接続することができません。 そこで調べたところ、「スタティックプレフィックス」という項目があり、これだと、(2024/07/06訂正) 26xx:1234:5678:9A00::/56 ← ONU+RTに払い出された(委譲された...