wgコマンドのドキュメントを読む会

wgコマンドのドキュメントを読みます。

## 0.0 環境
Vietual Box 6.1.24
Rocky 8.5
wireguard-tools-1.0.20210914-1

## 1.1 man 8 wg
```terminal:概要
NAME
       wg - set and retrieve configuration of WireGuard interfaces
```
>WireGuard インターフェースのコンフィグを設定、取得する。

```terminal:説明
DESCRIPTION
       wg is the configuration utility for getting and setting the configuration of WireGuard tunnel interfaces. The interfaces themselves can be added and removed using ip-link(8) and
       their IP addresses and routing tables can be set using ip-address(8) and ip-route(8).  The wg utility provides a series of sub-commands for changing  WireGuard-specific  aspects
       of WireGuard interfaces.

       If no COMMAND is specified, COMMAND defaults to show.  Sub-commands that take an INTERFACE must be passed a WireGuard interface.
```
>wg は、WireGuard トンネルインターフェイスの構成を取得し、設定するためのコンフィギュレーションユーティリティです。<br>
インタフェース自体は ip-link(8) を使って追加と削除ができ、それらの IP アドレスとルーティングテーブルは ip-address(8) と ip-route(8) を使って設定することができます。<br>
wg ユーティリティは、WireGuard インターフェイスの WireGuard 固有の側面を変更するための一連のサブコマンドを提供します。

```terminal:サブコマンド「show」
       show  {  <interface>  |  all | interfaces } [public-key | private-key | listen-port | fwmark | peers | preshared-keys | endpoints | allowed-ips | latest-handshakes | persistent-
       keepalive | transfer | dump]
              Shows current WireGuard configuration and runtime information of specified <interface>.  If no <interface> is specified, <interface> defaults to all.   If  interfaces  is
              specified,  prints  a  list  of  all  WireGuard  interfaces, one per line, and quits. If no options are given after the interface specification, then prints a list of all
              attributes in a visually pleasing way meant for the terminal. Otherwise, prints specified information grouped by newlines and tabs, meant to be used in scripts. For  this
              script-friendly  display,  if all is specified, then the first field for all categories of information is the interface name. If dump is specified, then several lines are
              printed; the first contains in order separated by tab: private-key, public-key, listen-port, fwmark. Subsequent lines are printed for each peer and contain in order sepa‐
              rated by tab: public-key, preshared-key, endpoint, allowed-ips, latest-handshake, transfer-rx, transfer-tx, persistent-keepalive.
```
>　指定した<interface>の現在のWireGuard構成とランタイム情報を表示します。
　<interface> が指定されない場合、<interface> は all をデフォルトとします。
　interfaces が指定された場合、すべての WireGuard インターフェイスのリストを1行ごとに表示して終了します。
　インタフェース指定の後にオプションが与えられない場合、端末用に視覚的に美しい方法で、すべての属性のリストを表示する。
　そうでない場合は、指定された情報を改行とタブでグループ化し、スクリプトで使用できるように表示する。
　このスクリプトに適した表示では、all が指定された場合、すべてのカテゴリの情報の最初のフィールドはインタフェース名となる。
　最初の行は、プライベートキー、パブリックキー、リスンポート、fwmark の順にタブで区切られて表示されます。
　次の行は、各ピアについて印刷され、タブで区切られた順に、公開鍵、事前共有鍵、終点、許可IP、最新のハンドシェイク、転送RX、転送TX、持続的キープアライブを含んでいます。

```terminal:サブコマンド「showconf」
       showconf <interface>
              Shows the current configuration of <interface> in the format described by CONFIGURATION FILE FORMAT below.
```
>インタフェースの現在のコンフィグレーションを、CONFIGURATION FILE FORMAT で説明されているフォーマットで表示します。

```terminal:サブコマンド「set」
       set  <interface>  [listen-port <port>] [fwmark <fwmark>] [private-key <file-path>] [peer <base64-public-key> [remove] [preshared-key <file-path>] [endpoint <ip>:<port>] [persis‐
       tent-keepalive <interval seconds>] [allowed-ips <ip1>/<cidr1>[,<ip2>/<cidr2>]...] ]...
              Sets configuration values for the specified <interface>. Multiple peers may be specified, and if the remove argument is given for a peer, that peer is removed,  not  con‐
              figured.  If  listen-port  is  not specified, or set to 0, the port will be chosen randomly when the interface comes up. Both private-key and preshared-key must be files,
              because command line arguments are not considered private on most systems but if you are using bash(1), you may safely pass in a string by specifying  as  private-key  or
              preshared-key  the  expression: <(echo PRIVATEKEYSTRING). If /dev/null or another empty file is specified as the filename for either private-key or preshared-key, the key
              is removed from the device. The use of preshared-key is optional, and may be omitted; it adds an additional layer of symmetric-key  cryptography  to  be  mixed  into  the
              already  existing  public-key cryptography, for post-quantum resistance.  If allowed-ips is specified, but the value is the empty string, all allowed ips are removed from
              the peer. The use of persistent-keepalive is optional and is by default off; setting it to 0 or "off" disables it.  Otherwise it represents, in  seconds,  between  1  and
              65535  inclusive, how often to send an authenticated empty packet to the peer, for the purpose of keeping a stateful firewall or NAT mapping valid persistently. For exam‐
              ple, if the interface very rarely sends traffic, but it might at anytime receive traffic from a peer, and it is behind NAT, the interface might benefit from having a per‐
              sistent  keepalive  interval of 25 seconds; however, most users will not need this. The use of fwmark is optional and is by default off; setting it to 0 or "off" disables
              it. Otherwise it is a 32-bit fwmark for outgoing packets and may be specified in hexadecimal by prepending "0x".
```
>　指定された<interface>のコンフィグレーション値を設定する。複数のピアを指定でき，remove 引数を指定した場合，そのピアは削除され，設定されない。
　listen-port が指定されないか、または 0 に設定された場合、インターフェイスの立ち上げ時にポートがランダムに選択されます。
　コマンドライン引数はほとんどのシステムでプライベートとはみなされないため、private-key と preshared-key の両方がファイルでなければなりませんが、 bash(1) を使用している場合は、private-key または preshared-key として式を指定することにより、安全に文字列で渡すことができます。<(echo PRIVATEKEYSTRING).
　private-key または preshared-key のファイル名として /dev/null または他の空のファイルが指定された場合、鍵はデバイスから削除されます。
　preshared-keyの使用はオプションであり、省略可能である。これは、ポスト量子抵抗のために、すでに存在する公開鍵暗号に混合する対称鍵暗号の追加のレイヤーを追加するものである。
　allowed-ips が指定され、その値が空文字列である場合、許可されたすべての ips がピアから削除されます。
　persistent-keepalive の使用はオプションで、デフォルトでは off になっています。
　それ以外の場合は、ステートフルファイアウォールまたはNATマッピングを持続的に有効に保つ目的で、認証済み空パケットをピアに送信する頻度を、1～65535の間で秒単位で表します。
　たとえば、インターフェイスがトラフィックを送ることはほとんどないが、ピアからのトラフィックをいつでも受け取る可能性があり、それが NAT の背後にある場合、インターフェイスは 25 秒の持続的な keepalive 間隔を持つことが有益かもしれません。
　fwmark の使用は任意であり、デフォルトでは off です; 0 または "off" に設定すると無効になります。
　それ以外の場合、それは発信パケットのための32ビットのfwmarkであり、"0x "を先頭につけることによって16進数で指定することができる。

```terminal:サブコマンド「setconf」
       setconf <interface> <configuration-filename>
              Sets the current configuration of <interface> to the contents of <configuration-filename>, which must be in the format described by CONFIGURATION FILE FORMAT below.
```
>インタフェースの現在のコンフィグレーションを <configuration-filename> の内容に設定する。この内容は、以下の CONFIGURATION FILE FORMAT で説明するフォーマットである必要がある。


```terminal:サブコマンド「addconf 」
       addconf <interface> <configuration-filename>
              Appends the contents of <configuration-filename>, which must be in the format described by CONFIGURATION FILE FORMAT below, to the current configuration of <interface>.
```
>インタフェースの現在のコンフィグレーションに <configuration-filename> の内容を追加する（下記の CONFIGURATION FILE FORMAT で説明されている形式である必要がある）。

```terminal:サブコマンド「syncconf」
       syncconf <interface> <configuration-filename>
              Like setconf, but reads back the existing configuration first and only makes changes that are explicitly different between the configuration file and the interface.  This
              is much less efficient than setconf, but has the benefit of not disrupting current peer sessions. The contents of <configuration-filename> must be in the format described
              by CONFIGURATION FILE FORMAT below.
```
>　setconf と同様ですが、まず既存の設定を読み戻し、設定ファイルとインターフェイスの間で明示的に異なる変更のみを行います。
　これは setconf よりもはるかに効率的ではありませんが、現在のピアセッションを中断させないという利点があります。
　<configuration-filename> の内容は、以下の CONFIGURATION FILE FORMAT で説明されている形式でなければなりません。

```terminal:サブコマンド「genkey」
       genkey Generates a random private key in base64 and prints it to standard output.
```
>ランダムな秘密鍵をbase64で生成し、標準出力に表示します。
>>teeコマンドなどでファイルに保存しておくといいです

```terminal:サブコマンド「genpsk」
       genpsk Generates a random preshared key in base64 and prints it to standard output.
```
>ランダムな事前共有鍵をbase64で生成し、標準出力に表示します。
>>teeコマンドなどでファイルに保存しておくといいです

```terminal:サブコマンド「pubkey」
       pubkey Calculates a public key and prints it in base64 to standard output from a corresponding private key (generated with genkey) given in base64 on standard input.

              A private key and a corresponding public key may be generated at once by calling:
                  $ umask 077
                  $ wg genkey | tee private.key | wg pubkey > public.key
```
>　標準入力に base64 で与えられた対応する秘密鍵（genkey で生成）から、公開鍵を計算し、標準出力に base64 で出力します。
　秘密鍵とそれに対応する公開鍵は、呼び出しによって一度に生成することができます。
>>teeコマンドなどでファイルに保存しておくといいです

```terminal:サブコマンド「help」
       help   Shows usage message.
```
>ヘルプを表示します

```terminal:CONFIGURATION FILE FORMAT(設定ファイルフォーマット)
CONFIGURATION FILE FORMAT
       The configuration file format is based on INI. There are two top level sections -- Interface and Peer. Multiple Peer sections may be specified, but only  one  Interface  section
       may be specified.

       The Interface section may contain the following fields:

       ・      PrivateKey ― a base64 private key generated by wg genkey. Required.

       ・      ListenPort ― a 16-bit port for listening. Optional; if not specified, chosen randomly.

       ・      FwMark ― a 32-bit fwmark for outgoing packets. If set to 0 or "off", this option is disabled. May be specified in hexadecimal by prepending "0x". Optional.

       The Peer sections may contain the following fields:

       ・      PublicKey ― a base64 public key calculated by wg pubkey from a private key, and usually transmitted out of band to the author of the configuration file. Required.

       ・      PresharedKey ― a base64 preshared key generated by wg genpsk. Optional, and may be omitted. This option adds an additional layer of symmetric-key cryptography to be mixed
              into the already existing public-key cryptography, for post-quantum resistance.

       ・      AllowedIPs ― a comma-separated list of IP (v4 or v6) addresses with CIDR masks from which incoming traffic for this peer is allowed and to which outgoing traffic for this
              peer  is  directed.  The catch-all 0.0.0.0/0 may be specified for matching all IPv4 addresses, and ::/0 may be specified for matching all IPv6 addresses. May be specified
              multiple times.

       ・      Endpoint ― an endpoint IP or hostname, followed by a colon, and then a port number. This endpoint will be updated automatically to the most recent source IP  address  and
              port of correctly authenticated packets from the peer.  Optional.

       ・      PersistentKeepalive  ―  a  seconds  interval,  between  1 and 65535 inclusive, of how often to send an authenticated empty packet to the peer for the purpose of keeping a
              stateful firewall or NAT mapping valid persistently. For example, if the interface very rarely sends traffic, but it might at anytime receive traffic from a peer, and  it
              is  behind  NAT,  the interface might benefit from having a persistent keepalive interval of 25 seconds. If set to 0 or "off", this option is disabled. By default or when
              unspecified, this option is off. Most users will not need this. Optional.
```
>　設定ファイルの形式はINIがベースになっています。トップレベルのセクションは、InterfaceとPeerの2つである。Peerセクションは複数指定可能ですが、Interfaceセクションは1つしか指定できません。<br>
　Interfaceセクションは、以下のフィールドを含むことができます。
　・PrivateKey - wg genkeyによって生成されたbase64の秘密鍵。必須です。
　・ListenPort - 待ち受け用の16ビットポート。省略可能。指定しない場合はランダムに選択されます。
　・FwMark - 発信パケット用の32ビットFwmarkです。0 または "off" に設定すると、このオプションは無効になる。先頭に "0x" を付けることで16進数で指定することができる。オプションで指定します。<br>
　Peerセクションは以下のフィールドを含むことができます。
　・PublicKey - 秘密鍵からwg pubkeyによって計算されたbase64の公開鍵で、通常は設定ファイルの作者に帯域外で送信されます。必須です。
　・PresharedKey - wg genpskによって生成されたbase64の事前共有キー。
　　オプションで、省略することもできます。
　　このオプションは、ポスト量子抵抗のために、すでに存在する公開鍵暗号に混合される対称鍵暗号の追加レイヤーを追加します。
　・AllowedIPs - このピアの受信トラフィックが許可され、このピアの送信トラフィックが指示される CIDR マスク付きの IP (v4 または v6) アドレスのカンマ区切り一覧です。
　　すべての IPv4 アドレスに一致させるためにキャッチオール 0.0.0.0/0 を指定することができ、すべての IPv6 アドレスに一致させるために ::/0 を指定することができま す。
　　複数回指定することができます。
　・Endpoint - エンドポイントの IP またはホスト名、その後にコロン、さらにポート番号の順に指定します。
　　このエンドポイントは、ピアからの正しく認証されたパケットの最新の送信元 IP アドレスとポートに自動的に更新されます。
　　オプションです。
　・PersistentKeepalive - 1 から 65535 までの秒数で、ステートフルファイアウォールや NAT マッピングを持続的に有効にしておくために、認証済みの空のパケットをピアに送信する頻度を指定します。
　　たとえば、インターフェイスがトラフィックをほとんど送信しないが、いつでもピアからトラフィックを受信する可能性があり、NAT の背後にある場合、インターフェイスは 25 秒の持続的なキープアライブ間隔を持つことが有益であるかもしれません。0 または "off" に設定された場合、このオプションは無効になります。
　　デフォルトまたは未指定の場合、このオプションはオフになっています。ほとんどのユーザーはこれを必要としないでしょう。
　　オプションです。

```terminal:CONFIGURATION FILE FORMAT EXAMPLE(設定ファイルフォーマットの例)
CONFIGURATION FILE FORMAT EXAMPLE
       This example may be used as a model for writing configuration files, following an INI-like syntax. Characters after and including a '#' are  considered  comments  and  are  thus
       ignored.

           [Interface]
           PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
           ListenPort = 51820

           [Peer]
           PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
           Endpoint = 192.95.5.67:1234
           AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

           [Peer]
           PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
           Endpoint = [2607:5300:60:6b0::c05f:543]:2468
           AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

           [Peer]
           PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
           Endpoint = test.wireguard.com:18981
           AllowedIPs = 10.10.10.230/32
```
>この例は、INIのような構文で設定ファイルを書く場合のモデルとして使用することができます。
「#」を含む文字はコメントとみなされ、無視されます。

```terminal:DEBUGGING INFORMATION(デバッグ情報)
DEBUGGING INFORMATION
       Sometimes  it  is  useful to have information on the current runtime state of a tunnel. When using the Linux kernel module on a kernel that supports dynamic debugging, debugging
       information can be written into dmesg(1) by running as root:

           # modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

       On OpenBSD and FreeBSD, debugging information can be written into dmesg(1) on a per-interface basis by using ifconfig(1):

           # ifconfig wg0 debug

       On userspace implementations, it is customary to set the LOG_LEVEL environment variable to verbose.
```
>トンネルの現在の実行状態に関する情報があると便利なことがあります。
ダイナミックデバッグをサポートするカーネル上でLinuxカーネルモジュールを使用する場合、デバッグ情報を dmesg(1) に書き込むことができます。
　# modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control
OpenBSD と FreeBSD では、 ifconfig(1) を使って、デバッグ情報をインターフェース単位で dmesg(1) に書き込むことができます。
　# ifconfig wg0 debug
ユーザー空間の実装では、環境変数LOG_LEVELをverboseに設定するのが通例です。

```terminal:ENVIRONMENT VARIABLES(環境変数)
ENVIRONMENT VARIABLES
       WG_COLOR_MODE
              If set to always, always print ANSI colorized output. If set to never, never print ANSI colorized output. If set to auto, something invalid, or  unset,  then  print  ANSI
              colorized output only when writing to a TTY.

       WG_HIDE_KEYS
              If set to never, then the pretty-printing show sub-command will show private and preshared keys in the output. If set to always, something invalid, or unset, then private
              and preshared keys will be printed as "(hidden)".

       WG_ENDPOINT_RESOLUTION_RETRIES
              If set to an integer or to infinity, DNS resolution for each peer's endpoint will be retried that many times for non-permanent errors, with an  increasing  delay  between
              retries. If unset, the default is 15 retries.
```
>WG_COLOR_MODE
　alwaysに設定すると、常にANSIカラー化された出力をします。
　never に設定された場合、ANSI カラー化された出力は印刷されません。
　auto、何か無効なもの、または未設定の場合、TTYに書き込むときだけ、ANSIカラー化出力を印刷します。
WG_HIDE_KEYS
　neverに設定すると、pretty-printing showサブコマンドの出力に秘密鍵と事前共有鍵が表示されます。
　alwaysに設定された場合、何か無効なもの、または未設定の場合、秘密鍵と事前共有鍵は"(hidden) "として出力されます。
WG_ENDPOINT_RESOLUTION_RETRIES
　整数または無限大に設定すると、各ピアのエンドポイントに対するDNS解決は、非永続的なエラーに対してその回数だけ再試行され、再試行間の遅延が増加します。
　未設定の場合、デフォルトは15回です。