====== 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]]