AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

memo: softether を Linux 環境にインストールするあれそれ

Ubuntu

ja.softether.org

www.gadgets-today.net

www.gadgets-today.net

qiita.com

Container

github.com

ict-worker.com

VPN 鯖が逝った

10 年以上稼働していた WindowsServer 2012 R2 がハードウェア障害でおなくなりになったので、ちょうどいいし Linux で構築してみるか〜、で調べているが全然うまくいかない。

まず VPN なんて存在を VM でやろうとするな、とお叱りを受けそうな環境で作っているのが問題かもしれないが、Windows だと GUI が強力なのでなんか動く所まで持っていけるんだよなあ。

Linux (macOS) だと Manager が ARM 向けに用意されていなかったり、インストールは CLI だけど仮想デバイス作成は GUI (前述の Manager) でやれ、みたいな設計だったり、 HTML5 形式の管理ツールが未整備、という所もあって色々試している。

ルーターが RTX1200 なのでそこでやったらええやん、という感じだったんだけど、法人向けの NURO を使っているのでなんかコンフィグが動かない、という感じで Copilot に聞いても無効なコンフィグ出してくるしでどうしようもない、という所になっている。

は〜まったく。

追記: 2025/08/19

色々あってうまく行かなかったがローカルでは動いた、というトコまで記載する。

あとはルーターのポートを開放すれば動くと思われるが、その作業が必要なら僕は Wireguard と Wg-Web-Gen を使います……。

前置き

vpncmd 内部でのテストには合格するので RockyLinux9 に Docker でインストールしたるか! とがんばっていた。 結果として、ローカル同士での接続なら成功するが、グローバルから接続しようとするとルーター部分で防がれて失敗する。

nmap -Pn -p 443,992,5555 ${グローバル IP アドレス} のようにするといずれのポートも閉じているので、ルーターのポート開放が必要か〜、となり、そういうことがしたくないというのが Softether を選択 (運用) しているモチベーションなので、ポート開放頑張るとか開放した後の監視とかセキュリティ、などを考えると、 Wireguard とかもっとほかの選択肢、となるので積極的に採用する必要はないな、となってしまった。

一応後続のために手順などを残しておく。

nmap

ローカルネットワーク同士で nmap

これは通る、対象の SoftetherVPN サーバーが適切に設定できている。

❯ nmap -Pn -p 443,992,5555 192.0.2.1
Starting Nmap 7.97 ( https://nmap.org ) at 2025-08-19 15:10 +0900
Nmap scan report for 192.0.2.1
Host is up (0.0031s latency).

PORT     STATE SERVICE
443/tcp  open  https
992/tcp  open  telnets
5555/tcp open  freeciv

Nmap done: 1 IP address (1 host up) scanned in 0.53 seconds
グローバル経由での nmap

これが通らない。 ネットワーク先頭に YAMAHA ルーター (クソ古く、 IP 電話を兼ねているので設定変更してくれるな、と言われている) が存在しており、その箇所で破棄されている。

❯ nmap -Pn -p 443,992,5555 example.com
Starting Nmap 7.97 ( https://nmap.org ) at 2025-08-19 15:14 +0900
Nmap scan report for example.com (203.0.113.1)
Host is up (0.00077s latency).

PORT     STATE  SERVICE
443/tcp  closed https
992/tcp  closed telnets
5555/tcp closed freeciv

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

作業手順

公式だと Ubuntu を推奨しているが、インストール後に vpncmd > 3 (を選択) > check と投げてすべて pass していれば別にどんなディストリでも構わないはず。 公式で Ubuntu を推奨しているのは LTS が明確に設定されているディストリなのと、 apt インストールするパッケージ名を固定で書くため、程度だと思われる。

wikiwiki.jp

  • SELinux は事前に permissive にしておく
  • cockpit 上で作成した VM でやる場合、 vCPU 1, RAM 2GB くらいでも大丈夫
    • RAM 4GB くらいあった方が現代では安心だけど、アクティブに使うわけではなければめっちゃ大量に swap 積めば誤魔化せそう
  • L2TP over IPsec 想定
mkdir softether;cd $_
vi docker-compose.vpnclient.yaml

sudo firewall-cmd --add-port=443/tcp --zone=public --permanent
sudo firewall-cmd --add-port=992/tcp --zone=public --permanent
sudo firewall-cmd --add-port=1194/tcp --zone=public --permanent
sudo firewall-cmd --add-port=5555/tcp --zone=public --permanent
sudo firewall-cmd --add-port=500/udp --zone=public --permanent
sudo firewall-cmd --add-port=4500/udp --zone=public --permanent
sudo firewall-cmd --add-port=1701/udp --zone=public --permanent

sudo systemctl start docker
sudo systemctl enable docker
sudo docker compose -f docker-compose.vpnclient.yaml up

[+] Running 7/7
 ✔ softether Pulled                                                                                                                                                              5.3s
   ✔ 9824c27679d3 Pull complete                                                                                                                                                  0.9s
   ✔ cf7724c41822 Pull complete                                                                                                                                                  1.0s
   ✔ 4f4fb700ef54 Pull complete                                                                                                                                                  1.0s
   ✔ d73516013432 Pull complete                                                                                                                                                  1.3s
   ✔ 3201cf751cfe Pull complete                                                                                                                                                  1.9s
   ✔ 017391f62713 Pull complete                                                                                                                                                  2.4s
[+] Running 2/2
 ✔ Network softether_default        Created                                                                                                                                      0.1s
 ✔ Container softether-softether-1  Created                                                                                                                                      0.7s
Attaching to softether-1
softether-1  | error registering mldsa44 with no hash
softether-1  | dmesg: klogctl: Operation not permitted
docker-compose.vpnclient.yaml
services:
  softether:
    image: softethervpn/vpnserver:latest
    cap_add:
      - NET_ADMIN
    restart: always
    ports:
      #- 53:53        #DNS tunneling
      - 443:443       #Management and HTTPS tunneling
      - 992:992       #HTTPS tunneling
      - 1194:1194/udp #OpenVPN
      - 5555:5555     #HTTPS tunneling
      - 500:500/udp   #IPsec/L2TP
      - 4500:4500/udp #IPsec/L2TP
      - 1701:1701/udp #IPsec/L2TP
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "./softether_data:/var/lib/softether"
      - "./softether_log:/var/log/softether"
      # - "./adminip.txt:/var/lib/softether/adminip.txt:ro"

注意点

最後の compose 起動時、 sudo docker compose -f docker-compose.vpnclient.yaml up としているがこれは起動確認のため。

実際に運用する場合は、 -d を付与して daemon 化してください。 (あとは systemctl などで自動起動してやってください)