====== OpenVPN サーバーのインストール ======
VPN ソフトの OpenVPN をインストールする。
===== 環境 =====
==== インストール環境 ====
* OpenWrt 19.07.0
* Linksys WRT1900ACS
^ パッケージ名 ^ バージョン ^
| openvpn-openssl | 2.4.7-2 |
| openvpn-easy-rsa | 3.0.4-1 |
===== インストール =====
==== ファイアフォールの設定 ====
ファイアフォールの設定を行う。以下のコマンドを実行する。
* lan ゾーンに OpenVPN のインターフェースの tun0 を追加
* OpenVPN 用に Allow-OpenVPN ルールを追加
* ファイアウォールを再起動
uci add_list firewall.@zone[0].device="tun0"
uci set firewall.ovpn="rule"
uci set firewall.ovpn.name="Allow-OpenVPN"
uci set firewall.ovpn.src="wan"
uci set firewall.ovpn.dest_port="1194"
uci set firewall.ovpn.proto="udp"
uci set firewall.ovpn.target="ACCEPT"
uci commit firewall
/etc/init.d/firewall restart
==== OpenVPN をインストール ====
先にパッケージをインストールして /etc 以下に OpenVPN 用のディレクトリを作成する。
opkg update
opkg install openvpn-openssl
==== 公開鍵基盤(PKI)を作成 ====
パッケージをインストール。
opkg update
opkg install openvpn-easy-rsa
cp -r /etc/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/
パラメータとして使われる環境変数を設定する。
vim ./vars
#set_var EASYRSA_REQ_CN "ChangeMe"
を以下に変更する。
set_var EASYRSA_REQ_CN "OpenWRT-OpenVPN"
他にも国コード等を変更したければ同様に変更する。
PKI ディレクトリを削除して初期化する。
vars ファイルは自動で読み込まれると書いてあるが読み込まれなかったので明示的に指定する。
easyrsa --vars=./vars --batch init-pki
サーバ側で必要な鍵を証明書を作成する。
gen-dh はルーターの性能によって数時間かかる場合がある
easyrsa --vars=./vars --batch gen-dh
easyrsa --vars=./vars --batch build-ca nopass
easyrsa --vars=./vars --batch build-server-full server nopass
クライアント側で必要な鍵と証明書を作成する。
easyrsa --vars=./vars --batch build-client-full client01 nopass
easyrsa --vars=./vars --batch build-client-full client02 nopass
easyrsa --vars=./vars --batch build-client-full client03 nopass
==== OpenVPN サーバのインストール ====
暗号を強化するための TLS 鍵を作成する。
openvpn --genkey --secret /etc/openvpn/easy-rsa/pki/tc.pem
server.conf を作成する。
OVPN_DH="$(cat /etc/openvpn/easy-rsa/pki/dh.pem)"
OVPN_TC="$(sed -e "/^#/d;/^\w/N;s/\n//" /etc/openvpn/easy-rsa/pki/tc.pem)"
OVPN_CA="$(openssl x509 -in /etc/openvpn/easy-rsa/pki/ca.crt)"
OVPN_CERT="$(openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/server.crt)"
OVPN_KEY="$(cat /etc/openvpn/easy-rsa/pki/private/server.key)"
NL=$'\n'
cat << EOF > /etc/openvpn/server.conf
port 1194
proto udp
dev tun
server 10.8.0.0 255.255.255.0
topology subnet
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-tun
persist-key
compress lz4-v2
verb 3
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway def1 bypass-dhcp"
push "block-outside-dns"
push "persist-tun"
push "persist-key"
push "compress lz4-v2"
${NL}${OVPN_DH}${NL}
${NL}${OVPN_TC}${NL}
${NL}${OVPN_CA}${NL}
${NL}${OVPN_CERT}${NL}
${NL}${OVPN_KEY}${NL}
EOF
chmod 600 /etc/openvpn/server.conf
OpenVPN サーバーを再起動して設定を読み込ませる。
/etc/init.d/openvpn restart
==== クライアントの設定ファイルを作成 ====
クライアント用の設定ファイルを格納するディレクトリを作成。
mkdir /etc/openvpn/client-conf/
クライアント用の設定ファイルを作成する。
OVPN_SERV="hogepiyo.com"
OVPN_TC="$(sed -e "/^#/d;/^\w/N;s/\n//" /etc/openvpn/easy-rsa/pki/tc.pem)"
OVPN_CA="$(openssl x509 -in /etc/openvpn/easy-rsa/pki/ca.crt)"
NL=$'\n'
grep -l -r -e "TLS Web Client Auth" "/etc/openvpn/easy-rsa/pki/issued" \
| sed -e "s/^.*\///;s/\.\w*$//" \
| while read -r OVPN_ID
do
OVPN_CERT="$(openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/${OVPN_ID}.crt)"
OVPN_KEY="$(cat /etc/openvpn/easy-rsa/pki/private/${OVPN_ID}.key)"
cat << EOF > /etc/openvpn/client-conf/${OVPN_ID}.ovpn
client
remote ${OVPN_SERV}
port 1194
proto udp
dev tun
nobind
auth-nocache
remote-cert-tls server
compress lz4-v2
verb 3
${NL}${OVPN_TC}${NL}
${NL}${OVPN_CA}${NL}
${NL}${OVPN_CERT}${NL}
${NL}${OVPN_KEY}${NL}
EOF
chmod 600 /etc/openvpn/client-conf/${OVPN_ID}.ovpn
done
ls /etc/openvpn/client-conf/*.ovpn
===== 参考 =====
* [[https://openwrt.org/docs/guide-user/services/vpn/openvpn/basic|OpenWrt 公式 Wiki - OpenVPN basic]]