備忘録的なもの

nmcli を用いた WireGuard の設定

自宅用 VPN として WireGuard のセットアップを行った。

最近図書館によく行くようになってそこのフリー Wi-Fi をよく使っているのだが、 「フリー Wi-Fi 使うなら VPN とか使った方が良いのかな」とぼんやり考えていた。 で、最初は OpenVPN で組もうかなと思い軽く下調べをしていたのだが、 その中で WireGuard というのがあるのを認識して触ってみたくなり組んだ。 (動機としては触ってみたかったの方がメインかも知れない)

ひとまず無事動いたのでやったことをまとめる。

WireGuard について

今回は設定作業に重点を置きたいので、公式サイトのトップページに書いている内容を軽くまとめる程度に留める。 (もう少し勉強してから別途まとめたい)

公式サイト: WireGuard: fast, modern, secure VPN tunnel

WireGuard は既存の VPN と比べて高速かつシンプルであることを目指して開発されていて、売りとしては以下のようなモノ。

  • 簡単に設定・導入できる(SSH の鍵交換認証で接続するのと同じくらい)
  • 通信は専用のインタフェースを用いて透過的に行われる
  • 最先端の暗号技術(暗号化方式やセキュアな設計)を採用している
  • 少ないコードで実装されていて監査が容易なため、脆弱性が入り込みにくい
  • 高速な暗号技術と Linux カーネル上で動作することにより、高速に動作する

複雑化・肥大化してしまった OpenVPN や IPSec といった既存の VPN 技術を代替する、というのを目標にしているっぽい。

Linux カーネルではバージョン 5.6 からサポート対象になっていて、 今はクロスプラットフォームでの実装も進んでいる。

全体図

今回の設定の全体イメージとしては以下のような感じ。

全体図

通信について補足すると、

  • ルータのポートフォワードを使って、サーバの 51820/udp ( WireGuard 用ポート)をインターネットに公開する
  • デスクトップPC・ノートPC・スマートフォンは、すべてのパケットを一旦サーバを経由してさせてから改めてインターネットに出る
    • サーバに WireGuard ネットワーク内でのデフォルトゲートウェイの様な働きをさせる
    • デスクトップPC は実際には WireGuard 接続使う予定は無い(今回の作業のために設定する)

という感じ。

設定作業

本題の設定作業についてまとめる。

最初にやることをざっくりまとめておくと、以下のような流れで作業していく。

  • WireGuard インタフェースの作成
    • WireGuard は専用の仮想インタフェースを使って通信するため、これを作成する
  • WireGuard Peer の設定
    • WireGuard サーバ・クライアントそれぞれで、作成した WireGuard インタフェースを介して通信する相手を登録する 1
  • サーバでの転送設定
    • クライアントから送られたインターネット宛パケットをサーバ側で適切に中継するための設定を行う
  • ルータでのポートフォワード設定
    • インターネットから WireGuard サーバと通信できる様にするために、ルータでのポートフォワード設定を行う
  • 接続確認
    • ノート PC を WireGuard クライアントとして設定して、インターネット(スマートフォンでのテザリング)経由で WireGuard 接続で通信できることを確認する

最後にインターネットからアクセスできる様にはするが、 そこまでは同じネットワークにあるマシン(全体図でのデスクトップPC)をクライアントとして各種設定・疎通確認をしつつ進める。

WireGuard インタフェースの作成

まずは WireGuard 用の仮想インタフェースを作成する。

WireGuard インタフェースを作成する方法としては ipnmcliwg-quick 等色々あるのだが、 自分のマシンはネットワーク管理を NetworkManager 経由で行っているというのもあり nmcli で行うことにした。

鍵の生成や設定確認等で wg というコマンドを使うので以下でインストールしておく。

# インストール( Arch Linux の場合)
$ sudo pacman -S wireguard-tools

サーバ側設定

サーバ側で以下コマンドでインタフェースを作成する。

# WireGuard 用の仮想インタフェース wg0 の作成、設定
$ sudo nmcli connection add type wireguard con-name wireguard-server ifname wg0 autoconnect no
$ sudo nmcli connection modify wireguard-server ipv4.method manual ipv4.address 10.0.0.1/24
$ sudo nmcli connection modify wireguard-server wireguard.private-key `wg genkey`
$ sudo nmcli connection modify wireguard-server wireguard.listen-port 51820

# コネクションの自動起動を有効にする(このタイミングで一緒に up される)
$ sudo nmcli connection modify wireguard-server autoconnect yes

# WireGuard インタフェース ( wg0 ) が有効( STATE = connected )になったことを確認
$ nmcli device status

クライアント側設定

次にクライアント側でも以下コマンドでインターフェースを作成する。 サーバ側とやっていることは概ね一緒だが違うところとしては以下。

  • クライアント側は VPN の有効/無効を手動で切り替えたいため、 autoconnect を no にしている
  • WireGuard ネットワークで使うアドレスは当然だが違う
  • NetworkManager のコネクション名も一応変えている
# WireGuard 用の仮想インタフェース wg0 の作成、設定
$ sudo nmcli connection add type wireguard con-name wireguard-client ifname wg0 autoconnect no
$ sudo nmcli connection modify wireguard-client ipv4.method manual ipv4.address 10.0.0.2/24
$ sudo nmcli connection modify wireguard-client wireguard.private-key `wg genkey`
$ sudo nmcli connection modify wireguard-client wireguard.listen-port 51820

# コネクションを手動で up する
$ sudo nmcli connection up wireguard-client

# WireGuard インタフェース ( wg0 ) が有効( STATE = connected )になったことを確認
$ nmcli device status

WireGuard Peer の設定

WireGuard インタフェースは有効になったが、 まだサーバ、クライアント間での通信はできないため、お互いを Peer として登録して通信できる様にする。

作業としては、

  • クライアント側の WireGuard 公開鍵を確認して、サーバ側の Peer 設定に追加
  • サーバ側の WireGuard 公開鍵を確認して、クライアント側の Peer 設定に追加

サーバ側設定

まずはサーバ側に Peer 相手としてクライアントを登録するが、そのためにクライアント側の WireGuard 公開鍵を確認する。

# クライアント側の WireGuard 公開鍵の値を取得
$ sudo wg show wg0 public-key
cCemX4jMbyI5TkWcxn8M9XUhpPzAGgpp3/xdRXJR1AE=

このクライアント側の公開鍵の値を元に、サーバ側の NetworkManager のコネクション設定に追加する。 ただ先の WireGuard インタフェースの設定と違い nmcli コマンドが対象プロパティに対応していないため、 適当なエディタなりで設定ファイルに直接追記する必要がある。

$ sudo vim /etc/NetworkManager/system-connections/wireguard-server.nmconnection
# ----- ここから
[wireguard-peer.cCemX4jMbyI5TkWcxn8M9XUhpPzAGgpp3/xdRXJR1AE=]
allowed-ips=10.0.0.2/32;
# ----- ここまで

設定の補足としては以下

  • allowed-ips
    • WireGuard インタフェースを使って通信するアドレスを指定する
    • サーバ側では Peer 相手の WireGuard インタフェースのアドレスを /32 で指定する。

追記が済んだら WireGuard インタフェースの設定に反映する。

# 追記した内容をコネクションに反映させる
$ sudo nmcli connection load /etc/NetworkManager/system-connections/wireguard-server.nmconnection
$ sudo nmcli connection up wireguard-server

# peer 設定が追加されたことを確認する
$ sudo wg show

クライアント側設定

同様にクライアント側の Peer 相手としてサーバを登録するため、サーバ側の WireGuard 公開鍵を確認する。

❯ sudo wg show wg0 public-key
aaX+7NP+w93BL08NyiazchFwUKmEaLFMQLhpBdhK1Ak=

クライアント側の NetworkManager のコネクション設定に Peer を追加する。

$ sudo nvim /etc/NetworkManager/system-connections/wireguard-client.nmconnection
# ----- ここから
[wireguard-peer.aaX+7NP+w93BL08NyiazchFwUKmEaLFMQLhpBdhK1Ak=]
endpoint = 192.168.2.15:51820
allowed-ips=0.0.0.0/0;
persistent-keepalive=25
# ----- ここまで

サーバ側で設定したものより若干パラメータが多く値も違うが、理由としては以下。

  • endpoint
    • クライアントからアクセス可能な Peer のアドレスと WireGuard が Listen しているポート
      • 今回の使い方では常にクライアント側から WireGuard の通信を開始するため、クライアント側がサーバ側のアドレスを知っておく必要がある
    • 一旦ローカルネットワーク内での通信確認をしたいため、ローカルネットワークのアドレスにしている
      • 最終的にはインターネット越しにアクセスするので、後の方で修正する
    • ドメイン名でアクセス可能ならドメイン名でも可
  • allowed-ips
    • クライアントはサーバと違いすべての通信をこの WireGuard Peer (サーバ)経由にしたいので 0.0.0.0/0
  • persistent-keepalive
    • NAT 下で WireGuard 通信を行う場合に使い、空パケットを送る間隔を単位で指定する
      • 一定時間通信がない場合に NAT マッピングから消されたり、ステートフルファイアウォールの設定によっては遮断されたりする可能性があるため
    • man を見る限り、設定する場合は 25 秒がひとつの目安になりそうなので今回はそれを使う

サーバでやったのと同様に、 WireGuard インタフェースの設定に反映させる。

$ sudo nmcli connection load /etc/NetworkManager/system-connections/wireguard-client.nmconnection
$ sudo nmcli connection up wireguard-client

$ sudo wg show

一旦接続確認

一旦ここで、ローカルネットワーク内でサーバとクライントが WireGuard インタフェースを介して通信できていることを確認する。

クライアントからサーバへの ping による疎通確認

$ ip route get 10.0.0.1
10.0.0.1 dev wg0 src 10.0.0.2 uid 1000
    cache

$ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=1.22 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.30 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=1.29 ms
^C
--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.224/1.270/1.295/0.032 ms

WireGuard インタフェース経由で通信できているのが確認できた。

サーバでの転送設定

ここまでで WireGuard インターフェースを介した VPN 接続はできたが、 まだこの状態だとクライアントはインターネットに出られない。

クライアントが送ってきたインターネット宛のパケットを、 サーバ側で転送するための設定を追加する。

まず転送を行える様にするため、以下でカーネルパラメータを設定しておく。 (再起動後のために設定ファイルへの追記もセットで行っておく)

sudo sysctl net.ipv4.ip_forward=1
sudo sh -c "echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.d/99-sysctl.conf"

次に WireGuard インタフェースに届いたパケットを実際にどう転送するための設定を行う。

先人の記事を色々見た感じ、ファイアウォールでの転送設定は WireGuard インタフェースの up/down に合わせて動的に落としたりするのが多かったのでそれに習う。 サーバ側の WireGuard インタフェースは上げっぱなしにしておくつもりなので静的に設定しておくでも良いのだが、 NetworkManager の dispatcher という仕組みを使えば実装できそうだったので触ってみようかなと思ったのもある。

また、しばらく触ってなかったので知らなかったが、 ファイアウォールの設定には iptables ではなく nftables を使うのが今風らしいので nftables を使うことにした。

nftables の初期設定

まず nftables のインストールする。

# インストール( Arch Linux の場合)
$ sudo pacman -S nftables

# コマンド実行確認(ファイアウォールのルールは空なので何も表示されないはず)
$ sudo nft list ruleset

まずベースになるルールセットを /etc/nftables.conf に作成する。

#!/usr/bin/nft -f

table inet filter {
  chain input {
    type filter hook input priority filter
    policy drop

    ct state invalid drop
    ct state { established, related } accept

    iifname lo accept

    ip protocol icmp accept

    tcp dport ssh accept
  }

  chain forward {
    type filter hook forward priority filter
    policy drop
  }
}

これを systemd 経由でファイアウォールに反映するのと、システム起動時にも読み込まれる様にする。
(ちなみにユニットファイルを見ると分かるが、 nftables.service は nft コマンドを実行してを設定ファイルを読み込むだけで、何かデーモンが立ち上がるわけではない)

$ sudo systemctl start nftables.service
$ sudo systemctl enable nftables.service

# 反映されたことを確認
$ sudo nft list ruleset

NetworkManager dispatcher の設定

次に WireGuard インタフェースの up/down に合わせて必要なルールを足したり消したりするために、 /etc/NetworkManager/dispatcher.d/wireguard-worward.sh に以下の様なスクリプトを作成する

#!/bin/sh

WG_IF="wg0"
PUB_IF="eno1"

interface=$1
status=$2

if [ $interface = $WG_IF ]; then
  case $status in
    up)
      nft add "rule inet filter input iifname $PUB_IF udp dport 51820 accept comment \"for wireguard\""
      nft add "rule inet filter input iifname $WG_IF accept comment \"for wireguard\""
      nft add "rule inet filter forward iifname $WG_IF accept comment \"for wireguard\""
      nft add "rule inet filter forward oifname $WG_IF accept comment \"for wireguard\""
      nft add "chain inet filter postrouting { type nat hook postrouting priority srcnat ; }"
      nft add "rule inet filter postrouting iifname $WG_IF oifname $PUB_IF masquerade comment \"for wireguard\""
      ;;
    down)
      nft --handle list chain inet filter input \
        | grep -e 'for wireguard' \
        | sed 's/.* # handle \(.*\)/\1/' \
        | xargs -I{} nft delete 'rule inet filter input handle {}'
      nft --handle list chain inet filter forward \
        | grep -e 'for wireguard' \
        | sed 's/.* # handle \(.*\)/\1/' \
        | xargs -I{} nft delete 'rule inet filter forward handle {}'
      nft delete "chain inet filter postrouting"
      ;;
  esac
fi

パーミッションも適切に設定する。

$ sudo chown root:root /etc/NetworkManager/dispatcher.d/wireguard-forward.sh
$ sudo chmod 744 /etc/NetworkManager/dispatcher.d/wireguard-forward.sh

上記スクリプトが呼ばれる様にサービスを起動する。

$ sudo systemctl start NetworkManager-dispatcher.service

WireGuard インタフェースを up/down したりして想定通り反映されることを確認する。

$ sudo nft list ruleset
$ sudo nmcli connection down wireguard-server
$ sudo nft list ruleset
$ sudo nmcli connection up wireguard-server
$ sudo nft list ruleset

ちなみに今回の設定の場合、 WireGuard インタフェースを up した状態で以下の様なルールセットになる。

$ sudo nft list ruleset
table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                ct state invalid drop
                ct state { established, related } accept
                iifname "lo" accept
                ip protocol icmp accept
                tcp dport 22 accept
                iifname "eno1" udp dport 51820 accept comment "for wireguard"
                iifname "wg0" accept comment "for wireguard"
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                iifname "wg0" accept comment "for wireguard"
                oifname "wg0" accept comment "for wireguard"
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                iifname "wg0" oifname "eno1" masquerade comment "for wireguard"
        }
}

問題なさそうなことが確認できたら NetworkManger-dispacher.service を有効化しておく。

$ sudo systemctl enable NetworkManger-dispacher.service

インターネットへの疎通確認

設定が終わったので、インターネットへの転送がちゃんと行われていることを確認する。

クライアント、サーバの両方で WireGuard インタフェースを有効にした状態で、 クライアントから適当なインターネット上のアドレス宛の通信が通ることを確認する。

$ sudo wg show
interface: wg0
  public key: cCemX4jMbyI5TkWcxn8M9XUhpPzAGgpp3/xdRXJR1AE=
  private key: (hidden)
  listening port: 51820
  fwmark: 0xcb04

peer: aaX+7NP+w93BL08NyiazchFwUKmEaLFMQLhpBdhK1Ak=
  endpoint: 192.168.2.15:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 36 seconds ago
  transfer: 11.41 MiB received, 2.02 MiB sent
  persistent keepalive: every 25 seconds

$ ip route get 8.8.8.8
8.8.8.8 dev wg0 table 51972 src 10.0.0.2 uid 1000
    cache

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1)  1.166 ms  1.126 ms  1.120 ms
 2  _gateway (192.168.2.1)  2.513 ms  2.473 ms  2.470 ms
 3  192.168.1.1 (192.168.1.1)  4.313 ms  4.288 ms  4.272 ms
...(中略)...
 9  * * *
10  dns.google (8.8.8.8)  5.132 ms  5.201 ms  5.165 ms

ルータでのポートフォワード設定

VPN サーバとして一通り動作することが確認できたので、 インターネットからサーバにアクセスできるようにするためポートフォワードの設定をする。

ルータ毎の使い方を書いても仕方ないので説明は省略するが、 自分の場合は NURO 光から貸与されてる ONU 兼ルータの ZTE F660A と ASUS RT-AC68U の二段になっており、それぞれで以下の感じで設定した。

ZTE F660A でのポートフォワード設定画面キャプチャ
ZTE F660A でのポートフォワード設定
ASUS RT-AC68U でのポートフォワード設定画面キャプチャ
ASUS RT-AC68U でのポートフォワード設定

ということで、インターネット公開も済。

接続確認

インターネット経由での通信確認をする。

今回はノートPCをスマートフォンのテザリング経由でインターネットにつないで確認する。

ノートPCの WireGuard 設定

まずサーバから適当な方法で自宅ネットワークのグローバル IP を確認する。

$ curl globalip.me
XXX.XXX.XXX.XXX

後はデスクトップ PC でやったのと同じ様に、ノートPCで WireGuard を一通り設定する。

# WireGuard インタフェースの作成(アドレスは適切なモノに書き換える)
sudo nmcli connection add type wireguard con-name wireguard-client ifname wg0 autoconnect no
sudo nmcli connection modify wireguard-client ipv4.method manual ipv4.address 10.0.0.3/24
sudo nmcli connection modify wireguard-client wireguard.private-key `wg genkey`
sudo nmcli connection modify wireguard-client wireguard.listen-port 51820

# WireGuard Peer の設定( endpoint として今回はグローバルIP を指定)
sudo sh -c "cat << __EOF__ >> /etc/NetworkManager/system-connections/wireguard-client.nmconnection

[wireguard-peer.aaX+7NP+w93BL08NyiazchFwUKmEaLFMQLhpBdhK1Ak=]
endpoint = XXX.XXX.XXX.XXX:51820
allowed-ips=0.0.0.0/0;
persistent-keepalive=25

__EOF__"
sudo nmcli connection load /etc/NetworkManager/system-connections/wireguard-client.nmconnection
sudo nmcli connection up wireguard-client

# 公開鍵の確認
$ sudo wg show wg0 public-key
DFMfpLSzIowUt5xt7Rq7UnFRd9i0b2MCBlqPu4FoQX4=

ノートPCの WireGuard インタフェースをサーバ側の Peer として追加する。

sudo sh -c "cat << __EOF__ >> /etc/NetworkManager/system-connections/wireguard-server.nmconnection

[wireguard-peer.DFMfpLSzIowUt5xt7Rq7UnFRd9i0b2MCBlqPu4FoQX4=]
allowed-ips=10.0.0.3/32;

__EOF__"

sudo nmcli connection load /etc/NetworkManager/system-connections/wireguard-server.nmconnection
sudo nmcli connection up wireguard-server

ということで Peer 設定まで済。

テザリング(インターネット)経由の WireGuard で通信できていることの証跡を取る方法が思いつかなかったのだが、 一応ノートPCからも WireGuard インタフェースで通信できていることが確認できた。

$ sudo wg show
interface: wg0
  public key: DFMfpLSzIowUt5xt7Rq7UnFRd9i0b2MCBlqPu4FoQX4=
  private key: (hidden)
  listening port: 51820
  fwmark: 0xcae7

peer: aaX+7NP+w93BL08NyiazchFwUKmEaLFMQLhpBdhK1Ak=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 13 seconds ago
  transfer: 70.43 KiB received, 69.34 KiB sent
  persistent keepalive: every 25 seconds

$ ip route get 8.8.8.8
8.8.8.8 dev wg0 table 51943 src 10.0.0.3 uid 1002
    cache

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1)  60.104 ms  60.030 ms  60.027 ms
 2  192.168.2.1 (192.168.2.1)  59.974 ms  59.943 ms  59.918 ms
 3  192.168.1.1 (192.168.1.1)  59.894 ms  59.863 ms  59.824 ms
...(中略)...
10  dns.google (8.8.8.8)  66.980 ms  66.875 ms  66.842 ms

あとシステムトレイの NetworkManager のアプレットからこんな感じで接続切断できる。

システムトレイでの接続切断

終わりに

触ってみるまで WireGuard 公式のトップに書いている 「WireGuard は専用インタフェースを使って透過的に通信を行う」というのがあんまりイメージ付いていなかったのだが、 何となくイメージ付いた気がする。
(「OpenVPN とか L2TP/IPSec でも VPN 接続を確立した後は特に存在意識せず通信できるよな」と思い、それとどう違うのかピンと来てなかった)

実際に触ってみると

  • Peer 相手と通信できるかどうかと WireGuard の有効無効が別
    • 例えばノートPCのとかで WireGuard 通信を実際に運んでいる Wi-Fi が切れたりしても WireGuard インタフェースの状態には影響しない
      • もちろん通信はできなくなるが、 Wi-Fi が再度繋がった後で再度 VPN 通信しようとすればそのまま通信できる
      • OpenVPN とかの VPN だとサーバとの接続が切れたら再接続の必要が出てくるが、そういう操作が必要無い
    • 通信しようとしたときに通信できれば通信できるし、通信できない状態ならできない
      • 有線インタフェースで通信するのと似たような感覚

という感じで、最初に WireGuard のインタフェースと Peer の設定さえしてしまえば、 使うタイミングでも WireGuard の一切の操作(接続切断といった操作すら)無く使えるということなのかなと理解できた。

こういう事を考えると OpenVPN や L2TP/IPSec みたいに使おうと思ったときに接続するような使い方ではなくて、 WireGuard インタフェースは常時上げておく使い方が基本なんだろうな、というのを感じた。 (記事内で書いた様に、使いたい時に繋ぐという使い方ももちろんできなくは無いが)

同じ VPN ってことで OpenVPN や L2TP/IPSec と同じようなものと思っていたが、 考え方が結構違いそうだなというのを実感できた。

やり残したこと等

最後にやり残したこと等を書き残しておく。

  • WireGuard自体についてのまとめ
    • 今回はもともと作業内容に重点を置くということで省いたが、自分の理解を確認・整理する意味でもう少し詳しくまとめたい
  • 事前共有鍵の利用の検討
    • 下調べしていた段階で一旦無しで良いかと判断したが、セキュリティを担保している理屈とかをちゃんと理解したら改めて検討したい
  • WireGuard の設定方法の比較
    • 今回使った nmci を使った設定と、 ip や wg-quick を使った場合との比較(主に設定管理とかの面)
    • 他の方の記事見た感じ wg-quick を使った方がシンプルに設定できそうという気もしている
  • ファイアウォールの設定について
    • とりあえずで設定した感じで、あんまりちゃんと考えたものでは無い
    • NetworkManager dispatcher で nftables 使って制御している部分も割とできるようにやった感がある
    • 仕組みだったりベストプラクティスだったりを学んだほうが良い気がしている
  • IPv6 対応
    • 自宅のネットワークをほぼ IPv4 オンリーで構築していて、今回も IPv6 をほぼ考慮せず設定している
    • 必要に迫られてないというのはあるが、ずっと「IPv6 かぁ」と言ってる気がするのでいい加減考えたい
  • インターネット越しでのサーバ指定がグローバルIP直指定の部分
    • ほとんど無いとはいえ一応変わり得るものなので、 DDNS 使うなり、変わったことを検知して通知するなりするしても良い気はしている
  • そもそもの構成がどうかという点
    • 自宅に有るサーバをポートフォワード経由で公開する方法取ったが、VPS とかを中継して繋ぐ構成の方が良い気もしている(金はかかるが)

ある程度こうするのが良いかなというイメージができているものもあるが、 微妙感はありつつじゃあ具体的にどうすれば良いかまではイメージできてないものもある。

この辺りは気が向いたら追々考えたい。

参考


  1. 本来 WireGuard でサーバ、クライアントといった役割は無いはずなので表現として適切で無い気はするが、便宜上サーバマシンを WireGuard サーバ、デスクトップPC・ノートPC・スマートフォンを WireGuard クライアントと呼んでいる。 ↩︎