Linux Containers で OpenVPN サーバー
ナビゲーションに移動
検索に移動
この記事ではセキュアかつプライベートにインターネットを利用するために Linux Containers で OpenVPN をサーバーモードで実行する方法を説明します。VirtualBox や QEMU のような完全仮想化と比べてオーバーヘッドが最小限に抑えられて低性能のデバイスでも使えるというメリットがあります。
ホストの設定
- ホスト OS にはコンテナから使えるブリッジイーサネットを設定する必要があります。Linux Containers#ホストネットワークの設定を参照してください。
- パケット転送を有効にする必要があります。インターネット共有#パケット転送の有効化を見てください。
- 必須ではありませんがファイアウォールを設定することが強く推奨されます。
コンテナの設定
Linux Containers の基本的な知識が必要です。この記事では既にベースとなる LXC の設定は終わっていることを前提とします。初めて LXC を使用する場合は Linux Containers の記事を読んでください。
LXC の設定
コンテナの設定を編集して OpenVPN を実行するのに必要なセクションを複数記述してください。
例えば、lxc の名前が "playtime" ならば設定は以下のようになります:
/var/lib/lxc/playtime/config
# Template used to create this container: /usr/share/lxc/templates/lxc-archlinux # Parameters passed to the template: # For additional config options, please look at lxc.container.conf(5) lxc.rootfs = /var/lib/lxc/playtime/rootfs lxc.utsname = playtime lxc.arch = x86_64 lxc.include = /usr/share/lxc/config/archlinux.common.conf ## network lxc.network.type = veth lxc.network.link = br0 lxc.network.flags = up lxc.network.name = eth0 ## systemd within the lxc lxc.autodev = 1 lxc.hook.autodev = /var/lib/lxc/playtime/autodev lxc.pts = 1024 lxc.kmsg = 0 ## mounts lxc.mount.entry = /var/cache/pacman/pkg var/cache/pacman/pkg none bind 0 0 ## for openvpn lxc.cgroup.devices.allow = c 10:200 rwm
/var/lib/lxc/playtime/autodev
#!/bin/bash cd ${LXC_ROOTFS_MOUNT}/dev mkdir net mknod net/tun c 10 200 chmod 0666 net/tun
コンテナにインストールする必要があるパッケージ
ベース環境に加えて、公式リポジトリの openvpn パッケージが必要です。また、コンテナの中でファイアウォールを設定することを強く推奨します。このガイドでは設定しやすい ufw を使いますが別のファイアウォールでもかまいません。
パッケージの設定
OpenVPN
OpenVPN の記事を参照してホームサーバーをセットアップしてください。openvpn@myprofile.service
を起動してコンテナから openvpn が使えることが確認できたら有効化してください。
ufw
OpenVPN#ファイアウォールの設定を参照してコンテナの中でファイアウォールをセットアップしてください。設定が間違っていると openvpn がコンテナの中で正しく動作しないことがあります。
# ufw enable