SoftEther VPNのLinux版でVPNが遅い!tapと仮想ブリッジで劇的改善!

スポンサーリンク
SoftEther VPN 13 SoftEther VPN
本記事はPRによる消費税込みの価格表示です

外出先から自宅ネットワークへつなげるVPN環境を構築したいとき、とても簡単にVPN環境構築できるのがSoftEther VPNです。

フレッツ光回線では最近主流のDS-Lite回線(transix/xpassなど)では一般的にVPN環境は構築できませんが、SoftEtherならDS-Lite回線やモバイル回線などどんな回線環境でもVPNが構築できてしまいます
※つまり、tailscaleと同じ接続性がある、ということですね。

SoftEtherは開発経緯がWindows版から始まった、という点もあり性能面においてはWindows版が安定しており、Linux版の場合にはVPN通信速度が異常に遅くなる場合がある、という問題点があります。

ネット上ではさまざまな解決策が公開されていますが、私の環境ではSoftEtherのマニュアルにも記載されている「tapを使ってブリッジ接続する」という方法で劇的にVPN通信速度が改善されました。

本記事ではDebian環境にインストールしたSoftEther VPNサーバー環境において、tapとbridge(ブリッジ)を使った環境構築方法を記していきます。

SoftEther VPN(Linux版)でリモートVPNが遅すぎる!

私は「外出先から自宅へのVPN接続(リモートVPN)」と「自宅と実家の拠点間VPN」の両方をSoftEtherVPNで構築しています。

外出先からはリモートVPNで自宅ネットワークへ接続することができます。

また、自宅と実家を拠点間VPNで接続することで、自宅運用のNASのバックアップデータを実家のバックアップ用NASへ毎晩バックアップしています。

ところが・・・これをSoftEtherVPN(Linux版)でVPN構築すると通信速度がめっちゃ遅いんです。

どれくらい遅いか、というと・・・

SoftEther Linux版の通信速度

下りはまぁ良いとして、上りが全く使い物にならないほど遅いです。
※VDSL回線なので上下最大100Mbps

SoftEther(Windows版)からSoftEther(Linux版)へ

もともと、このSoftEtherを使ったVPN環境はSoftEtherのWindows版を使って構築していました。

しかし、Windowsのライセンスを消費することもあり、またPCスペックもそれなりに必要なので、Windows10のサポート終了に合わせて「無料で使えるLinux版へ移行しよう!」となったわけです。

しかし、同じ仕組みをSoftEther(Linux版)で構築すると、VPN通信速度が遅いのなんの・・・

SoftEtherはWindows推奨!?

SoftEtherはもともとWindows版での開発から始まり、その後Linuxへの移行が行われたようです。

公式サイトでも「Linux版はWindows版と比較してパフォーマンスが劣る場合がある」と明記されています。

したがって、ソフトイーサ株式会社としては、他に技術的またはコスト的な問題がない場合、SoftEther VPN Server を Windows プラットフォーム上で使用することを推奨します。

動作環境 - Windowsのサポート | SoftEtherより抜粋

SoftEther VPN(Linux版)で遅い場合の対応策は?

ネット上を検索すると、SoftEther(Linux版)のVPN通信速度が遅い場合は以下の対応で改善された!みたいな記事が多く出てきます。

SoftEther(Linux版)の速度改善方法

  • UDP高速化を無効にする
  • NATオーバーロードをオフにする
  • tapデバイスへブリッジする

本記事でのVPN通信速度改善内容

本記事では、上記の「tapデバイスへブリッジする」により、VPN通信速度が劇的に改善されました。

SoftEther Linux版の通信速度

私の場合は「UDP高速化を無効」「NATオーバーロードをオフ」では効果がありませんでした。

よって、ここからの記事は「SoftEther(Linux版)でVPN通信速度が遅い場合に、tapデバイスを使って速度改善を行う」という内容になります。

TAPとブリッジで劇的に改善!

この章では、実際にSoftEther(Linux版)を使って、そのSoftEtherが動作するLinuxサーバー上にtapデバイスおよび仮想ブリッジを作成し、そのtapデバイスをSoftEtherから利用するまでの手順を説明していきます。

なお、SoftEther(Linux版)のインストールおよび設定方法については本記事の対象外となります。

STEP① Linuxサーバー上でのtapデバイスおよび仮想ブリッジの作成

まず最初に仮想ブリッジの作成に必要なモジュールをインストールします。

### ブリッジユーティリティのインストール ###
apt install -y bridge-utils

次に、Debian13(trixie)のネットワークインターフェース設定を行います。

通常、「/etc/network/interfaces」ファイルには以下のような記述が行われているはずです。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.21.5/24
        gateway 192.168.21.1

上記の例ではインターフェース「eth0」に「192.168.21.5/24」のIPv4アドレスとデフォルトゲートウェイとして「192.168.21.1」が設定されています。

このインターフェースファイルを次のように書き換えます。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
## iface eth0 inet static
##        address 192.168.21.5/24
##        gateway 192.168.21.1

auto br0
iface br0 inet static
        bridge_ports    eth0 tap_sev
        bridge_stp      off
        address         192.168.21.5
        netmask         255.255.255.0
        gateway         192.168.21.1
        pre-up          ip tuntap add dev tap_sev mode tap
        pre-up          ip link set tap_sev up
        post-down       ip link set tap_sev down
        post-down       ip tuntap del dev tap_sev mode tap
書き換えのポイント

  • 物理インターフェース(例では”eth0″)は”manual”と設定する
  • 仮想ブリッジ「br0」を設定する
  • 仮想ブリッジ「br0」にIPv4アドレス/ゲートウェイを設定する
  • 仮想ブリッジとtapデバイスを有効化する

Debian13(Trixie)を再起動し、ipコマンドでインターフェース状態を確認すると、以下のようになっているはずです。

### インターフェース情報の表示 ###
root@v-sasev01:~# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: eth0@if29:  mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
    link/ether bc:24:11:a5:ce:4d brd ff:ff:ff:ff:ff:ff link-netnsid 0
3: tap_sev:  mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
    link/ether 5e:2a:2a:c7:ec:3b brd ff:ff:ff:ff:ff:ff
4: br0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether bc:24:11:a5:ce:4d brd ff:ff:ff:ff:ff:ff
    inet 192.168.21.5/24 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::be24:11ff:fea5:ce4d/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
root@v-sasev01:~# 

tapデバイス「tap_sev」と仮想ブリッジ「br0」が作成され、リンクアップしています。

また、物理インターフェース「eth0」とtapデバイス「tap_sev」は「master br0」として仮想ブリッジ(br0)に接続されていることがわかります。

そして、仮想ブリッジにはIPv4アドレスが設定されています。

インターフェース確認のポイント

  • 物理インターフェース(eth0)に「master br0」と表記されている
    ⇒ ブリッジ(br0)に接続されている、ということ
  • tapデバイス(tap_sev)に「master br0」と表記されている
    ⇒ ブリッジ(br0)に接続されている、ということ
  • 仮想ブリッジ(br0)にIPアドレスが割り当てられている

tapデバイスおよび仮想ブリッジの作成・設定は以上です。

STEP② SoftEther管理画面よりローカルブリッジ接続

SoftEther VPNサーバー上にtapデバイスが作成されたので、管理マネージャを使ってこのtapデバイスを仮想HUBにローカルブリッジ接続します。

SoftEther VPN サーバー環境設定

「LANカード」として、今回登録したブリッジデバイス「br0」が表示されているのを確認します。

そのうえで、仮想HUBを選択し接続先として「新しいtapデバイスとのブリッジ接続」を選択し、「新しいtapデバイス名」を「sev」と入力します。

ここで設定するデバイス名(sev)にはSoftEtherの内部的に”tap_”という文字列が付与されたtapデバイス名となります。

つまり、今回はtapデバイス名を「tap_sev」として構築しましたが、そのうえでSoftEther上の設定名称は「sev」となる、ということです。

以上を設定したら「ローカルブリッジを追加」ボタンを押下し、「状態」が「動作中」となることを確認します。

以上でtapデバイスを使ったローカルブリッジ接続の設定が完了しました。

tapデバイスをローカルブリッジ接続する場合の注意点!

このように、tapデバイスを作成しこのtapデバイスへSoftEtherの仮想ハブをローカルブリッジ接続することで、リモートVPNの通信速度が劇的に改善しました。

しかし、注意点があります。

ローカルブリッジ接続するとL2(Layer2)接続となる

SoftEtherの機能として、仮想ハブをローカルデバイス(物理LANカードなど)とローカルブリッジ接続すると、その仮想ハブとローカルネットワーク(自宅ネット)の接続はL2(Layer2)接続となります。

これはWindwos版でもLinux版でも同じです。

SecureNATを有効にするとL3(Layer3)接続となる

SoftEtherの仮想ハブには「SecureNAT」機能というのがあります。

この機能を有効にすると、その仮想ハブでは仮想DHCP機能とNAT機能が有効となります。

つまり、SecureNATを有効にした仮想ハブはL3(Layer3)接続になる、という仕組みです。

これもWindwos版でもLinux版でも同じです。

L2接続する?L3接続する?

このように、SoftEtherではリモートVPN用の仮想ハブの使い方でL2接続かL3接続かが変わってきます。

L2接続する場合は「SecureNAT機能を無効化し、ローカルブリッジ接続する」であり、L3接続する場合には「SecureNAT機能を有効化する(ローカルブリッジ接続しない)」です。

本記事ではLinux版SoftEtherの通信速度(リモートVPN通信)を改善するために、tapデバイスを作成し仮想ハブをそのtapデバイスとローカルブリッジ接続しました。

つまり、この時点で本記事手順によるリモートVPN接続はL2(Layer2)接続になる、という点に注意が必要です。

※まちがっても仮想ハブのSecureNATを有効化してはいけません!

応用編

ProxmoxのLXCコンテナ環境での構築

仮想環境ProxmoxVEのLXCコンテナとしてSoftEther VPN環境を構築する場合にはひと手間追加してあげる必要があります。

LXCコンテナで動作するOSからtapを操作する場合、LXCコンテナ定義ファイルの編集が必要です。

LXCコンテナ定義ファイルはホスト(Proxmoxサーバー)のシェルから以下の場所にLXCコンテナごとに作成されています。

### LXCコンテナ定義ファイルを更新する
root@pve01:~# cd /etc/pve/lxc
root@pve01:/etc/pve/lxc# ls -l
total 3
-rw-r----- 1 root www-data 590 Dec  4 06:53 152.conf
-rw-r----- 1 root www-data 495 Dec  4 06:53 153.conf
-rw-r----- 1 root www-data 634 Dec  4 06:01 154.conf
-rw-r----- 1 root www-data 535 Dec  4 06:53 155.conf
-rw-r----- 1 root www-data 681 Dec  4 06:53 156.conf
-rw-r----- 1 root www-data 742 Dec  4 06:53 164.conf
root@pve01:/etc/pve/lxc#

ファイル名(XXX.conf)のXXX部分がコンテナ番号に該当します。

上記の定義ファイル(xxx.conf)の中で、SoftEther VPNに該当するコンテナ定義ファイルをエディタで開き、以下の2行を追記してあげます。

### XXX.confの末尾に以下2行を追記する
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

以上の修正を加えたうえで、LXCコンテナ上のSoftEther VPNサーバーにTAP環境を構築してください。

L3(Layer3)でリモートVPN接続する環境の構築

SoftEther VPNは基本的にLayer2(Ethernet)によるネットワーク構築をしてくれます。

本記事でもリモートVPN接続するデバイスはLayer2接続となり、そのIPアドレスは自宅LANと同じDHCPサーバーより払い出されています。

SoftEther VPNではこれをLayer3環境でも構築することが可能です。

リモートVPN接続においてLayer3接続を実現してくれる機能がSecureNATです。

そして、SecureNATの機能を使ってTAP接続する場合には注意が必要です。

SecureNATによるLayer3接続

SoftEther VPNには仮想ハブ単位にSecureNATという機能があり、この機能を有効にすればリモートVPN接続しているデバイスに対してSecureNATの持つDHCPサーバーからIPアドレスが払い出されます。

この機能と仕組みにより、SoftEther VPNはリモートVPNに対してLayer3による接続を可能としています。

ここでの注意点として「速度改善のためには仮想ハブ(SecureNAT有効化)とTAPをブリッジ接続する必要がある」「でもTAPがブリッジとブリッジ接続されていると物理LANカードにSecureNATのDHCPが接続されてしまう」というネットワーク上の矛盾が発生します。

つまり、tapデバイスを使ってブリッジ接続する場合、リモートデバイス(外出先のパソコンやスマホ)とSoftEtherのVPN接続はL2(Layer2)接続として設定する必要があります。

まとめ、SoftEther VPN Linux版の速度改善案

本記事ではSoftEther VPNサーバーをLinux版で構築した場合の通信読度改善を、tapデバイスを使うことで改善した事例となります。

SoftEther VPNサーバーにはWindows版とLinux版がありますが、どうもLinux版の場合には環境次第で通信速度が大きく悪化する現象が発生する場合があるようです。

原因と対処についてはネット上でさまざまな情報がありますが、我が家の環境においてはtapデバイスを利用することで通信速度が大きく改善しました。

SoftEther VPN Linux版で通信速度が良くない場合には一度お試しください。

タイトルとURLをコピーしました