機械翻訳について

第2章 WireGuardを使用したVPNの構成

WireGuardは、シンプルで高速な、最新の暗号化の実装によってセキュアなVPN設定を作成できるクロス・プラットフォーム・テクノロジです。

ノート

WireGuardは、Unbreakable Enterprise Kernelリリース6更新3以降でサポートされています。 この章のステップに進む前に、使用しているシステムがこのリリースにアップグレードされていることを確認してください。 詳細は、Unbreakable Enterprise Kernel: Unbreakable Enterprise Kernelリリース6更新3のリリース・ノートを参照してください。

2.1 WireGuardのインストール

WireGuardを使用してVPNを構成するには、次のコマンドを使用してパッケージをダウンロードします:

sudo dnf install -y wireguard-tools

サーバーとそのすべてのクライアントにWireGuardをインストールする必要があります。

2.2 WireGuardの構成

簡略化のために、次のセクションでは、例として2つのホストを使用してWireGuardをデプロイする方法について説明します。 一方のホストはVPNサーバーとして機能し、もう一方のホストはクライアントです。

WireGuardを使用するには、次の要件が必要です:

  • 両方のホストのIPアドレス。 この情報を取得するには、ip addr shコマンドを使用します。 後続の手順では、サーバーとクライアントのIPアドレスはそれぞれ10.0.0.1および10.0.0.2です

  • 両方のホストのWireGuardインタフェースに割り当てられるプライベートIPアドレス。 後続の手順では、サーバーとクライアントのプライベートIPアドレスはそれぞれ192.168.2.1および192.168.2.2です。

  • WireGuardインタフェースの名前。 後続の手順では、サーバーとクライアントの両方のWireguardインタフェース名はwg0です。

  • クライアントへのコンソール接続。

    コンソール接続の設定手順は、このドキュメントの範囲外です。 リモート接続にVNCサーバーを使用するには、https://docs.oracle.com/en/learn/install-vnc-oracle-linux/#introductionを参照してください。 Oracle Cloud Infrastructureでインスタンスを使用している場合は、https://docs.oracle.com/iaas/Content/Compute/References/serialconsole.htm#Instance_Console_Connectionsを参照してください。

サーバー

  1. 次の変更で/etc/sysctl.confファイルを編集します:

    net.ipv4.ip_forward = 1
  2. sysctlコマンドを実行して、/etc/sysctl.confファイルを再度読み取ります。

    sudo sysctl -p

    statを実行できないコマンドに関して表示されるエラー・メッセージは無視できます。

  3. WireGuardキー・ペアを格納できるディレクトリを作成します。次に例を示します:

    mkdir ~/.wireguard
    cd ~/.wireguard
    umask 077
  4. 作成したディレクトリで、WireGuard暗号化キー・ペアを生成します。

    サーバーの秘密キーと公開キーを格納するファイルの任意の別名を指定できます。

    wg genkey | tee privatekey | wg pubkey > publickey
  5. サーバーの秘密キーと公開キーを取得し、それらを一時ストレージに格納します。

    cat ~/.wireguard/privatekey
    cat ~/.wireguard/publickey

クライアント

  1. WireGuardキー・ペアを格納できるディレクトリを作成します。次に例を示します:

    mkdir ~/.wireguard
    cd ~/.wireguard
    umask 077
  2. 作成したディレクトリで、WireGuard暗号化キー・ペアを生成します。

    クライアントの秘密キーと公開キーを格納するファイルの任意の別名を指定できます。

    wg genkey | tee privatekey | wg pubkey > publickey
  3. クライアントの秘密キーと公開キーを取得し、一時ストレージに格納します。

    cat ~/.wireguard/privatekey
    cat ~/.wireguard/publickey
  4. /etc/wireguard/wg0.confファイルを編集して、次を含めます:

    [Interface]
    Address = 192.168.2.2/24
    SaveConfig = true
    ListenPort = 60477
    PrivateKey = client's private key
    
    [Peer]
    PublicKey = server's public key
    AllowedIPs = 0.0.0.0/0, ::/0
    Endpoint = 10.0.0.1:51820

サーバー

  1. /etc/wireguard/wg0.confファイルを編集して、次を含めます:

    [Interface]
    Address = 192.168.2.1/24
    SaveConfig = true
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE
    ListenPort = 51820
    PrivateKey = server's private key
    [Peer]
    PublicKey = client's public key
    AllowedIPs = 192.168.2.2/32
    Endpoint = 10.0.0.2:60477
    ノート

    例のPostUpおよびPostDown行で、サーバー・インタフェース名はeno1です。 同じ行にサーバーの正しいインタフェース名を指定してください。 サーバーのIPインタフェースを表示するには、ip addr shコマンドを実行します。

2.3 WireGuardトンネルの有効化

  1. サーバーのトンネルを起動します。

    wg-quick up wg0
    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip link set mtu 1420 up dev wg0
    [#] ip -4 route add 192.168.2.2/32 dev wg0
    [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING
     -o eno1 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables 
    -t nat -A POSTROUTING -o eno1 -j MASQUERADE
  2. サーバーのトンネルのステータスを確認します。

    sudo wg
    interface: wg0
       public key: server's public key
       private key: (hidden)
       listening port: 51820
    
    peer: client public's key
      endpoint: 10.0.0.2:60477
      allowed ips: 192.168.2.2/32
  3. 別の端末ウィンドウで、コンソール接続を使用してクライアントにログインします。

    これ以降、すべてのネットワーク・トラフィックがトンネルを経由してルーティングされます。 現在SSHを介してクライアントにログインし、トンネルを起動するコマンドを発行している場合、その接続は失われます。 クライアントに再接続できるのは、コンソール接続を介してのみです。

  4. クライアントでトンネルを開始します。

    wg-quick up wg0
    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 192.168.2.2/24 dev wg0
    [#] ip link set mtu 1420 up dev wg0
    [#] ip -6 route add ::/0 dev wg0 table 51820
    [#] ip -6 rule add not fwmark 51820 table 51820
    [#] ip -6 rule add table main suppress_prefixlength 0
    [#] ip6tables-restore -n
    [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
    [#] ip -4 rule add not fwmark 51820 table 51820
    [#] ip -4 rule add table main suppress_prefixlength 0
    [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
    [#] iptables-restore -n
  5. クライアントのステータスを確認します。

    sudo wg
    interface: wg0
       public key: client's public key
       private key: (hidden)
       listening port: 60477
       fwmark: 0xca6c
    
    peer: server public's key
      endpoint: 10.0.0.1:51820
      allowed ips: 0.0.0.0/0, ::/0

他のコマンドを使用して、ip addr ship linkなどのトンネル情報を確認できます。次に例を示します:

ip addr sh
...
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8920 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 192.168.2.1/24 scope global wg0
       valid_lft forever preferred_lft forever

ip link
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8920 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none

2.4 WireGuardトンネルのテスト

クライアントで、pingコマンドを使用してWireGuardサーバーとの通信を確認します。次に例を示します:

ping -c 3 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.640 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.707 ms
64 bytes from 192.168.2.1: icmp_seq=4 ttl=64 time=0.643 ms

--- 192.168.2.1 ping statistics ---
3 packets transmitted, 4 received, 0% packet loss, time 2088ms
rtt min/avg/max/mdev = 0.643/0.690/0.713/0.038 ms

同様に、wgコマンドは、次の例に示すように、WireGuardトンネルへの接続が確立されているかどうかを示します:

sudo wg
interface: wg0
  public key: client's public key
  private key: (hidden)
  listening port: 60477
  fwmark: 0xca6c

peer: server's public key
  endpoint: 10.0.0.1:51820
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 44 seconds ago
  transfer: 28.22 KiB received, 48.64 KiB sent
  

handshakeおよびtransfer出力は、チューニングされた接続のトラフィックを示します。

サーバーとクライアント間の通信を確立できない場合は、ファイアウォールがWireGuardに設定されているポートへのアクセスをブロックしているかどうかを確認します。 サーバーとクライアントの両方をリンクするには、ポートを開く必要がある場合があります。 たとえば、サーバーに次のコマンドを入力します:

sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload

2.5 WireGuardトンネルの停止

WireGuardトンネルを停止するには、サーバーおよびクライアントの両方で次のコマンドを入力します。

wg-quick down wireguard-interface

停止後に、以前に提供されていたコマンドのいずれかを使用して、トンネルのステータスをオプションでチェックできます: wgip addrまたはip link