ユーザ用ツール

サイト用ツール


openwrt-19:openvpn-server

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"
<dh>${NL}${OVPN_DH}${NL}</dh>
<tls-auth>${NL}${OVPN_TC}${NL}</tls-auth>
<ca>${NL}${OVPN_CA}${NL}</ca>
<cert>${NL}${OVPN_CERT}${NL}</cert>
<key>${NL}${OVPN_KEY}${NL}</key>
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
<tls-auth>${NL}${OVPN_TC}${NL}</tls-auth>
<ca>${NL}${OVPN_CA}${NL}</ca>
<cert>${NL}${OVPN_CERT}${NL}</cert>
<key>${NL}${OVPN_KEY}${NL}</key>
EOF
chmod 600 /etc/openvpn/client-conf/${OVPN_ID}.ovpn
done
ls /etc/openvpn/client-conf/*.ovpn

参考

openwrt-19/openvpn-server.txt · 最終更新: 2020/06/19 14:57 by admin