Ubuntu 16.04でWireGuardを使用してポイントツーポイントVPNを作成する方法

前書き

WireGuardは、堅牢なセキュリティを提供しながら使いやすく設計された最新の高性能VPNです。 WireGuardは、公開キー認証で暗号化されたネットワークインターフェイスを介した関係者間の安全な接続の提供にのみ焦点を当てています。 これは、ほとんどのVPNとは異なり、トポロジが適用されないため、周囲のネットワーク構成を操作することで異なる構成を実現できることを意味します。 このモデルは、個々のニーズに応じて適用できる優れたパワーと柔軟性を提供します。

WireGuardが使用できる最も単純なトポロジの1つは、ポイントツーポイント接続です。 これにより、中央サーバーによる仲介なしで2台のマシン間に安全なリンクが確立されます。 このタイプの接続は、3つ以上のメンバー間で使用して、メッシュVPNトポロジを確立することもできます。この場合、個々のサーバーはピアと直接通信できます。 各ホストは対等な立場にあるため、これら2つのトポロジは、トラフィックをルーティングするゲートウェイとして単一のサーバーを使用するのではなく、サーバー間で安全なメッセージングを確立するのに最適です。

このガイドでは、2台のUbuntu 16.04サーバーを使用して、WireGuardとのポイントツーポイントVPN接続を確立する方法を示します。 ソフトウェアをインストールしてから、各ホストの暗号化キーペアを生成します。 その後、短い設定ファイルを作成して、ピアの接続情報を定義します。 インターフェースを起動すると、WireGuardインターフェースを介してサーバー間で安全なメッセージを送信できるようになります。

前提条件

このガイドに従うには、* 2 * Ubuntu 16.04サーバーにアクセスする必要があります。 各サーバーで、管理アクションを実行するには、 `+ sudo +`権限を持つ非rootユーザーを作成する必要があります。 各システムで設定された基本的なファイアウォールも必要です。 次のチュートリアルを完了すると、これらの要件を満たすことができます。

続行する準備ができたら、 `+ sudo +`ユーザーで各サーバーにログインします。

ソフトウェアのインストール

WireGuardプロジェクトは、Ubuntuシステム用の最新パッケージをPPAに提供します。 続行するには、両方のサーバーにWireGuardをインストールする必要があります。 各サーバーで、次のアクションを実行します。

まず、WireGuard PPAをシステムに追加して、プロジェクトのパッケージへのアクセスを構成します。

sudo add-apt-repository ppa:wireguard/wireguard

新しいパッケージソースを「+ apt +」設定に追加するように求められたら、* ENTER *を押します。 PPAが追加されたら、ローカルパッケージインデックスを更新して、新しく利用可能なパッケージに関する情報をプルダウンし、WireGuardカーネルモジュールとユーザーランドコンポーネントをインストールします。

sudo apt-get update
sudo apt-get install wireguard-dkms wireguard-tools

次に、各サーバーでWireGuardの構成を開始できます。

秘密鍵の作成

WireGuard VPNの各参加者は、公開キー暗号化を使用してピアに対して認証を行います。 公開鍵を交換し、最小限の構成を実行することにより、新しいピア間の接続を確立できます。

秘密鍵を生成し、それをWireGuard構成ファイルに直接書き込むには、各サーバーで次を入力します*:

(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

最初のコマンドは設定ファイルの初期内容を `+ / etc / wireguard / wg0.conf `に書き込みます。 サブシェル内の ` umask +`値により、通常の環境に影響を与えることなく、制限された権限でファイルを作成します。

2番目のコマンドは、WireGuardの「+ wg 」コマンドを使用して秘密鍵を生成し、制限された構成ファイルに直接書き込みます。 また、キーを ` wg pubkey `コマンドにパイプで戻し、関連する公開キーを取得します。これは、参照しやすいように ` / etc / wireguard / publickey +`というファイルに書き込みます。 構成を定義するときに、このファイルのキーを2番目のサーバーと交換する必要があります。

初期構成ファイルの作成

次に、エディターで構成ファイルを開き、その他の詳細を設定します。

sudo nano /etc/wireguard/wg0.conf

内部では、生成された秘密鍵が `+ [Interface] +`というセクションで定義されているのが見えるはずです。 このセクションには、接続のローカル側の構成が含まれています。

インターフェイスセクションの構成

このノードが使用するVPN IPアドレスと、ピアからの接続をリッスンするポートを定義する必要があります。 ファイルが次のようになるように、 `+ ListenPort `および ` SaveConfig +`行を追加することから始めます。

/etc/wireguard/wg0.conf

[Interface]
PrivateKey =
ListenPort = 5555
SaveConfig = true

これにより、WireGuardがリッスンするポートが設定されます。 これは、自由でバインド可能な任意のポートにすることができますが、このガイドでは、両方のサーバーのポート5555でVPNをセットアップします。 各ホストの「+ ListenPort +」を選択したポートに設定します。

また、 `+ SaveConfig `を ` true `に設定します。 これにより、 ` wg-quick +`サービスは、シャットダウン時にアクティブな設定をこのファイルに自動的に保存します。

次に、各サーバーに一意の「+ Address」定義を追加して、「+ wg-quick」サービスがWireGuardインターフェースを起動するときにネットワーク情報を設定できるようにします。 VPNのアドレススペースとして10.0.0.0/24サブネットを使用します。 各コンピューターについて、この範囲(10.0.0.1〜10.0.0.254)内で一意のアドレスを選択し、https://www.digitalocean.com/community/tutorials/understanding-ip-addressesを使用してアドレスとサブネットを指定する必要があります。 -ネットワーキングとCIDR表記法[CIDR表記法]。

*最初のサーバー*にアドレス10.0.0.1を指定します。これは、CIDR表記で10.0.0.1/24として表されます。

最初のサーバー上の/etc/wireguard/wg0.conf

[Interface]
PrivateKey =
ListenPort = 5555
SaveConfig = true
Address =
  • 2番目のサーバー*で、アドレスを10.0.0.2として定義します。これにより、10.0.0.2 / 24のCIDR表現が得られます。

2番目のサーバー上の/etc/wireguard/wg0.conf

[Interface]
PrivateKey =
ListenPort = 5555
SaveConfig = true
Address =

これで、 `+ [Interface] +`セクションの終わりです。

サーバーのピアに関する情報は、設定ファイル内に入力するか、後で「+ wg 」コマンドを使用して手動で入力できます。 上記のように、 ` SaveConfig `オプションが ` true `に設定された ` wg-quick +`サービスは、いずれかの方法でピア情報が最終的にファイルに書き込まれることを意味します。

ピアIDを定義する両方の方法を示すために、最初のサーバーではなく、2番目のサーバーの構成ファイルに `+ [Peer] +`セクションを作成します。 ここで、* first *サーバー(10.0.0.1アドレスを定義するサーバー)の構成ファイルを保存して閉じることができます。

ピアセクションの定義

まだ開いている設定ファイルで、 `+ [Interface] `セクションのエントリの下に ` [Peer] +`というセクションを作成します。

最初に、 `+ PublicKey `を_first_サーバーの公開キーの値に設定します。 この値を見つけるには、反対側のサーバーで「 cat / etc / wireguard / publickey 」と入力します。 また、トンネル内で有効なIPアドレスに「 AllowedIPs 」を設定します。 最初のサーバーが使用している特定のIPアドレスを知っているので、それを直接入力して、「 / 32+」で終わり、単一のIP値を含む範囲を示します。

2番目のサーバー上の/etc/wireguard/wg0.conf

[Interface]
. . .

[Peer]
PublicKey =
AllowedIPs = 10.0.0.1/32

最後に、「+ Endpoint +」を最初のサーバーのパブリックIPアドレスとWireGuardリスニングポートに設定できます(この例ではポート5555を使用しました)。 WireGuardは、別のアドレスのこのピアから正当なトラフィックを受信すると、この値を更新し、VPNがローミング条件に適応できるようにします。 このサーバーが連絡を開始できるように初期値を設定します。

2番目のサーバー上の/etc/wireguard/wg0.conf

[Interface]
. . .

[Peer]
PublicKey =
AllowedIPs = 10.0.0.1/32
Endpoint = :5555

終了したら、ファイルを保存して閉じ、コマンドプロンプトに戻ります。

VPNの開始とピアへの接続

これで、各サーバーでWireGuardを起動し、2つのピア間の接続を構成する準備が整いました。

ファイアウォールを開いてVPNを開始する

まず、各サーバーのファイアウォールでWireGuardポートを開きます。

sudo ufw allow 5555

ここで、定義した `+ wg0 `インターフェースファイルを使用して ` wg-quick +`サービスを開始します。

sudo systemctl start [email protected]

これにより、マシンの「+ wg0 +」ネットワークインターフェイスが起動します。 これを確認するには、次のように入力します。

ip addr show wg0
Output on first server6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1
   link/none
   inet 10.0.0.1/24 scope global wg0
      valid_lft forever preferred_lft forever

`+ wg +`ツールを使用して、VPNのアクティブな構成に関する情報を表示できます。

sudo wg

ピア定義のないサーバーでは、表示は次のようになります。

Output on first serverinterface: wg0
 public key:
 private key: (hidden)
 listening port: 5555

ピア構成が既に定義されているサーバーでは、出力には次の情報も含まれます。

Output on second serverinterface: wg0
 public key:
 private key: (hidden)
 listening port: 5555

peer:
 endpoint: :5555
 allowed ips: 10.0.0.1/32

接続を完了するには、 `+ wg +`コマンドを使用して、2番目のサーバーのピアリング情報を最初のサーバーに追加する必要があります。

不足しているピア情報をコマンドラインに追加する

最初のサーバー(ピア情報を表示しないサーバー)で、次の形式を使用して手動でピアリング情報を入力します。 2番目のサーバーの公開鍵は、2番目のサーバーからの `+ sudo wg +`の出力にあります。

sudo wg set wg0 peer  endpoint :5555 allowed-ips 10.0.0.2/32

最初のサーバーでもう一度「+ sudo wg +」と入力すると、情報がアクティブな構成になっていることを確認できます。

sudo wg
Output on first serverinterface: wg0
 public key:
 private key: (hidden)
 listening port: 5555

peer:
 endpoint: :5555
 allowed ips: 10.0.0.2/32

これで、ポイントツーポイント接続が利用可能になります。 最初から2番目のサーバーのVPNアドレスにpingを試してください。

ping -c 3 10.0.0.2
Output on first serverPING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms

--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms

すべてが正常に機能している場合、サービスを再起動することで、最初のサーバーの設定を「+ / etc / wireguard / wg0.conf +」ファイルに保存できます:

sudo systemctl restart [email protected]

起動時にトンネルを開始する場合は、次のように入力して各マシンでサービスを有効にできます。

sudo systemctl enable [email protected]

これで、マシンが起動するたびにVPNトンネルが自動的に開始されます。

結論

WireGuardは、柔軟性、軽量な実装、最新の暗号化により、多くのユースケースに最適なオプションです。 このガイドでは、2つのUbuntu 16.04サーバーにWireGuardをインストールし、各ホストを、ピアへのポイントツーポイント接続を持つサーバーとして構成しました。 このトポロジは、各側が同等の参加者であるピアや、ホストが他のサーバーへのアドホック接続を確立する必要があるピアとのサーバー間通信の確立に最適です。

前の投稿:Ubuntu 16.04でLinux、Nginx、MySQL、PHP(LEMPスタック)をインストールする方法
次の投稿:Python 3で簡単な電卓プログラムを作成する方法