Ubuntu20.04でWireGuardVPNサーバーとクライアントをセットアップする方法

Wireguardを使用してセルフホストVPNをセットアップする

A VPN(仮想プライベートネットワーク) ユーザーのコンピューターがプライベートネットワークに直接接続されているかのように、ユーザーがプライベートネットワークにリモートで接続できるようにします。このテクノロジーは当初、社内ネットワークの場所に実際に存在しない従業員のために、企業の社内プライベートネットワークへのリモートアクセスを可能にするために開発されました。

VPNサーバーは、内部ネットワークの場所に展開されます。このサーバーはパブリックネットワーク上にあり、従業員はVPNクライアントを使用してアクセスできます。 VPNサーバーに接続するには認証が必要です。 VPNサーバーとVPNクライアント間の通信は、トンネリングプロトコルを使用して保護されます。この通信は暗号化されている場合とされていない場合がありますが、通常、ほとんどのVPNプロトコルでは暗号化されていることに注意してください。

VPNのもう1つの用途は、 インターネットにアクセスするときに匿名性を得る または、一部のWebサイトへのアクセス中に課せられる地理的制限を回避するため。このような場合、ユーザーが接続したいネットワークはプライベートネットワークではなく、インターネットです。

多くのVPNプロトコルが長年にわたって開発されてきました。これらのプロトコルは、サーバーとクライアント間の通信にさまざまなトンネリングプロトコルと暗号化アルゴリズムを利用します。

最近広く使用されているそのようなプロトコルの1つは、 Wireguard。 Wireguardは、OpenVPN、IPSecなどのよく知られた従来から使用されているVPNプロトコルよりも軽量で、シンプルで、パフォーマンスが高くなっています。これは、Windows、Mac OS、および多数のLinuxディストリビューションにすでに実装されています。 Linuxでは、カーネルモジュールとして実装されます。 Ubuntu20.04の公式リポジトリで利用できます。

この記事では、Ubuntu20.04でWireguardVPNサーバーとクライアントをセットアップする方法を説明します。

インストール

この記事では、Ubuntu 20.04LinodeにWireguardServerをセットアップし、Ubuntu20.04を使用するローカルマシンにWireguardClientをセットアップします。

その包み ワイヤーガード Wireguardサーバーとクライアントの両方をインストールします。 次のコマンドを実行します サーバーマシンとクライアントマシンの両方で。

sudo aptinstallwireguard

サーバー構成

セキュリティキー

公開鍵と秘密鍵のペアのセットを生成する必要があります Wireguard接続を認証および保護するため。これは、次のコマンドを使用して実行できます。

sudo su cd / etc / wireguard umask 077 wg genkey | tee private_key | wg pubkey> public_key

スーパーユーザーとしてすべての構成タスクを実行していることに注意してください。その理由は、ディレクトリへのアクセスです / etc / wireguard 通常のユーザーは禁止されており、通常のユーザーのsudo権限だけではディレクトリアクセスを取得できません。

次に、ファイル作成マスクをに設定します 077。これは、プロセスによってこのフォルダに新しいファイルが作成されるたびに、そのアクセス許可が077で自動的にマスクされることを意味します。このフォルダにアクセス許可777でファイルが作成された場合、そのファイルは自動的にマスクされ、アクセス許可は実質的に700になります。これにより、ファイルの所有者のみがファイルに対するすべてのアクセス許可を持ち、他のすべてのユーザーはアクセス許可を持ちません。

次の行で、 公開鍵と秘密鍵のペアを生成します サーバー用。それらはファイルに保存されます private_keypublic_key。キーを表示するには、次のコマンドを実行します。

cat private_key cat public_key

秘密鍵をコピーします。次のステップで必要になります。

ノート: 秘密鍵を公開しないでください。

構成ファイル

Wireguardサーバーの構成ファイルを作成しましょう。ファイルには任意の名前を選択できます。ファイルを作成します wg0.conf この例では。

vim wg0.conf

以下をファイルに追加します。

[インターフェース]アドレス= 10.20.43.1 / 24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

前にコピーした秘密鍵を上記のコードの5行目に貼り付けます。

別の(仮想)サブネットでWireguardを構成する必要があります サーバーのIPアドレスより。ここでは、サーバーに10.20.43.1を使用し、クライアントに10.20.43.2を使用します。ここでは、任意のサブネットを使用できます。サーバーとインターフェースのIPアドレスを取得するには、次のコマンドを実行します。

ifconfig

サーバーのIPアドレスをメモします。これは、クライアントの構成時に必要です。

上の画像に示されているように、サーバーが使用するインターフェースは次のとおりです。 eth0。インターフェイス名は、ユーザーのネットワークに基づいて異なる場合があります。 wlan0 また wlp2s0 ユーザーがワイヤレスカードを使用してWiFiネットワークに接続している場合。

交換してください 最大投稿PostDown あなたのインターフェースで;この例では、 eth0.最大投稿PostDown ディレクティブは、サーバーの起動時と停止時にそれぞれ実行するコマンドを指定するために使用されます。この例では、 iptables サーバーのIPアドレスがクライアントによって共有されるようにIPルールを設定するコマンド。サーバーが停止すると、ルールは削除されます。

ファイルを保存して終了します。 vimを使用する場合は、 ESC、次に入力します :wq を押して 入力 保存して終了します。

を使用している場合 ufw サーバーのファイアウォールでは、VPNサーバー51190のポートへのUDP接続を許可する必要があります。

ufw allow 51190 / udp

サービスの開始

構成が完了したら、WireguardVPNサービスを開始できます。

有効にする 起動時に開始するサービス、実行:

systemctl enable wg-quick @ wg0

ここに注意してください wg0 構成ファイルの名前です。

始めること サービス、実行:

サービスwg-quick @ wg0 start

確認 サービスが正常に開始されたこと:

サービスwg-quick @ wg0ステータス

インターフェイスを確認します IPコマンドを使用して、構成ファイルで作成したものが起動しました。

ip a show wg0

これで、WireguardVPNサーバーがセットアップされて実行されます。それでは、クライアントを構成しましょう。

クライアント構成

Wireguardのクライアント構成は、サーバー構成とほぼ同じです。クライアントのキーを生成してから、構成ファイルを作成します。

セキュリティキー

公開鍵/秘密鍵を生成するには クライアントのペアを作成し、次を実行します。

sudo su cd / etc / wireguard umask 077 wg genkey | tee client_private_key | wg pubkey> client_public_key

クライアントの公開鍵と秘密鍵がそれぞれファイルに生成されるようになりました client_private_keyclient_public_key.

を使用して、それらが作成されたことを確認します 指図。

cat client_private_key cat client_public_key

表示された秘密鍵をクライアントの構成ファイルに追加する必要があるため、コピーします。

構成ファイル

構成ファイルを作成します 任意の名前で。名前で作成します wg0-クライアント この例では。

vim wg0-client.conf

次の構成を追加します。

[インターフェース]#クライアントアドレスのIPアドレスと秘密鍵= 10.20.43.2 / 24 PrivateKey = [ピア]#サーバーの公開鍵、IPアドレスとポートPublicKey =エンドポイント=:51190 AllowedIPs = 0.0.0.0/0 、: :/ 0

クライアントのサブネットアドレスを入力します。前述のように、 10.20.43.2 この例のクライアントの場合。

クライアントの秘密鍵を追加します 上記の構成コードの4行目に前のステップで生成されました。

[ピア]の下に、WireguardVPNサーバーに関する情報を追加します 接続したいです。

サーバーの公開鍵を入力します。入力します サーバーのIPアドレス、前述しましたが、指定された形式で移植します。 終点。これは、サーバー構成ファイルで指定したポートであり、サーバー上のVPNサービスが開始されたポートです。

許可されたIPは、指定されたとおりに入力する必要があります(0.0.0.0/0)。これにより、クライアントが使用する動的パブリックIPに対する要求は、常にVPNサーバーに転送されます。

ファイルを保存して終了します。 vimを使用する場合は、 ESC、次に入力します :wq を押して 入力 保存して終了します。

クライアントサービスを有効にする 起動するたびに実行し、起動します。

systemctl enable wg-quick @ wg-client service wg-quick @ wg-client start

確認 サービスが開始された場合。

サービスwg-quick @ wg-クライアントステータス

サーバーへのピアの追加

これで、VPNサーバーとクライアントが稼働しました。ただし、サーバーとクライアントの間にピアツーピア接続を確立しない限り、2つの間の安全なトンネルは確立されません。

戻る サーバーに。初め、 VPNサービスを停止します.

サービスwg-quick @ wg0 stop

次に、構成ファイルを開いて ピアの構成を追加します (クライアント)。

vim /etc/wireguard/wg0.conf

追加する ファイルへの次の行。

[ピア] PublicKey = AllowedIPs = 10.20.43.2 / 32

今、 VPNサービスを再開します.

サービスwg-quick @ wg0 start

それでおしまい!これが、WireguardVPNクライアントとサーバーのセットアップに必要なすべての構成です。 VPNをテストしてみましょう。

VPNのテスト

まず、クライアントからサーバーへの簡単なpingを実行して、VPNトンネル通信が機能することを確認しましょう。 クライアントで次を実行します:

ping 10.20.43.1

次、 Webブラウザを開き、任意のWebサイトを開きます クライアントマシンからインターネットに接続できるかどうかを確認します。コマンドラインからインターネット接続を確認することもできます。 wget.

wget 

これで、トンネル接続とインターネット接続を確認しました。両方が機能している場合は、クライアントに着信するすべてのインターネットトラフィックがサーバーを通過していることを確認する必要があります。

このためには、インターネットから見たクライアントのIPアドレスを確認するだけです。そのための1つの方法は、whatsmyip.orgにアクセスすることです。または、コマンドラインから、Curlを使用してIP情報と呼ばれる別の同様のサービスをクエリできます。

クライアントマシンで以下を実行します

curl //ipinfo.io/ip

はい。これは、VPNサーバーがホストされているLinodeのパブリックIPアドレスです。これは、VPNを使用して匿名性を実現する方法です。これは、インターネット全体で、コンピューターではなくVPNサーバーのIPが表示されるようになったためです。

結論

セットアップの容易さは、OpenVPNのような従来のVPNソフトウェアに対するWireguardの最も重要な利点の1つであり、セットアップにはより高いレベルのネットワークとルーティングの知識が必要です。ただし、Wireguardの詳細な公式ドキュメントが不足しているため、Wireguardのセットアップでエラーが発生したり、期待どおりに機能しなかったりすると、問題が発生する可能性があります。

それでも、インターネットを介した安全な通信のためにセルフホストVPNが必要な場合は、Wireguardが最適です。 Wireguardと、Wireguardが使用するプロトコルとテクノロジーの詳細については、公式サイトをご覧ください。