こんにちはゆーろんです。
今回はAWSのEC2に入れたUbuntuサーバにOpenVPNサーバを構築しようと思います。
個人的には外部のLANからインターネットアクセスした場合ののプロキシサーバとして利用するために設定を行いました。
ぺんろん
頑張って書いたのでぜひご覧ください!
目次
OpenVPNとは
OpenVPNはGPL Lisenceで公開されているOSSのインターネットVPNのこと。
具体的にはSSL/TLSプロトコルを利用したSSL VPNといえます。
特徴は以下の通りです。
- 堅牢なセキュリティと安全性
- 設定がテキストベース
- 様々なOSに対応している
VPNが低コストで実現できるため、個人や小規模事業者がVPNを構築する際の選択肢の1つとなっています。
OpenVPNとは | OpenVPN.JP
OpenVPNの設定手順
EC2の用意や基本設定は既に済んでいる前提で手順を進めていきます。
OpenVPNとeasy-rsaのインストール
まずOpenVPNとeasy-rsaをインストールします。
sudo apt install openvpn easy-rsa
ルート認証局の作成
ルート認証局は自己証明をしただけで信頼性のない証明書を作る認証局です。
オレオレ認証局とも呼ばれます。
cd /usr/share/easy-rsa/
cp -p vars.example vars
vi vars
varsのパラメータで以下の部分で証明書の有効期限を設定できます。
cd /usr/share/easy-rsa/
cp -p vars.example vars
vi vars
varsのパラメータで以下の部分で証明書の有効期限を設定できます。
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
varsファイルへの入力が終わったら、PKIディレクトリの作成に進みます。それにはinit-pkiオプションを指定して、easyrsaスクリプト実行します。
./easyrsa init-pki
認証局/DHパラメータの作成
まず以下コマンドで認証局を作成します。
./easyrsa build-ca
「Enter PEM pass phrase:」と表示されますが、任意のパスフレーズを決めて入力します(パスフレーズは後で使うので覚えておいてください)。
「Common Name (eg: your user, host, or server name) [Easy-RSA CA]:」も名前は任意で大丈夫です。
次にDHパラメータを作成します。
生成に3分ほどかかります。
./easyrsa gen-dh
サーバ用の秘密鍵/証明書の作成
途中のパスフレーズは「認証局/DHパラメータの作成」で入力したものと同じものを入力します。
サーバ名は適当に決めてください。
./easyrsa build-server-full <サーバ名> nopass
クライアント用秘密鍵/証明書の作成
途中のパスフレーズは「認証局/DHパラメータの作成」で入力したものと同じものを入力します。
クライアント名は適当に決めてください。
./easyrsa build-client-full <クライアント名> nopass
OpenVPNの設定
/usr/share/easy-rsa/pki
以下に生成されたCA証明書(ca.crt
)、サーバ用証明書(issued/server.crt
)、サーバ用秘密鍵(private/server.key
)、DHパラメータ(dh.pem
)を/etc/openvpn
以下にコピーします。
sudo cp pki/ca.crt /etc/openvpn/
sudo cp pki/issued/server.crt /etc/openvpn/
sudo cp pki/private/server.key /etc/openvpn/
sudo cp pki/dh.pem /etc/openvpn/dh2048.pem
またサーバのconfigファイルを/etc/openvpn
以下にコピーします。
sudo cp -p /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf
コピーしたconfigファイルを設定します。
設定のためのパラメータの一部を記載します。
パラメータ | 説明 |
---|---|
port 1194 | VPN接続する際のポート。変更する場合はここを書き換えます。 |
proto udp | VPN接続する際のプロトコル。変更する場合はここを書き換えます |
push “dhcp-option DNS 8.8.8.8” | VPNサーバとして通信が外部に行く際に名前解決を行うDNSサーバ(デフォルトでは記載されていない) |
server 10.8.0.0 255.255.255.0 | VPN接続したクライアントに割り当てられるアドレス範囲。 |
push “route xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx” | サブネットのIPv4 CIDRアドレス範囲。 |
push “redirect-gateway def1” | トラフィックがVPNサーバ経由にするための記述(デフォルトでは記載されていない)。 |
client-config-dir ccd | クライアントに固定IPを割り当てる設定を読み込む記述(読み込むディレクトリはccd) |
またta.keyを生成します。
sudo openvpn --genkey --secret /etc/openvpn/ta.key
パケット転送の有効化
パケットの転送を有効化します。
sudo vi /etc/sysctl.conf
#net.ipv4.ip_forward=1
の記述個所の#を外し保存します。
sudo sysctl -p
VPNクライアントに固定IPを割り当てる
まずOpenVPNのserver.configでclient-config-dir ccd
と設定したことを確認し、以下を実施します。
なおクライアント名はクライアント用秘密鍵/証明書の作成で実施した同じ名称で設定します。
sudo mkdir /etc/openvpn/ccd
cd /etc/openvpn/ccd
sudo touch <クライアント名>
echo "ifconfig-push 10.8.0.5 10.8.0.6" > client1
echo部の書式は以下の通りで、第4オクテットは1から始まり4ずつインクリメントする必要があります。
また次のクライアントとは3つずつ間をあける必要があります。
ifconfig-push <クライアントIPアドレス> <対のサーバ側IPアドレス>
OpenVPNの起動
OpenVPNを起動します。
sudo systemctl start openvpn
sudo systemctl enable openvpn
sudo systemctl status openvpn
VPNクライアントの通信をOpenVPNサーバに経由させる
IPマスカレードを有効にすることで、IGWからきたVPNクライアントのアクセスをOpenVPNサーバからのアクセスに見えるように設定します。
まずifconfig
で外部とつながるインターフェイスを確認します。
次にIPマスカレードと設定保持のためのパッケージをインストールします。
なおインターフェイスは今回eth0
が外部とつながるものとして設定しますので適宜確認してください。
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # IPマスカレード設定
sudo iptables -t nat -n -L # ルートテーブルの確認
sudo apt install iptables-persistent # 永続化設定用パッケージのインストール
以上でOpenVPNサーバの基本的な設定は終了です。
なおEC2を使用している場合は最終的にはEC2のENIの「Source/Dest Check」の無効化やSSH用のポートを塞ぐなども行うことをおススめします。
OpenVPNクライアントの設定
以下ファイルをダウンロードして「.ovpn」を作成します。
/usr/share/easy-rsa/pki/ca.crt
/usr/share/easy-rsa/pki/private/client1.key
/usr/share/easy-rsa/pki/issued/client1.crt
/etc/openvpn/ta.key
作成には以下の記事が参考になると思いますので記載します。
OpenVPNの「.ovpn」ファイル作成シェル - Qiita
概要OpenVPNを構築して、いちいち手動で「.ovpn」ファイルを作るのが面倒だったので作りました。一応、↓の後の手順になります。https://qiita.com/SSMU3/items/…
参考記事
以下の記事を参考にしました。