Ubuntu22.04でVPNServerを立てた経緯
自宅から別の拠点にあるPCにVPNでリモートデスクトップをしたいと思いました。
そのため別拠点のラズパイ4(Ubutnu22.04)にVPNserverを立てて、自宅PCとVPN接続してからラズパイ4と同じ拠点にあるPCにリモートデスクトップをします。
office365を契約していないのでchatgptさんに構成図を作図してもらいました。
セットアップの流れは以下の通りです。
- OpenVPNとEasyRSAをインストール
- server.confのセットアップ
- EasyRSAで証明書を作成
- OVPNファイルを作成
1.OpenVPNとEasyRSAをインストール
OpenVPNのインストール
$ sudo apt update
$ sudo apt install openvpn
EasyRSAのインストール
$ sudo apt install easy-rsa
EasyRSAの設定ディレクトリを作成
$ sudo cp -r /usr/share/easy-rsa/ /etc/openvpn/
$ cd /etc/openvpn/easy-rsa
2. server.confの記載内容
/etc/openvpn/server/server.conf に以下の内容を記載します。
# OpenVPNサーバーがリッスンするポート番号を指定します。
port 1194
# プロトコルを選択します(UDPが速く、推奨されます)。
proto udp
# ルーティングのためのTUNデバイスを使用します。
dev tun
# CA証明書へのパスを指定します。
ca /usr/share/easy-rsa/pki/ca.crt
# サーバー証明書へのパスを指定します。
cert /usr/share/easy-rsa/pki/issued/server1.crt
# サーバーの秘密鍵へのパスを指定します。
key /usr/share/easy-rsa/pki/private/server1.key
# Diffie-Hellmanパラメータへのパスを指定します。
dh /usr/share/easy-rsa/pki/dh.pem
# VPNのサブネットとネットマスクを指定します。
server 10.0.0.0 255.255.255.0
# クライアントと仮想IPアドレスの関連を記録します。
ifconfig-pool-persist /var/log/openvpn/ipp.txt
# 接続のドロップを検出するためのkeepaliveパラメータを設定します。
keepalive 10 120
# TLS認証キーへのパスを指定します。
tls-auth /usr/share/easy-rsa/pki/ta.key 0
# 暗号化暗号を指定します。
cipher AES-256-CBC
# 再起動時にキーとトンネルが持続するようにします。
persist-key
persist-tun
# ステータスログファイルへのパスを指定します。
status /var/log/openvpn/openvpn-status.log
# ログの詳細レベルを設定します。
verb 3
# サーバーが再起動したときにクライアントに通知します。
explicit-exit-notify 1
3. EasyRSAで証明書の作成方法
変数の初期化
$ cd /etc/openvpn/easy-rsa
$ cd source vars
Clean up any previous keys and certificates
変数の初期化
$ ./clean-all
ビルドCA (Certificate Authority)
$ ./build-ca
サーバー証明書とキーの作成
$ ./build-key-server server
Diffie-Hellmanキーの生成
$ ./build-dh
クライアント証明書とキーの作成
$ ./build-key client01
(オプション) タンネル用の静的キーを生成
$ ./build-key client01
4. OVPNファイルの作成方法
OVPNファイルは、クライアントがVPNサーバーに接続するための設定ファイルです。以下は基本的なOVPNファイルの内容です。
/etc/openvpn/client01.ovpn ファイルを作成します。
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
verb 3
<ca>
[ここにca.crtの内容を貼り付け]
</ca>
<cert>
[ここにclient01.crtの内容を貼り付け]
</cert>
<key>
[ここにclient01.keyの内容を貼り付け]
</key>
<tls-auth>
[ta.key の内容をここにペースト, もし使用している場合]
</tls-auth>