「Linux コンテナ/VPN の使用」の版間の差分
(クライアントモードでの OpenVPNを翻訳して追加) |
(WireGuardを翻訳して追加) |
||
47行目: | 47行目: | ||
{{Note|''非特権''コンテナ内で OpenVPN を実行しているユーザーは、カスタム systemd ユニットを作成してコンテナ内で起動する必要があります。[[systemd#ユニットファイルを置換する|ユニットファイル]] を置き換えて、{{ic|LimitNPROC...}} で始まる行をコメントアウトします。}} |
{{Note|''非特権''コンテナ内で OpenVPN を実行しているユーザーは、カスタム systemd ユニットを作成してコンテナ内で起動する必要があります。[[systemd#ユニットファイルを置換する|ユニットファイル]] を置き換えて、{{ic|LimitNPROC...}} で始まる行をコメントアウトします。}} |
||
+ | |||
+ | == WireGuard == |
||
+ | |||
+ | {{Pkg|wireguard-tools}} をインストールします。ユーザーは、サードパーティの VPN サービスによって提供される WireGuard 設定を使用するか、この役割を果たすように WireGuard をセットアップすることになります。コンテナを使用して VPN プロバイダに接続する場合は、設定ファイル {{ic|foo.conf}} を {{ic|/etc/wireguard/}} に配置するだけで使用できます。 |
||
+ | |||
+ | コンテナ内の WireGuard 機能を確認するには、{{ic|wg-quick@foo.service}} 経由で WireGuard を [[起動]] し、条件が満たされたら[[有効化]] します。 |
||
+ | |||
+ | 他の使用例については、[[WireGuard]] を参照してください。 |
||
=== LXC の設定 === |
=== LXC の設定 === |
2024年2月5日 (月) 17:41時点における版
関連記事
この記事ではセキュア・プライベートなインターネット利用の"キルスイッチ"として Linux Containers を使って OpenVPN をクライアントモードで動作させるように設定する方法を説明します。VirtualBox や QEMU などの完全な仮想化を使うよりもリソースのオーバーヘッドを最小限にして低性能のデバイスでも動かすことができるというメリットがあります。
目次
コンテナの設定
Linux Containers の基本的な設定と理解が必要になります。この記事では読者がベースとなる LXC のセットアップを既に作っていて操作できる状態になっていることが前提です。初心者は Linux Containers の記事を読んで下さい。
サーバーモードの OpenVPN
このサブセクションでは、コンテナ内で OpenVPN を提供するために必要な追加のセットアップについて詳しく説明します。提供された OpenVPN プロファイルを使用したいユーザーは、このサブセクションを読む必要はありません。
ホストのセットアップ
- コンテナを実行できるようにするには、ホスト OS にブリッジイーサネットセットアップが必要です。これについては、Linux Containers#ホストネットワーク設定 を参照してください。
- パケット転送を有効にする必要があります。これについては、インターネット共有#パケット転送の有効化 を参照してください。
- 厳密には必須ではありませんが、ファイアウォールを使用することを強くお勧めします。
クライアントモードでの OpenVPN
OpenVPN を使用するには、コンテナの設定を次のように変更する必要があります:
/var/lib/lxc/playtime/config
... ## for OpenVPN lxc.mount.entry = /dev/net dev/net none bind,create=dir lxc.cgroup2.devices.allow = c 10:200 rwm
openvpn をインストールします。コンテナを使用してサードパーティ VPN プロバイダに接続する場合は、設定ファイル foo.conf
を /etc/openvpn/client/foo.conf
に配置するだけで使用できます。コンテナ内の OpenVPN 機能を確認するには、openvpn-client@foo.service
経由で OpenVPN を 起動 し、条件が満たされたら 有効化 します。
他の使用例とセットアップについては、OpenVPN を参照してください。
WireGuard
wireguard-tools をインストールします。ユーザーは、サードパーティの VPN サービスによって提供される WireGuard 設定を使用するか、この役割を果たすように WireGuard をセットアップすることになります。コンテナを使用して VPN プロバイダに接続する場合は、設定ファイル foo.conf
を /etc/wireguard/
に配置するだけで使用できます。
コンテナ内の WireGuard 機能を確認するには、wg-quick@foo.service
経由で WireGuard を 起動 し、条件が満たされたら有効化 します。
他の使用例については、WireGuard を参照してください。
LXC の設定
OpenVPN とインターネットプログラムの両方を動かして VPN を通して LXC の中からホストシステムと対話できるようにするため、コンテナの設定を変更して複数のセクションを記述する必要があります。
例えば、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.ipv4 = 192.168.0.3/24 lxc.network.ipv4.gateway = 192.168.0.1 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 = /mnt/data/inbox mnt/data none bind 0 0 lxc.mount.entry = /var/cache/pacman/pkg var/cache/pacman/pkg none bind 0 0 ## for xorg ## fix overmounting see: https://github.com/lxc/lxc/issues/434 lxc.mount.entry = tmpfs tmp tmpfs defaults lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file ## 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 をインストールする必要があります。ファイアウォールを適切に設定してコンテナの中で使用することが強く推奨されます。コンテナの中にファイアウォールを作る理由は2つあります:
- "キルスイッチ"を作って VPN への接続が失敗したときにプライバシーを守る。
- 危険なものを除外する。
このガイドでは簡単に設定できる ufw を使いますが、他の方法でもかまいません。
パッケージの設定
OpenVPN
OpenVPN の設定についてはこの記事では扱いません。適切に OpenVPN を設定するために OpenVPN の記事を読むことを推奨します。多くのプライベート VPN プロバイダはそれぞれのサービス用に正しく設定された openvpn.opvn プロファイルを直接ダウンロードできるリンクを提供しています。このガイドの趣旨上、/etc/openvpn/client/myprofile.conf
がその設定を参照します。
コンテナの中で openvpn が機能することを確認してください。openvpn@myprofile.service
で openvpn を起動して、問題ないようでしたら、ブート時に起動するように有効化してください。
DNS の漏洩の防止
OpenVPN#DNS の指示に従って /etc/resolv.conf
を管理するように openvpn を設定することを強く推奨します。設定していない場合、ホストの DNS サーバーがこのファイルで指定されている場合に DNS が漏洩する可能性があります。
ufw
ufw の設定は OpenVPN#ファイアウォールの設定 で説明されています。記述通りに設定したら、使用するプロトコル (ssh や torrent など) と VPN プロバイダの IP アドレスまたは IP アドレスの範囲を追加で定義します。どちらも、プライベートプロバイダから取得できます。
まず deny ポリシーを設定してから通過させるサービスを allow してください:
ufw default deny outgoing ufw default deny incoming ufw allow ssh ufw allow 1194 ufw allow out 1194 ufw allow out on tun0 from any to any ufw allow in on tun0 from any to any
そして VPN サーバーの IP アドレスまたは範囲を追加します。IP アドレスごとに2つのエントリが必要になります。以下の例は、説明のための偽の IP アドレスです。
ufw allow in from 50.120.10.200 to any ufw allow out from 50.121.10.200 to any
最後に、VPN の接続と関係なくアクセスを許可する内部 LAN の IP 範囲を追加:
ufw allow from 192.168.0.0/24
ufw を起動してブート時に起動するように ufw.service
を有効化してください。
ufw enable
pgl
コンテナの中で pgl を使うことで保護を追加できます。PeerGuardian Linux#コンテナから pgl を実行 を見て下さい。
サービスのテスト
コンテナの中から、(ssh や lxc-attach -n playtime
で接続して) ホストマシンの X サーバーにブラウザをエクスポートしてセットアップをテストします:
$ DISPLAY=:0 firefox
"Mozilla Firefox (playtime)" というタイトルでホストの X サーバーに firefox のウィンドウが表示されるはずです。複数のウェブサイトを使って IP アドレスと DND エントリの状態を確認できます。そのようなサイトの一つとして ipleak dot net があります。
この段階で、/etc/openvpn/client/myprofile.conf
の IP と DNS エントリが表示されます。