villiogears Logo

villiogears

LinuxでのOpenVPNのセットアップ方法

Ubuntu 22.04でのOpenVPNサーバーセットアップ

Ubuntu 22.04でOpenVPNサーバーを構築する手順を詳しく説明します。

1. システムの更新とOpenVPNのインストール

# システムのパッケージを最新に更新
sudo apt update && sudo apt upgrade -y

# OpenVPNとEasy-RSAをインストール
sudo apt install openvpn easy-rsa -y

2. 証明書認証局(CA)の設定

# Easy-RSAディレクトリを作成
mkdir ~/openvpn-ca
cd ~/openvpn-ca

# Easy-RSAファイルをコピー
cp -r /usr/share/easy-rsa/* ~/openvpn-ca/

# vars ファイルを編集
nano vars

varsファイルに以下の内容を追加:

export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Tokyo"
export KEY_ORG="YourOrganization"
export KEY_EMAIL="your-email@example.com"
export KEY_OU="IT Department"
export KEY_NAME="server"

3. 証明書の生成

# 環境変数を読み込み
source vars

# キーとパラメータをクリーンアップ
./clean-all

# CAキーペアを構築
./build-ca

# サーバー証明書とキーを生成
./build-key-server server

# Diffie-Hellmanパラメータを生成
./build-dh

# HMAC署名を生成(セキュリティ強化)
openvpn --genkey --secret keys/ta.key

4. OpenVPNサーバー設定

# 生成したキーファイルをOpenVPNディレクトリにコピー
sudo cp ~/openvpn-ca/keys/{server.crt,server.key,ca.crt,dh2048.pem,ta.key} /etc/openvpn/

# サーバー設定ファイルを作成
sudo nano /etc/openvpn/server.conf

/etc/openvpn/server.confの設定内容:

# ポート設定
port 1194
proto udp
dev tun

# 証明書とキーファイル
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

# ネットワーク設定
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# クライアントのインターネットアクセスを許可
push "redirect-gateway def1 bypass-dhcp"

# DNSサーバーを指定
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

# セキュリティ設定
tls-auth ta.key 0
key-direction 0
cipher AES-256-CBC
auth SHA256

# その他の設定
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun

# ログ設定
status openvpn-status.log
log openvpn.log
verb 3

5. ネットワーク設定(IP転送とiptables)

# IP転送を有効化
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf

# 設定を即座に適用
sudo sysctl -p

# iptablesルールを設定(NATを有効化)
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# iptablesルールを永続化
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

6. OpenVPNサービスの開始

# OpenVPNサーバーを開始
sudo systemctl start openvpn@server

# 自動起動を有効化
sudo systemctl enable openvpn@server

# サービス状態を確認
sudo systemctl status openvpn@server

7. クライアント証明書の生成

# クライアント用のディレクトリに戻る
cd ~/openvpn-ca

# クライアント証明書を生成(例:client1)
./build-key client1

# クライアント設定ファイル用のディレクトリを作成
mkdir ~/client-configs
mkdir ~/client-configs/files

8. クライアント設定ファイルの作成

クライアント設定テンプレートを作成:

# ベース設定ファイルを作成
nano ~/client-configs/base.conf

base.confの内容:

client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
key-direction 1
cipher AES-256-CBC
auth SHA256
comp-lzo
verb 3

9. クライアント設定生成スクリプト

# 設定生成スクリプトを作成
nano ~/client-configs/make_config.sh

スクリプトの内容:

#!/bin/bash

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/$1.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/$1.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/$1.ovpn
# スクリプトを実行可能にする
chmod 700 ~/client-configs/make_config.sh

# クライアント設定ファイルを生成
cd ~/client-configs
./make_config.sh client1

10. ファイアウォール設定

# UFWを使用する場合
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw enable

# ファイアウォールルールを確認
sudo ufw status

トラブルシューティング

ログの確認

# OpenVPNログを確認
sudo tail -f /var/log/openvpn.log

# システムログを確認
sudo journalctl -u openvpn@server -f

接続テスト

# サーバーでの接続状態確認
sudo cat /etc/openvpn/openvpn-status.log

# ネットワークインターフェース確認
ip addr show tun0

よくある問題と解決方法

  1. クライアントが接続できない

    • ファイアウォール設定を確認
    • ポート1194/UDPが開いているか確認
  2. インターネットアクセスができない

    • IP転送が有効になっているか確認
    • iptablesのNATルールが正しく設定されているか確認
  3. DNS解決ができない

    • クライアント設定のDNSサーバー設定を確認

これでUbuntu 22.04でのOpenVPNサーバーセットアップが完了です。生成されたクライアント設定ファイル(.ovpn)をクライアントに配布して接続を行ってください。