Ubuntu16.04でPi-holeとOpenVPNを使用してDNSレベルでアドバタイズメントをブロックする方法
序章
オンライン広告は、刺激を与えるだけでなく、デバイス上のマルウェアの潜在的な発生源でもあります。 アプリケーションごと/デバイスごとに広告をブロックするように設計されたプラグインがありますが、 DNSレベルで広告を停止すると、すべてのアプリケーションとデバイスで一度にはるかに完全なソリューションが提供されます。
Pi-hole — RaspberryPiシングルボードコンピューターで使用するために最初に作成されたDNSサーバー—広告配信ドメインへのリクエストを除外し、広告をブロックしてネットワークパフォーマンスを向上させます。 Pi-holeを使用すると、ネットワーク上で行われたすべてのDNS要求をアクティブに監視し、その場で要求をブロックできます。 この機能はWebブラウザーを超えて拡張され、適切なDNSクエリをターゲットにすることで他のアプリケーション内の広告を除外できます。
Pi-holeは、仮想プライベートネットワーク(VPN)と組み合わせて使用すると特に効果的です。 VPNは、クライアントとサーバー間の論理ネットワーク接続であるトンネルを介して接続を確立および維持します。 さらに、VPNが Secure Socket Layer (SSL)をサポートしている場合、トランザクション全体が暗号化され、データ送信用の安全なリンクが提供されます。
このチュートリアルでは、OpenVPNとPi-holeをインストールして構成し、ネットワークに接続されているすべてのデバイスに対して、ネットワーク全体のDNSベースの独自のプライベート広告ブロックフィルターとして機能します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
このUbuntu16.04初期サーバーセットアップチュートリアルに従って、2GBのメモリをセットアップした1台のUbuntu16.04サーバー(sudo非rootユーザーとファイアウォールを含む)。
-
このUbuntu16.04ガイド上のOpenVPNサーバーに従ってOpenVPNをインストールおよび構成します。
ステップ1—ネットワーク情報の収集
インストールを開始する前に、Pi-holeがVPNとの通信に使用するネットワーク情報を収集する必要があります。 Pi-holeのインストールプロセスがターミナルセッションを引き継ぐため、開始する前にこの情報を手元に用意しておくと、プロセス全体がはるかにスムーズに進みます。
まず、ip
コマンドをaddr
およびshow
サブコマンドとともに使用して、tun0
、ネットワークインターフェイスのIPアドレスを特定します。 VPNトンネルがアクティブになっています。
- ip addr show tun0
出力は、インターフェースに関する詳細情報を提供します。
Output from ip addr show tun01: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
すなわち:
- 最初の行はインターフェース名
tun0
を示し、その後にネットワークソケットの特性を説明する一連のフラグが続きます。 - 2行目は、現在このインターフェイスで使用できるリンク層デバイスがないことを示しています。
- 3行目には、このネットワークインターフェイスのIPアドレス値が含まれています。
- 4行目は、インターフェイスのIPv6の有効な有効期間と優先リース期間の両方が
forever
に設定されていることを示しています。 この場合、アドレスはVPNのインストール中にインターフェイスに特別に割り当てられたため、IPアドレスのリース時間は変更されません。
inet
に続くIPアドレスをメモします。これは、VPNサーバーのアドレスです。 Pi-holeをインストールするときは、これを知っておく必要があります。
VPNサーバーのIPアドレスに加えて、Pi-holeはIPv4トラフィックに使用するゲートウェイも知っている必要があります。 ゲートウェイは、異なるネットワーク間のアクセスポイントと考えることができます。
ip
コマンドをもう一度使用します。今回は、route
およびshow
サブコマンドを使用して、サーバーのルーティングテーブル情報を取得します。 ルーティングテーブル情報をgrep
にパイプします。これにより、出力