WireGuard VPN を使用してどこからでもホーム ネットワークにアクセス - David's Homelab (2024)

私の投稿のほとんどは、自宅でセットアップできるネットワーク サービスを特集しています。ただし、ローカル ネットワークの外部からこれらのサービスにアクセスすると、問題が生じる可能性があります。サービスごとにポート転送を設定することは可能ですが、複数のサービスを構成する場合は面倒になる可能性があります。また、多くのネットワーク プロトコルは公共のインターネット上での使用が想定されていないため、セキュリティ上のリスクが生じる可能性があります。リモートの場所からローカル ネットワークへの完全に安全なアクセスを提供する最も簡単な方法は、VPN を使用してトラフィックを暗号化されたトンネルにカプセル化し、ローカル ネットワークにアクセスすることです。

では、なぜ WireGuard を使うのでしょうか?はい、まだベータ版であり、重要なセキュリティ監査が行われていないことは知っていますが、このタイプのセットアップにはいくつかの利点があります。まず、PKI を必要とせず、OpenSSH ユーザーに馴染みのある方法で共有キーを使用するため、OpenVPN や IPSec よりも設定がはるかに簡単です。また、WireGuard は接続が失われるたびにトンネルを再作成する必要がないため、接続を再起動することなく、異なるネットワーク間をローミングできます。これは、DNS (パイホール) などの一部のトラフィックを VPN 経由でルーティングする必要がある携帯電話で特に便利です。これにより、接続しているネットワークに関係なく広告をブロックできます。

私は個人用デバイスやサイト間 VPN には WireGuard が好きですが、すべてに完璧であるとは言いません。 WireGuard は DHCP をサポートしておらず、VPN へのユーザー名とパスワードによるログインも許可していません。デバイスごとに設定する必要があるため、企業のリモート アクセス VPN には理想的な選択肢ではない可能性があります。さらに、その新しさとセキュリティ監査の欠如により、機密性の高い情報を保護する必要がある場合には、不適切な選択肢となります。

設定

ネットワーク環境を準備する

IP アドレスの変更による影響を受けるネットワーク サービスがすでに設定されておらず、ネットワークが 192.168.0.0/24、192.168.1.0/24 などの共通のサブネットを使用している場合は、DHCP 設定を調整する価値があります。 LAN では、より一般的ではないサブネットを使用します。これは、パブリック ネットワークから接続する場合、エンドポイントのローカル IP がこれらの範囲のいずれかに含まれる可能性があり、アドレスの競合が発生するためです。つまり、PC が 192.168.1.20 にアクセスしようとすると、PC はこれをトンネル経由でルーティングするか、ローカル ネットワーク (コーヒー ショップの WiFi など) 上のホストにアクセスしようとする可能性があります。静的ルートを使用してこれを回避することは可能ですが、面倒なので、可能であれば、自宅 LAN 上で一般的ではないサブネットを使用するようにしてください。

WireGuard エンドポイントの準備

CentOS 7 サーバーと Ubuntu 18.04 クライアントを使用したセットアップをデモンストレーションしますが、手順の大部分は少しの努力で他の Linux ディストリビューションにも適用できるため、サーバーに別のディストリビューション、さらには Windows や macOS を使用する予定がある場合は、の指示が適用される必要があります。

新しい CentOS 7 インストールから、次を実行します。yum -y アップデート利用可能なアップデートをインストールするには

root として次のコマンドを実行して、Copr から WireGuard をインストールします。

カール -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repoyum install epel-releaseyum Wireguard-dkms Wireguard-tools をインストールします。

別のディストリビューションにインストールする場合、基本的にどのディストリビューションにもインストールするための手順は WireGuard のサイトで見つけることができます。Webサイト

サーバーの構成

Wireguard-tools パッケージの一部として提供される wg-quick スクリプトを使用してトンネルを構成します。このツールはデフォルトで /etc/wireguard ディレクトリから設定ファイルを読み取るため、ここに設定ファイルを配置します。ディレクトリを作成し、root ユーザーのみがアクセスできるように権限を変更します。

mkdir /etc/wireguardchmod 700 /etc/wireguardcd /etc/wireguard

次に、サーバーの秘密鍵と公開鍵を生成する必要があります。これらは、秘密キーがサーバー上にのみ保存され、公開キーがすべてのクライアントのピア構成にコピーされるという点で、SSH キーと同様に機能します。クライアントからの公開キーは、サーバー上のピア構成にコピーされます。キーペアを生成するには、root として次のコマンドを実行します。

wgゲンキー |ティープライベートキー | wg 公開鍵 > public.key

これにより、config ファイルに追加できるそれぞれのキーを含む private.key と public.key という 2 つのファイルが得られます。

次に、トンネルの構成ファイルを作成します。トンネルがアクティブな場合、インターフェイス名は設定ファイルの名前から取得されるため、wg0.conf は wg0 というインターフェイスになります。好みのインターフェイス名に従ってファイルに名前を付けますが、wg-quick がファイルを検出するには名前の末尾が .conf である必要があることに注意してください。任意のテキスト エディタで構成ファイルを開き、次の基本構成を入力します。各行の上にコメントを追加して、その内容を説明しました。

[インターフェイス]# これは、VPN に使用するサブネット マスクを含む仮想 IP アドレスです。これは LAN サブネット上にあってはならず、アドレスの競合を避けるために珍しいサブネットである必要があることに注意してください。Address = 10.125.37.1/24# PostUp 命令は、VPN トンネルがアクティブ化されたときに実行されるコマンドです。この場合、トラフィックの転送を構成します。トンネルを越えて eth0 で NAT を有効にします (別のインターフェイスを使用している場合は、この値を変更します)PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE# PostDown 命令は、トンネルが非アクティブ化されたときに実行される命令です。この場合、接続開始時に作成したファイアウォール ルールを単純に削除します。PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE# これはサーバーがリッスンするポートです。公式の oneListenPort がないため、未使用のポートを使用します。 = 51845# 保存した秘密キーを /etc/ にコピーします。 Wireguard/private.keyPrivateKey = [あなたの秘密鍵]

サーバーはルーターとして機能するため、次のコマンドを実行して IPv4 転送を有効にする必要があります。

sysctl net.ipv4.ip_forward=1

この変更を再起動後も永続的にするには、次の行を /etc/sysctl.conf に追加する必要もあります。

net.ipv4.ip_forward=1

最後に、ファイアウォールで選択したポートを開きます。

firewall-cmd --permanent --add-port=51845/udpfirewall-cmd --reload

次のコマンドを実行して構成をテストできるようになりました。

wg-クイックアップ wg0wg ショー

すべてが順調であれば、wg show は次のような出力を行うはずです。

[root@wg Wireguard]# wg showinterface: wg0 公開キー: ljDbmpp6GLMigE19i4gRqzypnQ29ptZT91N0Lyt3pBg= 秘密キー: (非表示) リスニング ポート: 51820

これで、wg-quick down wg0 を実行してインターフェイスをダウンし、最初のクライアントの構成を開始できます。

クライアントの構成

サーバーと同様に、WireGuard パッケージをインストールすることから始めます。 Ubuntu の場合、これは次を実行することで実行されます。

sudo add-apt-repository ppa:wireguard/wireguardsudo apt-get アップデートudo apt-get install Wireguard

Ubuntu にはデフォルトでインストールされないため、resolvconf もインストールする必要があります。

sudo apt install resolvconf

サーバー上と同様に、/etc/wireguard ディレクトリを作成し、アクセス許可をロックダウンして、公開キーと秘密キーを作成します。

mkdir /etc/wireguardchmod 700 /etc/wireguardcd /etc/wireguard/wg genkey |ティープライベートキー | wg 公開鍵 > public.key

もう一度、次のテンプレートを使用して wg0.conf ファイルを作成します。

[インターフェイス]# サーバーと同じサブネット上のアドレスを使用しますAddress = 10.125.37.20/24# リッスンするポートを設定します。これはサーバー上のリッスン ポートと一致する可能性がありますが、必ずしも一致する必要はありませんListenPort = 51845# The private key you just generatedPrivateKey = [key from private.key]# この接続に特定の DNS サーバーを使用する場合は、ここで指定します。複数のサーバーを指定するには、カンマDNS = 10.100.4.20で区切ります。

繰り返しますが、wg-quick を使用してインターフェイスを起動し、wg-show が出力を生成するかどうかを確認して構成を確認できます。

ホスト同士を会話させる

これで、各ホストに接続を受け入れる準備ができた WireGuard インターフェイスができたので、相互に通知する段階になりました。このためには、各ホストの wg0.conf に [Peer] セクションを追加して、各エンドポイントに相手の公開キーと IP アドレスを通知する必要があります。

サーバーの場合、wg0.conf ファイルは次のようになります。

[Interface]Address = 10.125.37.1/24 # これは、VPNPostUp に使用するサブネット マスクを含む仮想 IP アドレスです。 = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADEListenPort = 51820PrivateKey = [サーバー秘密鍵][ピア] # client 1 ## 各ピアがピアのリストとして何を参照しているかをコメントすることをお勧めしますいくつか追加するとすぐに混乱するPublicKey = [クライアント公開キー]AllowedIPs = 10.125.37.20/32

ここで注意すべき重要な点は、ピア ファイル内のサブネットは、そのピアを介してルーティングできるすべての IP アドレスを参照するため、ピアに IP アドレスが 1 つしかない場合は、どのサブネットに関係なく、/32 として入力する必要があることです。ピアは自分自身がオンであると信じています。サイト間 VPN を構成する場合は、ここで範囲を指定し、トンネルの両端で IP 転送を有効にします。

ここで、クライアント上の wg0.conf ファイルを編集して、サーバーについて通知します。

[インターフェイス]アドレス = 10.125.37.20/24ListenPort = 51845PrivateKey = [クライアント秘密キー]DNS = 10.100.4.20[ピア] #serverEndpoint = Wireguard.mydomain.com:51845PublicKey = [サーバー公開キー]AllowedIPs = 0.0.0.0/0

クライアントが接続を開始するので、エンドポイントを設定する必要があります。これは単なる IP アドレスでも構いませんが、ホーム ネットワーク上に動的 IP アドレスがある可能性が高いため、最良の選択肢は動的 DNS を設定し、ホスト名をエンドポイントとして使用することです。エンドポイントが NAT の背後にある場合 (おそらく NAT である可能性があります)、ポート 51845 で WireGuard サーバーに接続を送信するようにゲートウェイでポート転送を設定してください。

さらに、クライアントのAllowedIPが単一のホストではないことがわかります。これは、トンネル経由で複数の IP をルーティングしたいためです。この場合、すべてのトラフィックをトンネル経由でルーティングしますが、カンマ区切りリストを入力して特定のネットワークのみを指定することもできます (例: 192.168.20.0/24,10.100.4.0/24,10.125.37.20/24)。特定のネットワークのみをトンネル経由でルーティングしたい場合は、トンネル エンドポイントが含まれているネットワークがリストに含まれていることを確認してください。そうでないと機能しません。この場合、これは 10.125.37.20/24 です。

接続のテスト

すべてが計画どおりに進んでいる場合は、接続が正しく構成されているはずです。サーバーで次のコマンドを実行し、次にクライアントで次のコマンドを実行することで、両端でインターフェイスを起動できます。

sudo wg-クイックアップ wg0

クライアントまたはサーバーで wg show を実行すると、次のような内容が表示されるはずです。

インターフェイス: wg0 公開キー: WMZmhRHmrIQSJ+szXnuhtnH9twSA+6YJe7ADluXyq3E= 秘密キー: (非表示) リスニング ポート: 51845 fwmark: 0xca6cpeer: ljDbmpp6GLMigE19i4gRqzypnQ29ptZT91N0Lyt3pBg= エンドポイント: Wireguard.mydo main.com:51845 許可された IPS: 0.0.0.0/0 転送: 0 B を受信しました、888 B が送信されました

ここでサーバーに ping を実行すると、応答が得られ、wg show の転送統計が増加していることがわかります。また、トンネル経由で LAN 側のネットワーク リソースにアクセスできるはずです。すべてが計画どおりに進んでいると仮定すると、信頼できないネットワークから接続するときにデータを保護し、ホーム ネットワーク上のリソースにアクセスできる VPN が完成しました。

WireGuard をサービスとして実行する

wg-quick には systemd サービスが組み込まれており、次のコマンドを実行することで、起動時に WireGuard が開始するように簡単に設定できます。

systemctl を有効にする wg-quick@wg0.service

インターフェイスを wg0 以外の名前で呼んでいる場合は、それに応じてサービス名を調整してください

WireGuard VPN を使用してどこからでもホーム ネットワークにアクセス - David's Homelab (2024)
Top Articles
Latest Posts
Article information

Author: Msgr. Benton Quitzon

Last Updated:

Views: 6121

Rating: 4.2 / 5 (63 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Msgr. Benton Quitzon

Birthday: 2001-08-13

Address: 96487 Kris Cliff, Teresiafurt, WI 95201

Phone: +9418513585781

Job: Senior Designer

Hobby: Calligraphy, Rowing, Vacation, Geocaching, Web surfing, Electronics, Electronics

Introduction: My name is Msgr. Benton Quitzon, I am a comfortable, charming, thankful, happy, adventurous, handsome, precious person who loves writing and wants to share my knowledge and understanding with you.