 
 WireGuardは、最先端の暗号化を利用する汎用VPN(仮想プライベートネットワーク)です。 IPsecやOpenVPNなどの他の一般的なVPNソリューションと比較すると、WireGuardは一般に高速で構成が簡単で、フットプリントも小さくなっています。クロスプラットフォームであり、Linux、Windows、Android、macOSなど、ほぼどこでも実行できます。
WireguardはピアツーピアVPNです。クライアントサーバーモデルは使用しません。構成に応じて、ピアは従来のサーバーまたはクライアントとして機能できます。これは、トンネルとして機能する各ピアデバイス上にネットワークインターフェイスを作成することによって機能します。ピアは、SSHモデルを模倣して、公開鍵を交換および検証することにより、相互に認証します。公開鍵は、トンネルで許可されているIPアドレスのリストにマッピングされます。 VPNトラフィックはUDPにカプセル化されています。
この記事では、VPNサーバーとして機能するDebian10にWireGuardをインストールして構成する方法について説明します。また、Linux、Windows、およびmacOSでWireGuardをクライアントとして構成する方法についても説明します。クライアントのトラフィックはDebian10サーバーを経由してルーティングされます。
この設定は、中間者攻撃に対する保護、匿名でのWebサーフィン、地理的に制限されたコンテンツのバイパス、または自宅で仕事をしている同僚が会社のネットワークに安全に接続できるようにするために使用できます。
前提条件#
このガイドに従うには、Debian10がインストールされたマシンが必要です。パッケージをインストールしてシステムに変更を加えるには、rootまたは[sudo access](https://linuxize.com/post/how-to-create-a-sudo-user-on-debian/)も必要です。
WireGuardサーバーのセットアップ#
まず、WireGuardパッケージをDebianマシンにインストールし、サーバーとして機能するように設定します。また、クライアントのトラフィックをシステム経由でルーティングするようにシステムを構成します。
Debian 10にWireGuardをインストールする#
WireGuardは、Debianバックポートリポジトリから入手できます。システムにリポジトリを追加するには、次のコマンドを実行します。
echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.listリポジトリが有効になったら、aptキャッシュを更新し、WireGuardモジュールとツールをインストールします。
WireGuardはカーネルモジュールとして実行されます。sudo apt updatesudo apt install wireguard
WireGuardの構成#
 wgを使用して、WireGuardインターフェースを構成および管理できます。 およびwg-quick コマンドラインツール。
WireGuard VPNネットワーク内の各デバイスには、秘密鍵と公開鍵が必要です。次のコマンドを実行して、キーペアを生成します。
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
 ファイルは/etc/wireguardで生成されます ディレクトリ。 catを使用する またはless ファイルの内容を表示するコマンド。秘密鍵は決して誰とも共有してはならず、常に安全に保つ必要があります。
Wireguardは、事前共有キーもサポートしています。これにより、対称キー暗号化のレイヤーが追加されます。このキーはオプションであり、ピアペアごとに一意である必要があります。
次のステップは、VPNトラフィックをルーティングするトンネルデバイスを構成することです。
 デバイスは、コマンドラインからipを使用してセットアップできます。 およびwg コマンド、または手動で構成ファイルを作成します。テキストエディタを使用して構成を作成します。
 エディターを開き、wg0.confという名前の新しいファイルを作成します 次の内容で:
sudo nano /etc/wireguard/wg0.conf[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
 インターフェイスには任意の名前を付けることができます。ただし、wg0のようなものを使用することをお勧めします またはwgvpn0 。
インターフェイスセクションの設定には、次の意味があります。
-  アドレス- wg0のv4またはv6IPアドレスのコンマ区切りリスト インターフェース。プライベートネットワーク用に予約されている範囲(10.0.0.0/8、172.16.0.0/12、または192.168.0.0/16)からIPアドレスを取得できます。
-  ListenPort-リスニングポート。 
-  PrivateKey- wg genkeyによって生成された秘密鍵 指図。 (ファイルタイプの内容を確認するには:sudo cat /etc/wireguard/privatekey)
-  SaveConfig-trueに設定すると、シャットダウン時にインターフェイスの現在の状態が構成ファイルに保存されます。 
-  PostUp-インターフェイスを起動する前に実行されるコマンドまたはスクリプト。この例では、マスカレードを有効にするためにiptablesを使用しています。これにより、トラフィックがサーバーを離れることができ、VPNクライアントがインターネットにアクセスできるようになります。 必ず ens3を置き換えてください-A POSTROUTINGパブリックネットワークインターフェイスの名前と一致します。次のインターフェースを簡単に見つけることができます:ip -o -4 route show to default | awk '{print $5}'
-  PostDown-インターフェイスを停止する前に実行されるコマンドまたはスクリプト。インターフェイスがダウンすると、iptablesルールは削除されます。 
 wg0.conf およびprivatekey 通常のユーザーはファイルを読み取れないようにする必要があります。 chmodを使用する ファイルのアクセス許可を600に設定します :
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
 完了したら、wg0を持参してください 構成ファイルで指定された属性を使用してインターフェースを確立します:
sudo wg-quick up wg0出力は次のようになります:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
インターフェイスの状態と構成を確認するには、次を実行します。
sudo wg show wg0interface: wg0
  public key: +Vpyku+gjVJuXGR/OXXt6cmBKPdc06Qnm3hpRhMBtxs=
  private key: (hidden)
  listening port: 51820
 ip a show wg0を使用してインターフェースの状態を確認することもできます :
ip a show wg04: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever
WireGuardはSystemdで管理できます。起動時にWireGuardインターフェースを使用するには、次のコマンドを実行します。
sudo systemctl enable wg-quick@wg0サーバーネットワークとファイアウォールの構成#
 NATを機能させるには、IP転送を有効にする必要があります。 /etc/sysctl.confを開きます 次の行をファイルして追加またはコメント解除します:
sudo nano /etc/sysctl.confnet.ipv4.ip_forward = 1
ファイルを保存して変更を適用します:
sudo sysctl -pnet.ipv4.ip_forward = 1
 UFWを使用してファイアウォールを管理している場合は、ポート51820でUDPトラフィックを開く必要があります。 :
sudo ufw allow 51820/udpそれでおしまい。サーバーとして機能するDebianピアがセットアップされました。
LinuxおよびmacOSクライアントのセットアップ#
 サポートされているすべてのプラットフォームのインストール手順は、https://wireguard.com/install/で入手できます。 Linuxシステムでは、ディストリビューションパッケージマネージャーを使用してパッケージをインストールでき、macOSではbrewを使用してインストールできます。 。
インストールしたら、以下の手順に従ってクライアントデバイスを構成します。
LinuxおよびmacOSクライアントをセットアップするプロセスは、サーバーの場合とほとんど同じです。まず、公開鍵と秘密鍵を生成します:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
 ファイルwg0.confを作成します 次のコンテンツを追加します:
sudo nano /etc/wireguard/wg0.conf[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
インターフェイスセクションの設定は、サーバーを設定するときと同じ意味です。
- アドレス-wg0のv4またはv6IPアドレスのコンマ区切りリスト インターフェース。
-  PrivateKey-クライアントマシンでファイルの内容を確認するには、次のコマンドを実行します:sudo cat /etc/wireguard/privatekey
ピアセクションには、次のフィールドが含まれています。
- PublicKey-接続するピアの公開鍵。 (サーバーの/etc/wireguard/publickeyの内容 ファイル)。
- エンドポイント-接続するピアのIPまたはホスト名、コロン、リモートピアがリッスンするポート番号。
- AllowedIPs-ピアの着信トラフィックが許可され、このピアの発信トラフィックが送信されるv4またはv6IPアドレスのコンマ区切りのリスト。トラフィックをルーティングしていて、サーバーピアが任意の送信元IPでパケットを送信するようにしたいため、0.0.0.0/0を使用しています。
追加のクライアントを構成する必要がある場合は、別のプライベートIPアドレスを使用して同じ手順を繰り返すだけです。
Windowsクライアントのセットアップ#
WireGuardWebサイトからWindowsmsiパッケージをダウンロードしてインストールします。
インストールしたら、WireGuardアプリケーションを開き、下の画像に示すように、[トンネルの追加]->[空のトンネルの追加...]をクリックします。
 
 公開鍵のペアが自動的に作成され、画面に表示されます。
 
 トンネルの名前を入力し、次のように構成を編集します。
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
インターフェイスセクションで、クライアントトンネルアドレスを定義するための新しい行を追加します。
ピアセクションで、次のフィールドを追加します。
-  PublicKey-Debianサーバーの公開鍵(/etc/wireguard/publickeyファイル)。
- エンドポイント-DebianサーバーのIPアドレスの後にコロンとWireGuardポート(51820)が続きます。
- 許可されたIP-0.0.0.0/0
完了したら、[保存]ボタンをクリックします。
クライアントピアをサーバーに追加する#
最後のステップは、クライアントの公開鍵とIPアドレスをサーバーに追加することです。これを行うには、Debianサーバーで次のコマンドを実行します。
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
 必ずCLIENT_PUBLIC_KEYを変更してください クライアントマシンで生成した公開鍵(sudo cat /etc/wireguard/publickey )クライアントのIPアドレスが異なる場合は調整します。 Windowsユーザーは、WireGuardアプリケーションから公開鍵をコピーできます。
完了したら、クライアントマシンに戻り、トンネリングインターフェイスを起動します。
LinuxおよびmacOSクライアント#
次のコマンドを実行して、インターフェイスを起動します。
sudo wg-quick up wg0これで、Debianサーバーに接続し、クライアントマシンからのトラフィックをDebianサーバー経由でルーティングする必要があります。次のコマンドで接続を確認できます:
sudo wginterface: wg0
  public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
  private key: (hidden)
  listening port: 53527
  fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 53 seconds ago
  transfer: 3.23 KiB received, 3.50 KiB sent
ブラウザを開いて「whatismyip」と入力すると、DebianサーバーのIPアドレスが表示されます。
 トンネリングを停止するには、wg0を停止します インターフェイス:
sudo wg-quick down wg0Windowsクライアント#
WindowsにWireGuardをインストールした場合は、[アクティブ化]ボタンをクリックします。ピアが接続されると、トンネルのステータスがアクティブに変わります:
