DockerでVPN Server
ラズパイ + Dockerでお手軽Open VPN Server
準備
Dockerインストール
Docker使い方参照: Docker
Linux
https://github.com/kylemanna/docker-openvpn
Rasspberry Pi
上のラズパイ版: https://github.com/lunderhage/docker-openvpn-rpi
インストール手順: https://gist.github.com/odarriba/2116b7a7ea38400b4fe32c3647c8291c
Dockerイメージ: https://hub.docker.com/r/evolvedm/openvpn-rpi ←古い
Dockerイメージビルド
リンク先で使用しているDockerイメージが古いのでビルドする
code:bash
$ git clone https://github.com/lunderhage/docker-openvpn-rpi.git
$ 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
$ CLIENT_NAME=クライアント名
$ 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
バージョンアップ方法:https://qiita.com/8x9/items/7e98f895a48272b65ae4
こっちの方がイメージが新しいが手順が違うので使えない → https://hub.docker.com/r/netzfisch/rpi-vpn-server/