VPNサービスのデプロイ

このイメージは基本的な機能の動作のみを保証します。ご自身で設定が可能な場合は、ご自身で構築するか、このイメージの実装方法を参考にすることをお勧めします。使用前に、LinuxとDockerの基礎知識を習得している必要があります。このイメージはDebian 9で動作確認済みです。本記事ではDebian 9での使用方法を紹介しますが、通常はUbuntuなどの他のシステムでも同様に利用できます。本サービスのデフォルトポートは1190/UDPです。ファイアウォールでこのルールが許可されていることを確認してください。

準備作業

サーバー上で以下の変更を行い、次のコマンドを実行する必要があります。

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p

サーバーに ufw がインストールされている 場合は、/etc/ufw/before.rules ファイルの先頭に以下の内容を追記してください。ここでの eth0 とネットワークセグメントは、実際のサーバーのインターフェースと設定に応じて変更してください。なお、*filter ルールの前に追加することに注意してください(存在する場合)。

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.27.27.0/24 -o eth0 -j MASQUERADE
COMMIT

/etc/default/ufw の以下の設定を ACCEPT に変更します。

DEFAULT_FORWARD_POLICY="ACCEPT"

最後に、以下のコマンドを実行してufwファイアウォールルールを再読み込みします。

ufw reload

サーバーに ufw がインストールされていない 場合は、iptablesのFORWARDルールがACCEPTであることを確認し、以下のコマンドを実行してください。

注目

サーバー再起動後、このルールを再適用する必要がある場合があります。ufwのインストールをお勧めします。

iptables -P FORWARD ACCEPT

初期設定

まず、OpenVPNサービスの設定を保存するディレクトリを作成します。

mkdir -p ~/lamda-openvpn-server

次に、以下のコマンドを実行してOpenVPNサービスの初期化操作を行います。

docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-server-new

コマンドの実行が完了するまで待ちます。これで ~/lamda-openvpn-server ディレクトリにサービス設定ファイル config.ovpn が生成されます。このファイルをエディタで開き、以下のフィールドのみを変更することをお勧めします。

# VPNのネットワークセグメントとサブネットマスク
server 172.27.27.0 255.255.255.0
# VPNサービスポート
port 1190

# VPNクライアントがサーバー上の特定のネットワークインターフェースにアクセスできるようにする場合は、ルートを追加できます。
# 注意:この場合、クライアントは現在のホストの該当セグメントのIPにのみアクセス可能で、
# 該当セグメントへの完全なアクセスを実現するには、追加の設定が必要です。
push "route 192.168.68.0 255.255.255.0"

# 114.114.114.114 をご希望のDNSサーバーアドレスに変更してください
push "dhcp-option DNS 114.114.114.114"

クライアント接続資格情報の作成

編集が完了したら、クライアントを作成します。myname は他の任意の名前に置き換え可能ですが、重複は不可です。

docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-new myname

作成が完了したら、以下のコマンドを使用してこのクライアントのログイン資格情報を取得します。

# 注意:設定内のIPは自動的に現在のパブリックIPを取得します。正しくない場合は手動で修正してください。
#
# ovpn設定を生成し、ファイル myname.ovpn にリダイレクトして保存します。このファイルは OpenVPN Connect などのクライアントで使用できます。
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-profile ovpn myname >myname.ovpn
# lamda で使用する OpenVPNProfile を生成します。lamda で直接使用できます。
# 出力には openvpn.* 関連の設定が含まれます。サービス設定の章を参照して、自動VPN接続を実現するための設定方法をご確認ください。
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-profile lamda myname

クライアント資格情報の失効

特定のクライアント資格情報を失効させる必要がある場合は、以下のコマンドを実行してください。失効後、OpenVPNサービスの再起動が必要になる場合があります。

docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-revoke myname

OpenVPNサービスの起動

これで、以下のコマンドを実行してOpenVPNサービスをフォアグラウンドで起動し、クライアントの接続ログの確認やエラー調査を直接行うことができます。

docker run -it --rm --name openvpn-server --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn run

問題がないことを確認したら、サービスをバックグラウンドで実行させることをお勧めします。以下のコマンドでサービスをバックグラウンド起動します。

docker run -d --rm --name openvpn-server --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn run

参考ドキュメント

基本ドキュメント:https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/

ルーティング設定:https://community.openvpn.net/openvpn/wiki/BridgingAndRouting