それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

OpenVPNの管理画面をインストールしてVPNを快適に使う。

OpenVPNって面倒なんですよね。

証明書を使ったりCAを作ったり、プロファイルを作ったり面倒なんですよね。

管理画面が公式から提供されていた。

OpenVPN Access Server という名前(通称 OpenVPN-AS ) で管理画面WebUIが提供されていた。 これで、OpenVPNVPN管理できるじゃん。

インストールの手順も公式サイトに記述がある。

Setting Up OpenVPN Access Server On Ubuntu

無料フリー版だと2接続(セッション)に限られるが、管理が楽であるなら使ってみても良いかも

準備

アカウント作って、ログイン

フリー版のサブスクリプションを申し込む

ライセンス・キーをコピーして保存しておく

OpenVPN Access Serverをインストールする。

raspiにインストールして試す

ssh raspi-ubuntu
lxc launch ubuntu:22.04 ovpn
lxc exec ovpn -- bash -c 'apt update && apt upgrade -y'

lxc へホスト側と同じNICで同じLANをMacVlanで使わせる。

lxc config device add ovpn mvlan0 nic nictype=macvlan parent=eth0
lxc exec ovpn dhclient -v eth1

OpenVpnサーバーのインストール lxc コンテナ内部へ入る。

lxc shell ovpn

必要なパッケージをインストール

apt update && apt -y install ca-certificates wget net-tools gnupg
wget https://as-repository.openvpn.net/as-repo-public.asc -qO /etc/apt/trusted.gpg.d/as-repository.asc
truncate -s0 /etc/apt/sources.list.d/openvpn-as-repo.list
## arm用
echo "deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/as-repository.asc] http://as-repository.openvpn.net/as/debian jammy main" >>/etc/apt/sources.list.d/openvpn-as-repo.list
## x86用
echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/as-repository.asc] http://as-repository.openvpn.net/as/debian jammy main" >> /etc/apt/sources.list.d/openvpn-as-repo.list

apt update && apt -y install openvpn-as

日付と言語を設定

dpkg-reconfigure tzdata 
 dpkg-reconfigure locales

APTのURLははOpenVPNにアカウントを作れば見える。

インストールが完了した

初期パスワードなどが表示される。

キーを登録してアクティベーション

OpenVPN利用者アカウントを作る

アカウント名とパスワードを登録する。(離れているので注意)

ネットワークのアクセスを許可する。(VPNを超えてLANネットワークやグローバルにアクセスできるように)

アクセス許可をつけないと、VPNホスト以外に通信ができなかった。

コマンドから管理

コマンドから再起動

systemctl restart openvpnas.service

または、専用コマンドから管理。

/usr/local/openvpn_as/scripts/sacli  --help

プロセスが動く

次のようなプロセスが動く

openvpn+    4793  0.0  1.0 125268 81252 ?        S    May22   1:42  \_ /usr/bin/python3 -c from pyovpn.cserv.wserv_entry import start ; start() -no -u openvpn_as -g openvpn_as --pidfile /usr/local/open
root        4794  0.0  0.6  62096 50168 ?        S    May22   0:08  \_ /usr/bin/python3 -c from pyovpn.log.logworker import start ; start()
root        4823  0.0  0.4  46888 35616 ?        S    May22   0:00  \_ /usr/bin/python3 -c from pyovpn.sagent.iptworker import start6 ; start6()
root        4824  0.0  0.4  46912 35696 ?        S    May22   0:53  \_ /usr/bin/python3 -c from pyovpn.sagent.iptworker import start ; start()
root        4861  0.0  0.0   3620  2276 ?        S    May22   0:00  |   \_ iptables-restore -n
openvpn+    4827  0.0  0.0   9476  7800 ?        S    May22   0:00  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4828  0.0  0.0   8940  2900 ?        S    May22   0:00  |   \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4837  0.0  0.0   9208  7496 ?        S    May22   0:00  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4839  0.0  0.0   8940  1484 ?        S    May22   0:00  |   \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4845  0.0  0.0   9208  7504 ?        S    May22   0:00  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4847  0.0  0.0   8940  1484 ?        S    May22   0:00  |   \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4853  0.0  0.0   9208  7488 ?        S    May22   0:00  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4855  0.0  0.0   8940  1484 ?        S    May22   0:00  |   \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4862  0.0  0.0   9356  7808 ?        S    May22   0:01  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4869  0.0  0.0   9100  7424 ?        S    May22   0:01  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4876  0.0  0.0   9100  7408 ?        S    May22   0:01  \_ openvpn-openssl --errors-to-stderr --config stdin
openvpn+    4883  0.0  0.0   9100  7424 ?        S    May22   0:01  \_ openvpn-openssl --errors-to-stderr --config stdin

リッスンポートなどを適宜変更する

iOSなどの接続設定(プロファイル)は自動生成されるので、そのために必要な設定をする。

Hostname or IP Addressが、OVPNプロファイルに設定される名前

Port number: が、OVPNプロファイルに設定されるポートとこのサーバがリッスンするポート

ここで設定した、サーバー名:ポート(TCP)が、iOSから接続するときのプロファイルになる。(プロファイル生成用とリッスンポートは同じ設定になり、分割した設定ができない)

ポート転送などを行う。

ルーターでポート転送を行う。

ルーターでポート・フォワーディングやDNATをして、接続できるようにする

プロファイルの確認

管理画面(/admin)ではなくユーザー用CWEB画面( / )にアクセスする。

ログインしてプロファイルを取り出す

プロファイルをダウンロードして

中身を確認する

意図したとおりに、接続先アドレスとポートが設定されていたらOK

iOSを準備する

iOSを取り出して、OpenVPNのアプリを入れる

インストールしたサーバにアクセスしてログインして、プロファイルをダウンロード

シェアシート(↑)を開いて、OpenVPNを指定する。

OpenVPNにプロファイルが取り込まれる。

パスワードは、作成したアカウントのパスワードを入れる。

プロファイル追加時にiOSVPN追加のためiOSのロックパスワードが要求される。

これで、あとiOSVPN管理画面から接続するだけ。

OpenVPNのアプリではなく、iOSの設定(VPN)から接続する方がいいみたい。

速度を試してみる。

4Gでau LTE が 180Mbps

Wireguardで 70-80Mbps

OpenVPN経由で20-30Mbps

同条件での速度測定ではなく、WireguardはUDPOpenVPNTCPなので、遅いのは仕方ないのですが。それでもスループットは期待したほどでない。。。

docker 版

linuxserver.ioによるDocker版もあります。こちらの方が動かすには楽ちんかもしれない。

ただし、もうメンテナンスされてないので、注意が必要です。私は、lxc で一通り試した後にDockerにしましたが、メンテナンスされてないと気づいて焦ってます。

また、linuxserver.io 版のdocker は compose up するたびに apt install から始まるので、インストールに時間がかかります。カスタマイズして使ったほうが良いでしょう。

sslh と組み合わせ

sshlと組み合わせることで、443/tcphttpsOpenVPNを共用することができて便利です。

FWでのVPNの疎通を考えると、問題なく使えるのではないでしょうか。