RaspberryPi
OpenVPN

Raspberry PiでOpenVPNサーバを構築する

Raspberry Piを買ってからOpenVPNサーバにするまでのいきさつです。


  • Raspberry Pi 3 Model B

  • 有線のLANは使用せずWi-Fiのみ接続

  • GUIは使用しない

  • クライアントの通信をVPN経由にする

  • セキュリティ対策はとりあえず後回し


OSのインストール

Raspberry Piで使用するOSのRaspbianをダウンロードします。

Raspbianのサイト

https://www.raspberrypi.org/downloads/raspbian/

RaspbianにはWITH DESKTOP版とLITE版があります。

今回はデスクトップ不要のためLITE版を使用します。

RASPBIAN STRETCH LITEの[Downlowd ZIP]からzipをダウンロードします。

解凍するとディスクイメージのimgファイルになります。

SDカードにOSを書き込みます。

書き込みにはRufusを使いました。

Rufus

https://rufus.akeo.ie/

image.png


起動準備

sshログインできるようにします。

boot直下にsshという名前で空のファイルを作っておくとsshログインできるようになります。

Wi-Fi接続できるようにします。

boot直下にwpa_supplicant.confというファイルを作ります。

内容は以下の通りです。


wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant

country=JP
network={
ssid="SSID"
psk="パスワード"
key_mgmt=WPA-PSK
proto=WPA WPA2
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
}

SSIDとパスワードを記入します。改行コードはLFで保存。


起動

Raspberry PiにSDカードを差し込んで電源を入れます。

うまくWi-Fiに接続できていればDHCPでIPアドレスが割り当てられているはずです。

割り当てられたアドレスはDHCPサーバの払い出し状況を見るなどして確認してください。

sshでログインします。

初期値は USER: pi PASSWORD: raspberry です。


初期設定

IPアドレスを固定します。

vi /etc/dhcpcd.conf

一番下にwlan0の設定を追加する。


/etc/dhcpcd.conf

interface wlan0

static ip_address=192.168.0.120/24
static routers=192.168.0.10
static domain_name_servers=192.168.0.10 8.8.8.8

ソフトウェアのアップデートをします。

sudo apt update

sudo apt upgrade

ラズパイの設定をします。

sudo raspi-config

ラズパイの設定メニュー(CUI)が表示されます。

ロケールとタイムゾーンを変更します。

Localisation Optionsを選択

Change Localeを選択

en_GB.UTF-8 UTF-8を外す

ja_JP.UTF-8 UTF-8を付ける

デフォルトロケールはja_JP.UTF-8を選択

Localisation Optionsを選択

Change Timezoneを選択

Asiaを選択

Tokyoを選択

VPNサーバにするためIPフォワードを有効にします。

sudo vi /etc/sysctl.conf

以下の行のコメントを外して有効にします。


/etc/sysctl.conf

net.ipv4.ip_forward=1


再起動します。

sudo reboot


OpenVPNのインストール

インストールします。

sudo apt install zip openssl openvpn

easy-rsaで証明書を作成します。

sudo su

cd /usr/share/easy-rsa
vi vars

以下の各行を任意の値に修正します。


/usr/share/easy-rsa/vars

export KEY_COUNTRY="JP"

export KEY_PROVINCE="Tokyo"
export KEY_CITY="Edogawa"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

. ./vars

./clean-all

openssl.cnfをコピーして作成します。

cp openssl-1.0.0.cnf openssl.cnf

CA証明書を作成します。

./build-ca

サーバ証明書を作成します。

./build-key-server server

以下はそれぞれyで。

Sign the certificate? [y/n]:

1 out of 1 certificate requests certified, commit? [y/n]

クライアント証明書を作成します。

./build-key client

以下はそれぞれyで。

Sign the certificate? [y/n]:

1 out of 1 certificate requests certified, commit? [y/n]

クライアントが複数ある場合は同様に作成します。

./build-key client2

./build-key client3

DHパラメータを生成します。

これは結構時間がかかります。

./build-dh

TLS鍵を作成します。

cd keys

openvpn --genkey --secret ta.key

作成した鍵とサーバ証明書をコピーします。

cp ta.key server.crt server.key dh2048.pem ca.crt /etc/openvpn

サンプルからOpenVPNサーバの設定ファイルを作成します。

cd /etc/openvpn

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
gunzip server.conf.gz

設定ファイルを修正します。

vi server.conf

ファイル内の各行で鍵や証明書の場所を設定します。


/etc/openvpn/server.conf

ca /etc/openvpn/ca.crt

cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
tls-auth /etc/openvpn/ta.key

今回はVPNクライアントの通信をすべてVPN経由にするため、以下の行のコメントを外して有効にします。


/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"


OpenVPNをリスタートして設定を反映します。

systemctl restart openvpn

Raspberry Piの起動時にOpenVPNが自動起動するようにします。

systemctl enable openvpn

iptablesのポートを開放します。

vi /etc/rc.local

exit 0の前に2行追加


/etc/rc.local

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j MASQUERADE

再起動します。

reboot


OpenVPNクライアントの設定

OpenVPN GUI for Windowsのダウンロード

https://www.openvpn.jp/document/openvpn-gui-for-windows/

インストール後、スタートメニューから[OpenVPN]-[OpenVPN Configuration file directory]を選択し、configフォルダを開く。

client.ovpnファイルを作成し、以下の内容を編集する。

remoteのxxx.xxx.xxx.xxxはサーバのIPアドレス。

各鍵などの内容を


client.ovpn

client

dev tun
proto udp
key-direction 1
remote xxx.xxx.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
<ca>
-----BEGIN CERTIFICATE-----
(ここはca.crtから)
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
(ここはclient.crtから)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
(ここはclient.keyから)
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
(ここはta.keyから)
-----END OpenVPN Static key V1-----
</tls-auth>


参考ページ

Raspberry Piのインストールはこちらを参考にしました。

https://jyn.jp/raspbian-setup/

OpenVPNの構築はこちらを参考にしました。

https://qiita.com/oi1man/items/abe3c5ef2113ec3e91f1