この記事を作った動機

 Android 端末において SoftEther VPN で稼働しているサーバに接続しようとすると、L2TP/IPsec を使った方法と、OpenVPN を使った方法の2つの接続方法がある。しかし、新しいバージョンの Android (12以降) において標準的に利用できる VPN には既に L2TP/IPsec は含まれておらず接続できない。また、OpenVPN を使った方法では、接続には成功するものの、そこに至るまでの設定が分かりづらかったり、技術的に一筋縄では行かないところが多々あった。これら経緯から、やったことについて記録を残したい。

ネットワーク構成

全体像

 今回は、192.168.x.0/24 として描かれているネットワークに属するクライアントを Android スマホに見立てる。

ネットワーク構成図の説明

今回問題になった特徴について

 私の環境では通常のVPNネットワークと異なり、VPNに接続した先にあるネットワークを介して、更に別のネットワークにパケットを転送するPCがあって、そこを介してやり取りするという特徴があり、今回問題になった。

記録

VPN 接続したときのスマホのルーティングテーブルの様子

 基本的に OpenVPN 関連で特別なルーティング設定をしても Android OS 側は直接制御を持っていないように見受けられる。以下のように192.168.1.0/24へのルーティングは、OpenVPN 側で正しく動作していても以下のように直接は確認できない。

adb shell
cofud:/ $ ip route
10.0.0.0/8 dev ccmni1 proto kernel scope link src 10.150.92.221 
192.168.30.12/30 dev tun0 proto kernel scope link src 192.168.30.13 
cofud:/ $ exit

使うべきアプリ

 OpenVPN Connect ではなく、OpenVPN for Android を使うべき。

 Android ではアプリを介してしか詳細な制御ができず、OpenVPN Connect は限られた設定項目しか利用できない問題があった。ルーティングや MTU、MSS、DNSなどについて細かく設定したい場合は、OpenVPN for Android などの別のアプリが必要であった。OpenVPN Connect などのアプリは、基本的に詳細な設定ができず、かつどのように読み込ませた".ovpn"などの設定が実際反映されているか確認が難しかったり色々困難があった。

SoftEther 特有の事項のメモ

  • .ovpn の設定ファイルは SoftEther VPN のサーバ管理画面で生成する。
  • data-ciphersについて、.ovpnの編集が必要である
...
data-ciphers AES-128-CBC:AES-256-GCM:AES-128-GCM
...
  • [ユーザ名]@[仮想ハブ名]がVPN接続時のユーザ名
  • パスワードは仮想ハブのアカウントと同じ。
  • 生成された OpenVPN の設定ファイルは、L3 のものを使い、L2のものは使わない。

.ovpn の中身の変更例の一部

  • data-ciphers の項目を追加 (さもなくばVPN接続自体に失敗する)
...
data-ciphers AES-128-CBC:AES-256-GCM:AES-128-GCM
...
  • DNSについて設定を追加
...
dhcp-option DNS 192.168.1.1
...
  • routeについて設定を追加
...
route 192.168.30.0 255.255.255.0 vpn_gateway
route 192.168.1.0 255.255.255.0 192.168.30.2
...
  • VPNに対してトラフィックは全ては流さないようにする設定を追加
...
route-nopull
...
  • MSS、MTUサイズを障害予防のために1500から余裕を持って1000に設定
...
tun-mtu 1000
mssfix 1000
...

 以下は、SoftEther VPN が生成した.ovpnファイルを編集したものである。LLMであるGemini Fast 3も使っている。

...
###############################################################################
# The encryption and authentication algorithm.
# 
# Default setting is good. Modify it as you prefer.
# When you specify an unsupported algorithm, the error will occur.
# 
# The supported algorithms are as follows:
#  cipher: [NULL-CIPHER] NULL AES-128-CBC AES-192-CBC AES-256-CBC BF-CBC
#          CAST-CBC CAST5-CBC DES-CBC DES-EDE-CBC DES-EDE3-CBC DESX-CBC
#          RC2-40-CBC RC2-64-CBC RC2-CBC CAMELLIA-128-CBC CAMELLIA-192-CBC CAMELLIA-256-CBC
#  auth:   SHA SHA1 SHA256 SHA384 SHA512 MD5 MD4 RMD160

cipher AES-128-CBC
data-ciphers AES-128-CBC:AES-256-GCM:AES-128-GCM
auth SHA1
...
###############################################################################
# Custom Routing Settings (Added for Android Split Tunneling)
# 
# デフォルトゲートウェイの変更(すべての通信をVPNに流す設定)を無効化
route-nopull

# VPNの所属セグメント(192.168.30.0/24)へのルートを確立する
# vpn_gateway は OpenVPNが接続時に自動取得したVPN側インターフェースを指す特殊変数です
route 192.168.30.0 255.255.255.0 vpn_gateway

# 192.168.1.0/24 宛ての通信のみ、ゲートウェイ 192.168.30.2 を指定してルーティング
route 192.168.1.0 255.255.255.0 192.168.30.2

# DNSサーバーを 192.168.1.1 に指定
dhcp-option DNS 192.168.1.1

# MTUサイズを1000に制限
tun-mtu 1000
mssfix 1000

OpenVPN for Android アプリについて

  • IPが割り当てられていないネットワークに対してのパケットをブロックするチェックをUI側から設定で外す。(Routing -> Block IPv6(or IPv4) if not used by the VPN)
  • Use Default route を外す。
  • Ingnore Pushed Routesは有効のまま
    設定例/

他のこと

adb、fastboot について

 AUR からインストールできるAUR (en) - android-sdk-platform-toolsはインストールしただけでは直接コマンドを使うことができないことがわかっており、以下の2ステップが必要である。

うまく動かない様子

yay -S android-sdk-platform-tools

adb
# bash: adb: command not found
fastboot
# bash: fastboot: command not found

yay -Ql android-sdk-platform-tools | grep adb
# android-sdk-platform-tools /opt/android-sdk/platform-tools/adb
# android-sdk-platform-tools /usr/lib/systemd/system/adb.service
yay -Ql android-sdk-platform-tools | grep fastboot
# android-sdk-platform-tools /opt/android-sdk/platform-tools/fastboot

2ステップ

  1. adb デーモンの起動、有効化
sudo systemctl start adb
  1. adb、fastbootバイナリがコマンドとして利用できるようにする
     これには2通りやり方があり、adb、fastbootが配置されているパスをPATH環境変数に追加するか、すでにPATH環境変数に含まれていて認識されているパスである、/usr/binにシンボルリンクを作るという方法がある。今回は、シンボルリンクを作る方法を以下に示す。
sudo ln -s /opt/android-sdk/platform-tools/adb      /usr/bin/
sudo ln -s /opt/android-sdk/platform-tools/fastboot /usr/bin/

関係ありそうな記事

使った画像素材とか

  • Win 7 (Vista) のアイコン (2026年5月10日)
    • PC のアイコン
    • PC とインターネットのアイコン
    • ルータのアイコン * 2
    • サーバーのアイコン
    • ハブのアイコン
  • SoftEther VPN Project - SoftEther VPN Project (SoftEther のソフトウェアのロゴ)
    https://www.softether.org/ (2026年5月10日)
  • OpenVPN for Android - Apps on Google Play (アプリ自体のロゴ)
    https://play.google.com/store/apps/details?id=de.blinkt.openvpn&hl=en (2026年5月21日)

参考にしたサイトとか