Wireguardは、複数のオペレーティングシステムで利用できる最新の非常に簡単にセットアップできるVPNです。このアプリケーションはUbuntu20.04の公式リポジトリで利用できるため、インストールも非常に簡単です。 ssl証明書の使用に基づくOpenVPNのような他のソフトウェアとは異なり、Wireguardはキーペアの使用に基づいています。このチュートリアルでは、いくつかの簡単な手順で、最新の安定バージョンのUbuntuでVPNサーバーとクライアントピアを構成する方法を説明します。
このチュートリアルでは、次のことを学びます。
- Ubuntu 20.04FocalFossaにWireguardをインストールする方法
- 公開鍵と秘密鍵のペアを作成する方法
- サーバーとクライアントピアを構成する方法
- すべての着信トラフィックをVPNにリダイレクトする方法
使用されるソフトウェア要件と規則
カテゴリ | 使用する要件、規則、またはソフトウェアバージョン |
---|---|
Ubuntu 20.04 Focal Fossa | |
ワイヤーガード | |
root権限 | |
# –指定されたLinuxコマンドは、rootユーザーとして直接、またはsudo を使用して、root権限で実行する必要があります。 コマンド$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります |
インストール
Wireguardは、Ubuntu 20.04の「ユニバース」リポジトリで正式に利用できるため、apt
を介してインストールできます。 。執筆時点で利用可能なバージョンは1.0.20200319-1ubuntu1
です。 :
$ sudo apt install wireguard
プログラムとその依存関係をインストールするかどうかを確認するように求められ、数秒で操作が完了します。
キーの生成
VPNで使用するマシンごとに、公開鍵と秘密鍵を生成する必要があります。秘密鍵はマシン上で秘密にしておく必要があります。公開鍵は他のピアからマシンにアクセスするために使用されます。
キーを生成するには、wg
を使用できます 効用。 Wireguard構成ファイル内で、マシンの秘密鍵を参照する必要がありますが、公開鍵は他のピアで使用されます。キーを直接参照するため、理論的にはキーをファイルに保存する必要がないことに注意してください。ただし、便宜上、とにかくそれを行います。
サーバーの秘密鍵を生成するには、genkey
を使用する必要があります wg
のサブコマンド 。このコマンドは、作成されたキーをstdout
に出力します;キーをファイルに書き込むには、シェルリダイレクトの機能を使用できます:
$ wg genkey> server_private_key
このコマンドはキーを生成し、それをserver_private_key
に保存します ファイルですが、次の警告が表示されます:
警告:誰でもアクセス可能なファイルに書き込んでいます。umaskを077に設定して、再試行することを検討してください。
これは、デフォルトのユーザーが umaskであるためです。 (002
)ファイルはモード664
で作成されます 、誰でも読み取り可能ですが、これはお勧めしません。この問題を解決するには、ファイルを作成する前に、現在のシェルセッションで使用されているumaskを変更します。
$ umask 077
または、ファイルのアクセス許可を600
に変更します 作成後。ここでは、後者のソリューションについて説明します。
秘密鍵の準備ができたら、公開を生成できます それに基づくもの。タスクを実行するには、pubkey
を使用します wg
のサブコマンド 。以前と同じように、シェルリダイレクトを使用します。最初にserver_private_key
のコンテンツを渡します stdin
へのファイル コマンドを実行し、生成されたキーをserver_public_key
にリダイレクトします。 ファイル:
$ wg pubkeyserver_public_key
入力を省くために、シェル|
を使用する1つのコマンドで、両方のキーを生成できます。 (パイプ)演算子とtee
コマンド:
$ wg genkey | tee server_private_key | wg pubkey> server_public_key
パイプ演算子の左側にあるコマンドの出力(|
)は、右側のプログラムの標準入力に渡されます。 tee
コマンドの代わりに、コマンドの出力をファイルと標準出力の両方にリダイレクトできるようにします(シェルリダイレクトの詳細については、こちらをご覧ください)。
キーの準備ができたら、サーバー構成ファイルを作成できます。
サーバー構成ファイル
Wireguardのインストールを構成するために、wg0.conf
という構成ファイルを作成できます。 次の内容で:
[Interface] PrivateKey =<サーバーの秘密鍵(server_private_keyファイルのコンテンツ)> Address =10.0.0.1/24ListenPort =51820
ファイルの名前は任意ですが、インターフェイスに使用する名前wg0
に基づいている必要があります。 この場合。この名前は、以下に示すように、サービスの開始時に参照されます。
この例では。 [interface]
構成ファイルのセクションには、次のフィールドが含まれています。
- PrivateKey
- 住所
- ListenPort
PrivateKey フィールド値は、以前に生成したサーバー秘密鍵にすぎません。
住所 フィールドCIDRを使用して、サブネットマスクとともにVPNのインターフェイスに割り当てるアドレスを指定しました 表記。この場合、10.0.0.1/24
を使用しました 、したがって、VPN内のWireguard「サーバー」アドレスは10.0.0.1
になります 、10.0.0.1
からのアドレスの使用可能な範囲内にあります 10.0.0.254
へ 。
最後に、 ListenPort フィールドでは、Wireguardが着信トラフィックをリッスンするポートを指定しました。上記のトラフィックを許可するルールもファイアウォールに追加する必要があります。これは次のセクションで行います。
これで、ファイルの権限を変更して、/etc/wireguard
に移動できます。 ディレクトリ:
$ chmod 600 server_public_key server_private_key wg0.conf $ sudo mv server_private_key server_public_key wg0.conf / etc / wireguard
これで、wg-quick
を開始できます @
の後にWireguardインターフェースの名前を指定するサービス ユニット名で。この表記は何ですか?これはsystemdの機能です。これを使用すると、「テンプレート」ファイルに基づいて複数のユニットファイルを生成し、@
の後にテンプレートで置換される値を渡すことができます。 ユニット名の記号。これは、[email protected]
のコンテンツです。 単位:
[Unit] Description =WireGuard via wg-quick(8)for%IAfter =network-online.target nss-lookup.targetWants =network-online.target nss-lookup.targetDocumentation =man:wg-quick(8) Documentation =man:wg(8)Documentation =https://www.wireguard.com/Documentation=https://www.wireguard.com/quickstart/Documentation=https://git.zx2c4.com/wireguard-tools/ about / src / man / wg-quick.8Documentation =https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 [Service] Type =oneshotRemainAfterExit =yesExecStart =/ usr / bin / wg -クイックアップ%iExecStop =/ usr / bin / wg-クイックダウン%iEnvironment =WG_ENDPOINT_RESOLUTION_RETRIES =infinity [Install] WantedBy =multi-user.target
@
の後に指定する値 ユニット名の開始時または停止時に、%i
を置き換えます ExecStart
で およびExecStop
行。この場合、wg0
を使用します :
$ sudo systemctl enable --now wg-quick @ wg0
上記のコマンドを使用してサービスを開始し、起動時に自動的に開始されるようにします。構成が適用されたことを確認するために、wg
を実行できます。 指図。生成される出力には、wg0
に関する情報が表示されます。 インターフェイス:
$ sudo wginterface:wg0公開鍵:nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4 =秘密鍵:(非表示)リスニングポート:51820
それでは、ファイアウォールとパケット転送を構成してみましょう。
ファイアウォールとネットワークのセットアップ
このチュートリアルでは、ufw
の使用を想定しています。 。前に述べたように、構成ファイル51820
で指定したポートを介した着信トラフィックを許可するルールを追加する必要があります。 。非常に単純なコマンドを実行することでそれを行います:
$ sudo ufw allow 51820 / udp
また、システムでパケット転送を許可する必要があります。タスクを実行するために、28
行からコメントを削除します。 /etc/sysctl.conf
の ファイル、次のようになります:
#次の行のコメントを解除して、IPv4net.ipv4.ip_forward=1のパケット転送を有効にします
システムを再起動せずに変更を有効にするには、次のコマンドを実行する必要があります。
$ sudo sysctl -p
次のステップでは、クライアントを構成します。
クライアントキーの生成
次に、クライアントとして使用するシステムに移りましょう。その上にWireguardをインストールする必要があります。完了すると、サーバーで行ったのと同じようにキーペアを生成できます。
$ wg genkey | tee client_private_key | wg pubkey> client_public_key
サーバーサイドで行ったのと同じように、wg0.conf
を作成します 構成ファイル。今回はこのコンテンツで:
[Interface] PrivateKey =Address =10.0.0.2/24 [Peer] PublicKey = EndPoint = :51820AllowedIPs =0.0.0.0/0
Interface
に含まれるフィールドの意味はすでに見てきました。 セクション、サーバー構成を生成したとき。ここでは、値をクライアントに適合させました(10.0.0.2
があります) VPN内のアドレス)。
この構成では、新しいセクション[Peer]
を使用しました 。その中で、ピア(この場合は「サーバー」として使用するもの)に関連する情報を指定できます。使用したフィールドは次のとおりです。
- PublicKey
- エンドポイント
- 許可されたIP
PublicKey フィールドには、 publicを指定します ピアの鍵。この場合、サーバーで生成した公開鍵です。
エンドポイント ピアのパブリックIPアドレスまたはホスト名の後にコロンとピアがリッスンするポート番号(この場合は51820
)です。 。
最後に、 AllowedIPsに渡される値 フィールドは、CIDR表記のIPアドレスとサブネットマスクのコンマ区切りのリストです。指定されたアドレスからのピアに向けられたトラフィックのみが許可されます。この場合、0.0.0.0/0
を使用しました 値として:「キャッチオール」値として機能するため、すべてのトラフィックがVPNピア(サーバー)に送信されます。
サーバー側で行ったのと同じように、適切な権限を設定し、キーと構成ファイルを/etc/wireguard
に移動します ディレクトリ:
$ chmod 600 client_public_key client_private_key wg0.conf $ sudo mv client_public_key client_private_key wg0.conf / etc / wireguard
構成ファイルを配置したら、サービスを開始できます。
$ sudo systemctl enable --now wg-quick @ wg0
最後に、[Peer]
クライアントに関連するセクションは、以前にサーバーで作成した構成ファイルに追加する必要があります 。 追加 次のコンテンツ:
[Peer] PublicKey=<クライアントの公開鍵>AllowedIPs=10.0.0.2/32
この時点で、サービスを再開します:
$ sudo systemctl restart wg-quick @ wg0
関連するピアに関する情報は、wg
の出力で報告されるはずです。 コマンド:
$ sudo wginterface:wg0公開鍵:nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4 =秘密鍵:(非表示)リスニングポート:51820peer:t5pKKg5 / 9fJKiU0lrNTahv6gvABcmCjこの時点で、「クライアント」システムから、
10.0.0.1
でサーバーにpingを実行できるはずです。 住所:$ ping -c 3 10.0.0.1PING 10.0.0.1(10.0.0.1)56(84)バイトのデータ.10.0.0.1から64バイト:icmp_seq =1 ttl =64 time =2.82ms64バイト10.0.0.1から:icmp_seq =2 ttl =64 time =38.0 ms64 bytes from 10.0.0.1:icmp_seq =3 ttl =64 time =3.02 ms --- 10.0.0.1 ping statistics --- 3パケット送信、3受信、0%パケット損失、時間2003msrttmin/ avg / max / mdev =2.819 / 14.613 / 37.999 / 16.536 ms結論
このチュートリアルでは、Ubuntuの最新の安定バージョンである20.04FocalFossaでWireguardを使用してVPNを作成する方法を説明しました。このソフトウェアは、特にOpenVpnなどの他のソリューションと比較した場合、インストールと構成が非常に簡単です。
セットアップに使用する公開キーと秘密キーを生成する方法と、すべてのトラフィックがVPNにリダイレクトされるようにサーバーとクライアントの両方を構成する方法を確認しました。与えられた指示に従うと、作業セットアップができます。詳細については、プロジェクトページをご覧ください。
Ubuntu