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/
起動準備
sshログインできるようにします。
boot直下にsshという名前で空のファイルを作っておくとsshログインできるようになります。
Wi-Fi接続できるようにします。
boot直下に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の設定を追加する。
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
以下の行のコメントを外して有効にします。
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
以下の各行を任意の値に修正します。
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
ファイル内の各行で鍵や証明書の場所を設定します。
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経由にするため、以下の行のコメントを外して有効にします。
push "redirect-gateway def1 bypass-dhcp"
OpenVPNをリスタートして設定を反映します。
systemctl restart openvpn
Raspberry Piの起動時にOpenVPNが自動起動するようにします。
systemctl enable openvpn
iptablesのポートを開放します。
vi /etc/rc.local
exit 0の前に2行追加
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
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