なるべく楽にOpenVPNを動かす

OpenVPNを使う用事があったのだけど、GUIがあったほうが何かと都合が良かったのでOpenVPN Access Serverを使ってみた。
OpenVPN自体はOSSであり、料金を気にせず使えるがOpenVPN Access Serverに関してはライセンスがないと一度につなぐことができるデバイスは2つまでのようだ。個人で遊んでみる分にはこれで問題ないだろう。

後で気軽に複数たてられるようにDockerで構築することに。

HostはCentOS 7を使用。

centosのsystemdを使用したイメージをベースに普通にOpenVPN ASをインストールしつつ、初期状態では/var/run/nologinによってログインできなくなっている初期管理者(openvpn)のログインをpamの設定ファイルを編集して可能にした。
そんなDockerfileはこんな感じに。

from centos/systemd
EXPOSE 1194/udp 943
RUN yum install -y rpm wget net-tools iptables;\
wget "http://swupdate.openvpn.org/as/openvpn-as-2.5.2-CentOS7.x86_64.rpm";\
rpm -i openvpn-as-2.5.2-CentOS7.x86_64.rpm;\
sed -i -e "s/account r/#account r/" /etc/pam.d/openvpnas ;\
echo "openvpn_admin" |passwd --stdin openvpn

もちろん、セキュリティ上のリスクがあるのでWebGUIでログイン後に必要な設定をしたらGUIを無効にするかコメントアウトしたnologinの部分を戻す等の対応をすべし。
せっかくなのでDocker hubにも登録してみた。

動かすときは

docker run -d -p 1194:1194/udp -p 943:943 --privileged \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro algernon2haworthia/centos_openvpn_as
で起動する。
ブラウザから”https://{HostのIP address}:943/admin”に行くと管理画面が表示されるはずだ。
初期パスワードはopenvpn/openvpn_adminとしている。

ログイン後の設定はGUIからなので気楽なものだが、やはりいくつか設定しないとうまく動いてくれない。
まず、NetworkSetting から Hostname or IP Address: を外からアクセス可能なものに変更しよう。Docker内のlocal networkのipのままだと外からは接続できない。
Protocol も defaultでは Both (Multi-daemon mode) になっているのでコンテナ起動時に開けたportにあわせて設定しよう。

これで問題なくVPNが動作するはずだ。例えば今回のようにDockerのnetworkでdefaultのものを用いている場合にhostからのポートフォワーディングを設定していないコンテナに対しても、このVPNに接続するとアクセス可能となる(この使い方がどの程度有益かはさておき)。

今回はHostのポートとOpenVPNコンテナの使用ポートを揃えたが、これが異なる場合はclientの設定ファイルでの変更が必要になるので注意が必要だ。

コメントを残す