EdgerouterにWireguardのインストール

投稿者: | 5月 14, 2020

結論 インストールしてしまえばあとはセキュリティキーを含んだ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からも設定が可能になる。

2825EA96 FF56 4EFA BC9F CEA9AE8DD543

インストール 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番目)

D97ED08B 801C 4678 AE39 20CD8E42B5C8

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

これで完了!

コメントを残す