結論 インストールしてしまえばあとはセキュリティキーを含んだconfiファイルを配ればいい。実は結構簡単! OpenVPNやL2TP、PPTPが面倒に感じる。。。おまけにL2TPとかPPTPと比較して全然パフォーマンスがいい。UDPなので、通信が厳しい環境でRDP接続をするとなかなか面白い挙動をするが。。。
EdgeRouter用のdpkgがある。ハードウェアごとに用意されているので注意。また、Edgerouterのfirmware versionでv1系とv2系でインストールパッケージが異なる。同梱されているKernel moduleが違う。
気になるなら、firmwareを上げてからWireGuardをインストールをすることをおすすめする。いや上げてからしたほうがいいかも。少なくとも系列の最新版に.
Edgerouter XはGUIからファームをあげるともはや失敗する仕様なので、sshから上げること。(ブートローダーもあげたほうがいい。ランプの点滅の仕様が変わるだけだけど)
必ず、設定のバックアップをしてから行うこと。(自分はしなかった。。。)
https://github.com/Lochnair/vyatta-wireguard/releases
2020年5月14日更新
上記は開発が止まっているので、以下から最新版を落とします。
https://github.com/WireGuard/wireguard-vyatta-ubnt
https://github.com/WireGuard/wireguard-vyatta-ubnt/releases
Firmwareが ( なるべくなら2系にあげてからにしたほうがいい。v1ファームウェアの不具合は、最新のv2.0.8hotfix1で解消されているはずなので。)
Edgerouter X
v1系 https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20200506-2/e50-v1-v1.0.20200506-v1.0.20200510.deb
v2系 https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20200506-2/e50-v2-v1.0.20200506-v1.0.20200510.deb
Edgerouter 4 ( なるべくなら2系にあげてからにしたほうがいい)
v1系 https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20200506-2/e300-v1-v1.0.20200506-v1.0.20200510.deb
v2系 https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20200506-2/e300-v2-v1.0.20200506-v1.0.20200510.deb
Edgerouter向けのWireGuardパッケージをインストールするとWeb UIのConfig Treeからも設定が可能になる。
インストール EdgerRouter 4 v2.0.8でインストールした例。パッケージ名以外の操作は全機種共通。
パッケージを/config/data/firstboot/install-packages/においておくとConfigのバックアップファイルにパッケージが含まれ、パッケージがインストールされていない場合は、Configファイルをリストアしたときにそのパッケージをインストールをしてくれる。
sudo -i
mkdir -p /config/data/firstboot/install-packages/
cd /config/data/firstboot/install-packages/
curl -s -L -O https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20200506-2/e300-v2-v1.0.20200506-v1.0.20200510.deb
dpkg -i e300-v2-v1.0.20200506-v1.0.20200510.deb
EdgerouterのPublicキーとPrivateキーの生成
cd /config/auth
wg genkey | tee wg-private.key | wg pubkey > wg-public.key
事前共有鍵の作成 (今回は使わない。というか知らんかった。)
wg genpsk > wg-preshared
chmod 600 wg-preshared
cd
ClientのPublicキーとPrivateキー、設定ファイルの置き場の作成:オプション。Edgerouterのバックアップに含まれるから実は便利
mkdir /config/wireguard
chmod 750 /config/wireguard
Edgerouterのファイヤーウォールの設定
Firewallの設定(rule番号は適当。順番は後でWeb GUIで治したほうがいいかも。最後から2番目にする)
51820/udpを使う。
configure
set firewall name WAN_LOCAL rule 75 action accept
set firewall name WAN_LOCAL rule 75 description wireguard
set firewall name WAN_LOCAL rule 75 protocol udp
set firewall name WAN_LOCAL rule 75 log disable
set firewall name WAN_LOCAL rule 75 destination port 51820
commit
save
こんな感じ8番目にWireguardがきている(下から2番目)
EdgerouterのWireGuradの設定
EdgerouterのServerトンネルIPは、10.254.254.1/24
WireGuardのデバイス名は wg0
もしクライアントでServerとして接続も受ける場合は別途wg1を作ってクライアントの設定をすれば良い(未確認)
set interfaces wireguard wg0 description “wg interface1”
set interfaces wireguard wg0 address 10.254.254.1/24
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 private-key /config/auth/wg-private.key
set interfaces wireguard wg0 route-allowed-ips true
以下dnsmasqやポートフォワードを利用しているなら必要
set service dns forwarding listen-on wg0
set port-forward lan-interface wg0
# route-allowed-ips trueはすべてのトラフィックをwg0に流す設定らしい。。。
# set service dns forwarding listen-on wg0をしておかないとVPNクライアントからDNSが引けません。
一旦保存
commit
save
クライアントの追加
登録するClientのclient public keyが必要
Edgerouterではclient public keyごとにPeerが必要。
クライアントのPublic key/Private Keyは、サーバでもクライアントのどちらで作成してもいい。
個別のClientのアドレスを付与する必要がある。10.254.254.XXX/32 <–これすごく重要/32にしないとダメ。10時間くらいはまった。
https://try.popho.be/wg.html
The main issue I had was understanding AllowedIPs: AllowedIPs under [Peer] has this double meaning of “I expect anything coming from that peer to have an IP address in that subnet AND I know that this subnet can only be reached through that specific peer”. Thus, AllowedIPs must not overlap.
Server側
<Edgerouterで生成するなら:クライアントのPublicキーとPrivateキーの生成>
<Edgerouterで生成するなら:クライアントのPublicキーとPrivateキーの生成>
sudo -i
cd /config/wireguard
wg genkey | tee <hostname>-private.key | wg pubkey > <hostname>-public.key
cat /config/wireguard/<hostname>-public.key
chmod 640 /config/wireguard/<hostname>-public.key
exit
configure
set interfaces wireguard wg0 peer <client public key> description “端末名”
set interfaces wireguard wg0 peer <client public key> allowed-ips 10.254.254.XXX/32
commit
save
例
configure
set interfaces wireguard wg0 peer CPUBXXXXXXXXXXXXXXXXXX= description MacBook
set interfaces wireguard wg0 peer CPXXXXXXXXXXXXXXXXXX= allowed-ips 10.254.254.2/32
commit
save
WireGuardは静かなプロトコルなので、NATの内側で確実に通信したいのであれば以下を追加したほうがいいかも。
https://www.wireguard.com/quickstart/
set interfaces wireguard wg0 peer CPUBXXXXXXXXXXXXXXXXXX= persistent-keepalive 25
<参考:EdgeRouterでPeerの設定を消すなら>
delete interfaces wireguard wg0 peer CPUBXXXXXXXXXXXXXXXXXX=
Client側
MACやiOSなどを見る限り、設定ファイルは同じフォーマットでいい。以下をconfにして配布するのが速い。
Macbookに10.254.254.2を割り当てる。
DNSはEdgerouterのdnsmasqを利用 192.168.8.1
全てのパケットはVPN経由 0.0.0.0/0
接続先のサーバはvpn.example.com:51820
[Interface]
PrivateKey = <client private key>
Address = 10.254.254.2/24
DNS = 192.168.8.1
[Peer]
PublicKey = SPUBXXXXXXXXXXXXXXXXXX= <ーServerのPublic Key
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0 <-すべてのパケットをVPNへ
ステータス確認
sudo wg出力結果
接続エントリがパブリックキーなのは見にくいw
interface: wg0
public key: SPUBXXXXXXXXXXXXXXXXXXXXXXXX=
private key: (hidden)
listening port: 51820
peer: CPPUB1XXXXXXXXXXXXXXXXXXXXXXXX=
endpoint: 119.243.52.233:54589
allowed ips: 10.254.254.4/32
latest handshake: 34 seconds ago
transfer: 268.54 KiB received, 777.64 KiB sent
peer: CPPUB2XXXXXXXXXXXXXXXXXXXXXXXX=
endpoint: 1.75.197.35:52597
allowed ips: 10.254.254.3/32
latest handshake: 2 minutes ago
transfer: 470.04 KiB received, 9.80 MiB sent
peer: CPPUB3XXXXXXXXXXXXXXXXXXXXXXXX=
endpoint: 119.243.52.233:39516
allowed ips: 10.254.254.2/32
latest handshake: 1 hour, 7 minutes, 17 seconds ago
transfer: 1.58 MiB received, 6.47 MiB sent
これで完了!