VPS

VPS + Dockerで専用VPNサーバーを立ち上げる

VPS + Dockerで専用VPNサーバーを立ち上げる方法をまとめました。リモートワークやWiMAXのモバイル回線などで固定IPアドレスを使いたいときにも利用できます。

VPSでDocker環境を用意する

Dockerは基本的にどのLinuxにも対応しているので、好きなディストリビューション使っても問題ありません。

Conoha VPSやDigital OceanだとDockerのテンプレートイメージが配布されているので便利です。

Conoha VPS

docker-compose.ymlを用意する

サーバーにSSH接続したら、VPNサーバーであるpritunlコンテナを立ち上げるdocker-composeファイルを作成します。作成場所は、任意の場所で構いません。

version: '2'
services:
  pritunl:
    container_name: pritunl
    restart: always
    image: jippi/pritunl
    privileged: true
    environment:
      - PRITUNL_MONGODB_URI=mongodb://mongo:27017/pritunl
    ports:
      - 80:80
      - 443:443
      - 1194:1194
  mongo:
    container_name: mongo
    restart: always
    image: mongo
    privileged: true
    volumes:
      - /data/db:/data/db

ちなみに、利用するVPSサーバーがWebサーバーなどと同居している場合は、上記のdocker-compose.ymlの80番ポート、443番ポートを任意のものに変更してください。

VPN管理サーバー・コンテナを立ち上げる

作成したら、管理サーバーコンテナを立ち上げます。

sudo docker-copmose up -d

エラーがおきなければログの表示後にpritunl管理画面サーバーが立ち上がっているので、ログインします。ログイン認証が出てきます。ID・パスワードはどちらも「pritunl」です。

https://VPSのIPアドレス/

ここで立ち上げているのはあくまでVPNサーバーを管理するためのサーバーで、VPNサーバー自体は管理画面から作成します。

pritunl管理画面から各種設定をする

Organization、User、Serverを作成する

作成順序としては、

  • Organization
  • User
  • Server

の順番です。

UserにはOrganizationが必要で、Serverが必要です。そして、Userがいないと接続が作成できません。

順番に作成していきます。

作成をしたらStart ServerボタンでVPNサーバーを立ち上げます。立ち上がると「Portという項目にxxxxx/udp」という数字が出るので、xxxxxの数字をコピーしておきます。

VPSサーバーに戻ってUDPポートをアサインする

このままだとVPNサーバーが使うUDPポートがDockerコンテナにアサインされていないので、docker-composeを編集して再起動します。

version: '2'
services:
  pritunl:
    container_name: pritunl
    restart: always
    image: jippi/pritunl
    privileged: true
    environment:
      - PRITUNL_MONGODB_URI=mongodb://mongo:27017/pritunl
    ports:
      - 80:80
      - 443:443
      - 1194:1194
      - xxxxx:xxxxx/udp # <-- ここ
  mongo:
    container_name: mongo
    restart: always
    image: mongo
    privileged: true
    volumes:
      - /data/db:/data/db

ポート指定の「/udp」は必須です。入れないとTCP接続になります。

変更したら、

sudo docker-compose up -d  --build

でコンテナを再生成します。再生成しても設定データはMongoDB側に残っているので問題ありません。

再生成が成功すればOKです。

クライアントのVPN設定で接続すればOK

VPNの接続方法はそれぞれなので割愛します。下記のページなどをご参考にどうぞ。

pritunl VPNサーバへVPNクライアントを利用して接続する方法

注意ポイント

Firewall設定は不要な場合がある

ネット上の記事では、firewalldやufwでファイアウォールのポートを開ける作業を紹介しているケースがありますが、VPSサーバーの場合、デフォルトでファイアウォールが動いているとは限りません。

VPSサーバーでは、独自のファイアウォールをVPSインスタンスの前に用意していることがあるので(Digital Oceanなどはこのパターン)、その場合は、VPSインスタンス内のでファイアウォールの設定をするのではなく、管理画面からポートを開けます。

管理画面は設定したらポートを閉じよう

pritunlの管理画面は、簡単なパスワード式なので総当たり攻撃などをされたら簡単に乗っ取られてしまいます。

VPNサーバーは動いている限り変更することは少ないので、VPSの管理画面ポートは設定をしたら閉じてしまいましょう。今回の例の場合は、80番と443番です。

VPSの転送上限に気をつけよう

VPSサーバーの場合、月間転送量に上限が設定されていることがほとんどです。

ブラウザやメールくらいなら上限を超えることはあまりありませんが、動画の視聴やオンラインゲームなどを大量に行うと、月間転送量上限を超えることもあるので注意してください。


VPS + Dockerで専用VPNサーバーを立ち上げる方法を見てきました。

リモートワークで社内環境に外部からアクセスする場合や、携帯やWiMAXなどのモバイル回線で固定IPを使う際に、固定IPサービスを利用するよりも安くて便利なので、ぜひ試してみてください。


価格は記載がある場合を除き、すべて税抜きです。

この記事の関連キーワード

VPSの記事