最近ノマドっぽいことをしていて、公衆無線LANを使いたくなってきたが、セキュリティは皆無なのでそのままは使いたくない。
そこで、pritunlをdockerで動かし、OpenVPNで自宅のネットワークに接続するようにした。
使えるようになるまでの流れ
- dockerでpritunlのイメージを動かす
- WEB UIでpritunlの設定をする
- クライアントサイドの設定をする
たったこれだけ。らくちん。
必要なポートについて
今回お世話になったイメージはjippi/pritunl
。
このイメージで使われているポートはExampleによれば
用途 | ポート番号 | TCP/UDP |
---|---|---|
WEB UI (HTTP) | 80 | TCP |
WEB UI (HTTPS) | 443 | TCP |
OpenVPN | 1194 | TCP&UDP |
となっているのだけれども、実際必要なのは
用途 | ポート番号 | TCP/UDP |
---|---|---|
WEB UI (HTTPS) | 443 | TCP |
OpenVPN | 任意 | UDP |
この2つがあれば問題なくつかえる。
またポートはdockerで走らせるときにマッピングしなおせるので、どちらも任意のポートを設定できるといえる。
今どき流行らないのは知っているが、自宅で立ち上がっているサーバなので、できれば一般的なポートは使いたくない。
そういった個人的な事情により、今回はどちらも変更した。
dockerでpritunlのイメージを動かす
ポートはてきとう。
設定ファイルは永続的に残したいのでボリュームオプションで書き出すようにした。
privilegedオプションはなんとなく怖いので使いたくない気もするが、とりあえず今回はExampleに従った。
2018/07/05追記:privilegedオプションを使わなくてもNET_ADMINがあれば問題なかったのでExampleから変更した。ちょっぴり安心。
あとサーバの再起動時にも再度立ち上がるようrestartオプションはalwaysとした。
さらに永続化に使ったボリュームをデータ用コンテナに追い出した。
参考にしました -> Docker privileged オプションについて - Qiita
docker create --name pritunl-data \
-it \
-v /var/docker/pritunl_data:/var/lib/pritunl -v /var/docker/pritunl_mongodb:/var/lib/mongodb \
busybox:latest
docker run --name pritunl \
-d --cap-add NET_ADMIN --restart=always \
--volumes-from pritunl-data \
-p 15568:15568/udp -p 12321:443/tcp \
jippi/pritunl
WEB UIはhttps://サーバIP:12321
でアクセスできる。
WEB UIでpritunlの設定をする
ほとんど見たままだが流れをざっくりと説明する
初期設定
ログインするとユーザ設定ダイアログが出るのでAdminのユーザ名、パスワードの設定をする。
このとき、WEB UIのポートが443となっているのをDockerで指定したポートに変更するとWEB UIにアクセスできなくなってハマった。
pritunlのコンテナからするとWEB UIが立ち上がっているのは443であって、外部からみたポート番号ではない。
Organizationの追加
Userの追加
サーバの追加
今回はレスポンスが悪くなったり帯域が細くなってもいいのでやたらめったらビット数の多い暗号化をかけた。
ただし、DH鍵のbit数は大きいと生成に時間がかかるので2048bitに落とした。(上げたほうが安全ではある)
また、1ユーザが複数のデバイスで接続することを許可した。(しないほうが安全かもしれない)
ポートはDockerで開けたポートに合わせておく。
サーバとOrganizationを関連付ける
これをしないとUserはサーバを使えない。
できたらstart serverを押して立ち上げ。
User設定をダウンロードする
ここまで設定するとUserのリストのところで設定ファイルのダウンロードができるようになっているので保存しておく。
クライアントサイドの設定をする
落とした設定ファイルはpritunlのクライアントアプリケーションで読み込めるようになっている。
またtarの中身は.ovpn
ファイルなのでOpenVPN互換のアプリケーションでも展開して読ませることができる。
後は接続すればユーザのPINを聞かれるので入力するとVPNが張れる。
かんたん!
そもそもDockerを使う理由
実はこのエントリでやろうとしていることは、すでに記事になっている。
dockerでvpnサーバーをたてる - Qiita
そしてDockerを使う必要はないのでは、という話になっている。
これについてはDocker信者というわけではないけれど、環境構築や設定がファイルとして残しておけるのは大きなメリットだと思っているので、自分はSambaやAFPなどもDockerを使っている。
コンテナで発生した設定ファイルなどもファイルが大きくない限りはすべてBitbucketに上げている。
いろいろいじって試して、一番良さそうな状態で運用する、という流れが好き。
実際1台で運用していたサーバを2台にする際に簡単に移行できた。
また、先人の環境・設定をそのままもらってこれる簡単さも良い。
ところで
pritunlってなんて読むんですかね。僕は「ぷりっとゆーえぬえる」って読んでる。