DockerでVPN Server
ラズパイ + Dockerでお手軽Open VPN Server
準備
Dockerインストール
Linux
Rasspberry Pi
Dockerイメージビルド
リンク先で使用しているDockerイメージが古いのでビルドする
code:bash
$ cd docker-openvpn-rpi
# Dockerfileを編集
$ nano Dockerfile
FROM armhf/alpine:3.2 -> FROM armhf/alpine:latest に書き換え
# ビルド
$ docker image build --no-cache -f Dockerfile -t openvpn-rpi:vpn ./
初期化
code:bash
$ docker run -v openvpn_data:/etc/openvpn --rm openvpn-rpi:vpn ovpn_genconfig -u udp://VPNサーバドメインorホスト名 $ docker run -v openvpn_data:/etc/openvpn --rm -it openvpn-rpi:vpn ovpn_initpki
# パスフレーズの入力が必要、キー生成には時間がかかる(30分くらい)
# 最後にCAのパスフレーズを入力
openvpnの設定はDockerのopenvpn_dataボリュームに保存される
起動
code:bash
# 起動
$ docker run -v openvpn_data:/etc/openvpn -d -p 1194:1194 --cap-add=NET_ADMIN -e --restart=always --name openvpn_server openvpn-rpi:vpn
デフォルトポートは1194、変更する場合-p [ホスト側ポート]:1194と指定する
ホスト側1194ポートの許可
code:bash
$ sudo ufw allow 1194
クライアントキー生成
code:bash
$ docker run -v openvpn_data:/etc/openvpn --rm -it openvpn-rpi:vpn easyrsa build-client-full "$CLIENT_NAME" nopass
# CAに秘密鍵を登録するため、CAのパスフレーズの入力が必要
# 接続用設定ファイルの出力
$ docker run -v openvpn_data:/etc/openvpn --rm openvpn-rpi:vpn ovpn_getclient "$CLIENT_NAME" > "$CLIENT_NAME.ovpn"
VPN接続の認証時にパスワードも要求する場合、nopassを消す
外部からの接続
(v6プラスではIPv4アドレスが共用なので外部からアクセス可能なポートを確認する)
ルータのポートフォワーディング設定等で、外部ポートからの接続をVPNサーバーのポート(1194)にudpを転送する
ovpnファイルを開き、先程設定した外部ポートにポート番号を書き換える
デフォルトだと128bit鍵になってしまう。脆弱性を考慮してサーバー、クライアントの設定ファイルに以下を追記すべき
code:bash
# サーバー設定編集
$ docker exec -it openvpn-udp /bin/bash
## 以降はコンテナ内での操作
# 設定ファイルを編集する
$ nano /etc/openvpn/openvpn.conf
# 以下の行を追加
cipher AES-256-CBC
$ exit
## コンテナ内操作はここまで
# サーバー再起動
$ docker container restart openvpn-udp
クライアント側のovpnファイルにも以下の行を追加しておく
code:ovpn
cipher AES-256-CBC
その他
Alpineアップデート手順
code:bash
$ docker exec -it openvpn_server /bin/bash
# 以降コンテナ上のコマンド
$ sudo apk update
$ sudo setup-apkrepos
$ sudo apk update
$ sudo apk upgarade