- ホーム
- マニュアル
- セットアップスクリプト
- OpenVPN
OpenVPNセットアップスクリプトを利用する
対象
1.OpenVPNについて
1-1.OpenVPNとは
OpenVPNは、インターネット上に仮想的な専用の通信路を構築することで、特定のユーザーのみが利用できる安全なネットワーク環境を実現する、オープンソースのVPNプロトコルです。
通信内容は「トンネリング」「暗号化」「認証」といった技術によって保護されており、安全にデータを送受信できます。
OpenVPNでは、クライアントのインターネット通信をVPNサーバー経由で行うことや、拠点間通信などにも利用できます。
本マニュアルでは、OpenVPNセットアップスクリプトのインストールから、クライアントでVPNサーバーへの接続を確立するまでの手順を案内しています。
1-2.特徴
| 特徴 | 説明 |
|---|---|
| 通信の暗号化 | AES-256などの強力な暗号化アルゴリズムを採用し、データの機密性を確保できます。 |
| クロスプラットフォーム対応 | 接続ソフトウェアはWindows、macOS、Linux、iOS、Androidなど、様々なクライアントから利用できます。 |
| 柔軟な認証方式 | ユーザー名・パスワード、証明書、マルチファクター認証(MFA)など、多様な認証方法が利用できます。 |
| TCP/UDP対応 | 通信の安定性や速度に応じて、TCP/UDPプロトコルを選択できます。 |
1-3.活用例
OpenVPNでは、用途やネットワーク構成に応じた追加設定を行うことで、以下のような用途に利用できます。
必要な設定については、OpenVPN公式ガイドをご参照ください。
| 活用例 | 説明 |
|---|---|
| インターネット通信のVPN経由 | クライアントのインターネット通信をVPNサーバー経由とすることで、接続先からはVPNサーバーのIPアドレスが通信元として見える構成にできます。 |
| 公共ネットワークでのプライバシー保護 | 公共のWi-Fiネットワークなどを利用する場合に、クライアントとVPNサーバー間の通信を暗号化できます。 |
| 拠点間やリモート環境の安全な通信 | ルーティングなどを適切に設定することで、複数拠点間の通信やリモートワーク環境などに利用できます。 |
2.OpenVPNセットアップスクリプトの利用手順
本手順ではサーバーを契約してOpenVPNの仮想マシンを構築することを前提とします。
既存のサーバーをOpenVPNに置き換える場合は、「OS再インストール」からOpenVPNのセットアップスクリプトを利用してください。
1.「お申し込み」をクリック
XServerアカウントへログインし、「お申し込み」をクリックしてください。

2.セットアップスクリプトを選択
「お申し込み」一覧の「VPS(Linux系サーバー)」をクリックしてください。

「OSを選択してインストール」をクリックし、対応する以下のOS・バージョンを選択してください。
その後、「セットアップスクリプト」から「OpenVPN」を選択してください。

お申し込み・お支払いを完了することで、選択したスクリプトがサーバー構築時に自動実行されます。
本セットアップスクリプトで実行される処理は以下のとおりです。
スクリプトを表示
# OpenVPN
set -euo pipefail
## OpenVPN
OPENVPN_DIR="/etc/openvpn/"
SERVER_DIR="${OPENVPN_DIR}server/"
CLIENT_DIR="${OPENVPN_DIR}ovpn/"
EASYRSA_DIR="${OPENVPN_DIR}easy-rsa/"
EASYRSA_VAR_FILE="${EASYRSA_DIR}vars"
install -d "${CLIENT_DIR}"
install -d -m 700 "${EASYRSA_DIR}"
### install
curl -fsSL \
--retry 10 \
--retry-delay 5 \
--retry-connrefused \
--retry-all-errors \
https://swupdate.openvpn.net/repos/repo-public.gpg | gpg --dearmor > /etc/apt/keyrings/openvpn-repo-public.gpg
for i in {1..10}; do
[[ -f "/etc/apt/keyrings/openvpn-repo-public.gpg" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/openvpn-repo-public.gpg] https://build.openvpn.net/debian/openvpn/stable ${UBUNTU_CODENAME} main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
### ${UBUNTU_CODENAME} ... included /etc/os-release
for i in {1..5}; do
DEBIAN_FRONTEND=noninteractive apt update -y \
&& DEBIAN_FRONTEND=noninteractive apt install -y openvpn easy-rsa \
&& break
[[ "$i" -eq 5 ]] && exit 1 || sleep 5
done
### init easyrsa
SETTING_CIPHERS="data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305"
SETTING_AUTH="auth SHA256"
SETTING_TLS_AUTH="tls-auth ta.key 0"
# functions
ovpn_header () {
cat <<EOF
client
dev tun
proto udp
remote ${IPADDR} 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-client
key-direction 1
${SETTING_CIPHERS}
${SETTING_AUTH}
verb 3
EOF
}
make_ovpn () {
local target=$1
local ca_path="${EASYRSA_DIR}pki"
local key_path="${EASYRSA_DIR}pki/private"
local crt_path="${EASYRSA_DIR}pki/issued"
local ta_key_path="${OPENVPN_DIR}ta.key"
local output_file="${CLIENT_DIR}${target}.ovpn"
{
ovpn_header
echo '<ca>'
sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' "$ca_path/ca.crt"
echo '</ca>'
echo '<key>'
cat "$key_path/$target.key"
echo '</key>'
echo '<cert>'
sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' "$crt_path/$target.crt"
echo '</cert>'
echo '<tls-auth>'
cat "$ta_key_path"
echo '</tls-auth>'
} > "$output_file"
chmod 600 "$output_file"
}
#### server
cd "${OPENVPN_DIR}" && openvpn --genkey secret ta.key
cp -p ta.key "${SERVER_DIR}"
SERVER_CONF_PATH="${SERVER_DIR}server.conf"
cp -p /usr/share/doc/openvpn/examples/sample-config-files/server.conf "${SERVER_CONF_PATH}"
if grep -qE '^[;#]?[[:space:]]*data-ciphers[[:space:]]' "${SERVER_CONF_PATH}"; then
sed -i -E "s|^[;#]?[[:space:]]*data-ciphers[[:space:]].*|${SETTING_CIPHERS}|" "${SERVER_CONF_PATH}"
else
echo "${SETTING_CIPHERS}" >> "${SERVER_CONF_PATH}"
fi
if grep -qE '^[;#]?[[:space:]]*auth[[:space:]]' "${SERVER_CONF_PATH}"; then
sed -i -E "s|^[;#]?[[:space:]]*auth[[:space:]].*|${SETTING_AUTH}|" "${SERVER_CONF_PATH}"
else
echo "${SETTING_AUTH}" >> "${SERVER_CONF_PATH}"
fi
if grep -qE '^[;#]?[[:space:]]*tls-auth[[:space:]]' "${SERVER_CONF_PATH}"; then
sed -i -E "s|^[;#]?[[:space:]]*tls-auth[[:space:]].*|${SETTING_TLS_AUTH}|" "${SERVER_CONF_PATH}"
else
echo "${SETTING_TLS_AUTH}" >> "${SERVER_CONF_PATH}"
fi
ln -s /usr/share/easy-rsa/easyrsa "${EASYRSA_DIR}"
ln -s /usr/share/easy-rsa/x509-types "${EASYRSA_DIR}"
cp -p /usr/share/easy-rsa/openssl-easyrsa.cnf "${EASYRSA_DIR}"
cp -p /usr/share/easy-rsa/vars.example "${EASYRSA_VAR_FILE}"
sed -i "s/#set_var EASYRSA_CA_EXPIRE.*/set_var EASYRSA_CA_EXPIRE 7300/" "${EASYRSA_VAR_FILE}"
sed -i "s/#set_var EASYRSA_CERT_EXPIRE.*/set_var EASYRSA_CERT_EXPIRE 7300/" "${EASYRSA_VAR_FILE}"
export EASYRSA_BATCH=1
export EASYRSA_REQ_CN="${IPADDR}"
cd "${EASYRSA_DIR}"
./easyrsa --vars="${EASYRSA_VAR_FILE}" init-pki
for i in {1..10}; do
[[ -d "${EASYRSA_DIR}pki" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
./easyrsa --vars="${EASYRSA_VAR_FILE}" build-ca nopass
for i in {1..10}; do
[[ -f "${EASYRSA_DIR}pki/ca.crt" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
./easyrsa --vars="${EASYRSA_VAR_FILE}" gen-req server nopass
for i in {1..10}; do
[[ -f "${EASYRSA_DIR}pki/reqs/server.req" && -f "${EASYRSA_DIR}pki/private/server.key" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
./easyrsa --vars="${EASYRSA_VAR_FILE}" sign-req server server nopass
for i in {1..10}; do
[[ -f "${EASYRSA_DIR}pki/issued/server.crt" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
./easyrsa gen-dh
for i in {1..10}; do
[[ -f "${EASYRSA_DIR}pki/dh.pem" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
cp -p pki/ca.crt pki/private/server.key pki/issued/server.crt pki/dh.pem "${SERVER_DIR}"
for i in {1..5}; do
DEBIAN_FRONTEND=noninteractive apt install -y iptables-persistent && break
[[ "$i" -eq 5 ]] && exit 1 || sleep 5
done
for i in {1..10}; do
[[ -d "/etc/iptables" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
systemctl --now enable openvpn-server@server.service
#### client
unset EASYRSA_REQ_CN
cd "${EASYRSA_DIR}"
for idx in {1..3}; do
./easyrsa --vars="${EASYRSA_VAR_FILE}" build-client-full client${idx} nopass
for i in {1..10}; do
[[ -f "${EASYRSA_DIR}pki/issued/client${idx}.crt" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
make_ovpn client${idx}
for i in {1..10}; do
[[ -f "${CLIENT_DIR}/client${idx}.ovpn" ]] && break
[[ "$i" -eq 10 ]] && exit 1 || sleep 3
done
done
## Other
cat > /etc/motd <<EOF
==========================================================
HostIP: ${IPADDR}
ovpn file1: ${CLIENT_DIR}client1.ovpn
ovpn file2: ${CLIENT_DIR}client2.ovpn
ovpn file3: ${CLIENT_DIR}client3.ovpn
OpenVPN Server dir: ${SERVER_DIR}
Easyrsa dir: ${EASYRSA_DIR}
To delete this message: unlink /etc/motd
==========================================================
EOF
3.事前準備
3-1.パケットフィルターの設定
OpenVPNを利用するには、使用する機能に応じて、以下のポートを開放する必要があります。
必須ポートについては必ず開放するよう設定してください。
コントロールパネルの「パケットフィルター設定」画面から、該当のポートを許可するルールを追加してください。
必須ポート
| 用途 | ポート番号 | 目的 |
|---|---|---|
| OpenVPN | UDP 1194 | アプリにてOpenVPNに接続するため。 |
| SSH | TCP 22 | Tera TermなどのSSHクライアントを使ってサーバーに接続するため。本手順ではWinSCPでの接続に使用。 |
ご利用の構成や機能に応じて必要なポートのみ開放してください。
使用していない機能に関連するポートは、セキュリティ上の観点から開放しないことを推奨します。
パケットフィルターの設定は下記マニュアルからご確認ください。
パケットフィルターの設定について
3-2.接続情報の確認
コントロールパネルの「コンソール」または「SSH」でVPSにログインすると以下のような情報が表示されます。

ovpn file (ovpnファイル)とは
OpenVPNサーバーへの接続情報が含まれており、クライアント側でインポートして使用する設定ファイルです。(以降「クライアント設定ファイル」と記載)
クライアント設定ファイルはデフォルトで3台分用意しています。
使用方法は「4.OpenVPNセットアップ手順」以降をご確認ください。
- ovpn file1~3: クライアント設定ファイルの保存先(3台分)
- OpenVPN Server dir: OpenVPNサーバーの設定ファイルの保存先
- EasyRSA dir: 自己証明書の発行、管理を行う各種設定ファイルの保存先
4.OpenVPNセットアップ手順
注意事項
OpenVPNのバージョンによっては一部本手順と画面表記等が異なる場合があります。
複数台のクライアント端末で同じクライアント設定ファイルは利用できません。
4-1.クライアント設定ファイルのダウンロード
ご利用のWindows端末へクライアント設定ファイルを転送します。
TeratermやWinSCPなど、ssh/scpクライアントソフトが必要になります。
ダウンロードしたクライアント設定ファイルは「Google Drive」などのクラウドストレージに保存しておくことで、iOSまたはAndroidでご利用になる場合、設定がスムーズになります。
また、当マニュアルのiOS、Androidのご利用手順は「Google Drive」を利用した手順を説明しています。
本手順ではWinSCPを利用し、サーバーからWindows端末へのファイル転送手順をご紹介します。
1.WinSCPからサーバーへログイン
■パスフレーズでログインする場合
WinSCPを起動後、サーバーへの接続情報を入力し「ログイン」ボタンをクリックしてください。

■鍵認証でログインする場合
WinSCPを起動し、サーバーへの接続情報を入力します。「設定」プルを選択し設定画面を開いてください。

「高度なサイトの設定」よりSSHの「認証」をクリック、秘密鍵の保存先を指定し「OK」をクリック後にログインを行ってください。
※WinSCPでは秘密鍵指定の際、ppk拡張子の鍵が新規で作成されますのでppkファイルを選択し認証を行います。

2.クライアント設定ファイル格納ディレクトリへ移動
ログインの完了後、ローカル環境(左画面)とサーバー環境(右画面)がそれぞれ表示されます。
右画面のサーバー環境より下記赤枠の箇所をクリックしてください。

次のような画面が表示されるので、「/etc/openvpn/ovpn/」と入力し「開く」ボタンをクリックしてください。

3.クライアント設定ファイルのダウンロード
対象のディレクトリへの移動が確認できれば、任意のクライアント設定ファイル(client1~3.ovpn)を右クリックし、「ダウンロード(L)」を選択してください。

次のような画面が表示されるので、ダウンロード先を選択し「OK」をクリックしてください。
※ダウンロード先は「参照」ボタンから選択することをお勧めします。

4-2.クライアント側設定手順
Windowsで利用する
OpenVPNのインストールと設定
Webブラウザから下記URLにて OpenVPN GUI をダウンロードしてください。
https://www.openvpn.jp/download/
※バージョン2.6.6(64bit)をインストールした手順にてご案内しております。
ダウンロードファイル(OpenVPN-2.6.6-I001-amd64)を右クリックし、「インストール」を選択してください。

警告画面が表示されます。「実行」ボタンを選択してください。

「Install Now」ボタンを選択してください。

「OpenVPN Installing Completed」と表示されたら「Close」ボタンを選択してください。

クライアント設定ファイルを右クリックし、「Import into OpenVPN-GUI」を選択してください。

ファイルのインポートが完了しましたら、下記のような通知がきます。

画面右下のタスクトレイよりOpenVPN GUIのアイコンを右クリックし「接続」を選択してください。

接続が完了したら以下のメッセージが表示されます。

最後にタスクトレイのOpenVPN GUIのアイコンが緑色に変化していれば完了です。

Android/iOSで利用する
Android/iOSでOpenVPNをご利用になる場合、「クライアント設定ファイルのダウンロード」で保存したクライアント設定ファイルを、保存したパソコンからご利用になる端末へ転送します。
※ssh/scpアプリケーションで直接、クライアント設定ファイルをAndroid/iOSにダウンロードした場合、転送作業は不要です。
または、パソコンに保存したクライアント設定ファイルを「Google Drive」にアップロードし、Android/iOSと同期しておくことで、設定がスムーズになります。
本手順では、クライアント設定ファイルを「Google Drive」アプリからインポートする手順を説明します。
また、例として「clinet1.ovpn」を使用します。
1.OpenVPNのインストールと設定
■iOSをご利用の場合
AppStoreより「OpenVPN Connect」をインストールしてください。
https://apps.apple.com/jp/app/openvpn-connect-openvpn-app/id590379981
※バージョン3.4.0を利用した手順をご案内しております。
■Androidをご利用の場合
PlayStoreより「OpenVPN Connect」をインストールしてください。
https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ja&gl=US&pli=1
※バージョン3.3.4を利用した手順をご案内しております。
2.OpenVPN Connectの起動
OpenVPN Connectがインストールされていることを確認しAPPアイコンをタップしてください。

インストール後は下記のような画面が表示されますので、「AGREE」をタップしてください。

OpenVPNアプリが正常に起動することを確認してください。
正常に起動すると、「Import Profile」画面が表示されます。

3.Google Drive アプリからクライアント設定ファイルのインポート
先ほど開いた OpenVPN Connect を閉じ、Google Drive アプリを起動してください。
Google Drive アプリでクライアント設定ファイルを保存しているフォルダを開きます。
保存したクライアント設定ファイルを選択し、赤枠の個所をタップしてください。

「アプリで開く」を選択してください。

アプリ一覧が表示されるので、OpenVPNのアイコンをタップし、ファイルのインポートを行います。


4.インポート確認
インポート後、OpenVPN Connect が起動され「Import Profile」画面に移動します。
iOSの場合、「ADD」をタップしてください。

Androidの場合、「Import .ovpn profile?」と表示されますので、「OK」ボタンをタップしてください。

Imported Profile画面に移行します。
Profile Nameはデフォルトでは「IPアドレス[client1]」と表示されます。
Profile Nameを確認後、「CONNECT」ボタンをタップしてください。

5.接続
初回の「CONNECT」をタップ時、下記のような画面が表示されるので、iOSなら「許可」、Androidなら「OK」ボタンをタップしてください。


接続に問題無ければ下記のような画面となり、VPN接続が確立されます。


