VyOSでWireGuard

VyOSでWireGuard

VyOSWireGuardを設定してみる。

ソフトウェア バージョン
VyOS 1.4-rolling-202203080319
VirtualBox 6.1.32 r149290 (Qt5.6.3)
Vagrant 2.2.19
vagrant-vyos 1.1.10

構築環境

Vagrantで準備するとeth0としてNATタイプのインタフェースとdefaultルートが設定されます。 図には載せないですが全てのホストでdefaultルートがeth0経由でホストマシンに向いています。

ネットワーク図 成功時

セグメント prefix wireguard公開
ix 100.100.0.0/24 no
other 100.120.0.0/24 yes
private 100.110.0.0/24 yes
dmz 100.0.10.0/24 no
host 192.168.0.0/24(dhcp) no
wireguard 10.0.1.0/24 yes

WireGuardインタフェースには 10.0.1.0/24 のアドレスを与えて行うことにしました。 初めは下のように Debian でWireGuardインタフェースを1つ作成して繋げようと考えていましたがうまく動かせませんでした。 そのため、インタフェースを2つ準備してフォワードするように方針を変えました。 (ダメだった理由は調べられませんでした、tcpdumpでICMPが届くのは確認できましたreplyが飛びません。)

失敗時

ちなみに Debian でWireGuardインタフェースを動かすときに wg-quick down wg0wg setconf wg0 /etc/wireguard/wg0.conf のようにするのですが 下のように送信元IPで利用されるインタフェースが固定されてしまうので、ルールを削除して再定義しました。

1
2
3
4
ip route
10.0.1.0/24 dev wg0 proto kernel scope link src 10.0.1.2
10.0.1.0/24 dev wg1 proto kernel scope link src 10.0.1.4
...
1
2
3
4
$ sudo ip route del 10.0.1.0/24
$ sudo ip route del 10.0.1.0/24
$ sudo ip route add 10.0.1.1/24 dev wg0
$ sudo ip route add 10.0.1.3/24 dev wg1

仮想マシン準備

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Vagrant.configure("2") do |config|
  config.vm.box = "vyos/current"

  config.vm.define :vysite1 do | vysite1 |
    vysite1.vm.hostname = "vysite1"
    vysite1.vm.network :public_network
    vysite1.vm.network :private_network, virtualbox__intnet: "ix"
  end
  config.vm.define :vysite2 do | vysite2 |
    vysite2.vm.hostname = "vysite2"
    vysite2.vm.network :private_network, virtualbox__intnet: "dmz"
    vysite2.vm.network :private_network, virtualbox__intnet: "ix"
  end
  config.vm.define :vyext do | vyext |
    vyext.vm.hostname = "vyext"
    vyext.vm.network :private_network, virtualbox__intnet: "ix"
    vyext.vm.network :private_network, virtualbox__intnet: "remote-seg"
  end

  config.vm.define :deb do | deb |
    deb.vm.box = "debian/bullseye64"
    deb.vm.hostname = "deb01"
    deb.vm.network :private_network, type: "dhcp", virtualbox__intnet: "dmz"
  end
end

設定

vysite1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
configure
set interfaces ethernet eth2
set interfaces ethernet eth2 address 100.100.0.1/24
set protocol static route 100.0.10.0/24 next-hop 100.100.0.2

run generate pki wireguard key-pair
set interfaces wireguard wg0 address '10.0.1.1/24'
set interfaces wireguard wg0 port 51820
set interfaces wireguard wg0 private-key +BeqtmLk4f+HR35bfXUfgH0JCqR7z2zu/S+2l6UIo10=

set interfaces wireguard wg0 peer site2 address 100.0.10.2
set interfaces wireguard wg0 peer site2 port 51820
set interfaces wireguard wg0 peer site2 public-key aqKSZv//VZ26zA14B+EFwYeutLB7RTWjmZ0mMdwgySo=
set interfaces wireguard wg0 peer site2 allowed-ips '10.0.1.2/32'
set interfaces wireguard wg0 peer site2 allowed-ips '10.0.1.3/32'
set interfaces wireguard wg0 peer site2 allowed-ips '10.0.1.4/32'
set interfaces wireguard wg0 peer site2 allowed-ips '100.110.0.0/24'
set interfaces wireguard wg0 peer site2 allowed-ips '100.120.0.0/24'

set protocols static route 100.110.0.0/24 interface wg0
set protocols static route 100.120.0.0/24 interface wg0
comimt
save

vysite2

1
2
3
4
5
6
7
configure
set interfaces ethernet eth1
set interfaces ethernet eth1 address 100.0.10.1/24
set interfaces ethernet eth2
set interfaces ethernet eth2 address 100.100.0.2/24
commit
save

vyext

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
configure
set interfaces ethernet eth1
set interfaces ethernet eth1 address 100.100.0.10/24
set interfaces ethernet eth2
set interfaces ethernet eth2 address 100.120.0.1/24
set protocols static route 100.0.10.0/24 next-hop 100.100.0.2

set interfaces wireguard wg0 address 10.0.1.3/24
set interfaces wireguard wg0 port 51820
run generate pki wireguard key-pair install interface wg0

set interfaces wireguard wg0 peer site2 allowed-ips 10.0.1.1/32
set interfaces wireguard wg0 peer site2 allowed-ips 10.0.1.2/32
set interfaces wireguard wg0 peer site2 allowed-ips 10.0.1.4/32
set interfaces wireguard wg0 peer site2 allowed-ips 100.110.0.0/24
set interfaces wireguard wg0 peer site2 address 100.0.10.2
set interfaces wireguard wg0 peer site2 port 51821
set interfaces wireguard wg0 peer site2 public-key Nz7vQO/1L9BQ5VBEH2NrAZJeuBmUBmQtg/wF8ZLSviE=

set protocols static route 100.110.0.0/24 interface wg0
commit
save

deb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
sudo ip addr add 100.0.10.2/24 dev eth1
sudo ip route add 100.100.0.0/24 via 100.0.10.1
# 
sudo ip link add link eth1 name eth1.101 type vlan id 101
sudo ip addr add 100.110.0.1 dev eth1.101
sudo ip link set eth1.101 up

sudo apt-get install -y wireguard

# 設定ファイルを書く
sudo wg-quick up wg0
sudo wg-quick up wg1

sudo ip route del 10.0.1.0/24
sudo ip route del 10.0.1.0/24
sudo ip route add 10.0.1.1/24 dev wg0
sudo ip route add 10.0.1.2/24 dev wg0
sudo ip route add 10.0.1.3/24 dev wg0

sudo sysctl -w net.ipv4.ip_forward=1
[Interface]
ListenPort = 51820
Address = 10.0.1.2/24
PrivateKey = GFYUsZ+nGi5Rs/Lo9Ht89Xs+4L2yz/Exi8OqmUV3WFs=

[Peer]
PublicKey = lgM7DZzDfLfSdHn48Yco638gL+A7r6TiAuwJ1SypKT8=
AllowedIPs = 10.0.1.1/32
Endpoint = 100.100.0.1:51820
[Interface]
ListenPort = 51821
Address = 10.0.1.4/24
PrivateKey = GFYUsZ+nGi5Rs/Lo9Ht89Xs+4L2yz/Exi8OqmUV3WFs=

[Peer]
PublicKey = V4S29R8Z2jgXn1wn01PApcTcqEgC6BsXj0aPA+BLniQ=
AllowedIPs = 10.0.1.3/32,100.120.0.0/24
Endpoint = 100.100.0.10:51820

WireGuardメモ

最低1つpeerの設定が必要なので2ノードで同時に設定が必要になったりしました。 流れです。

  1. インタフェースを作る
    • アドレスを与える
    • 秘密鍵を与える
    • エンドポイント(IP, Port)を決める
  2. peerを設定する
    • 公開鍵を設定する
    • 対向のエンドポイント(IP, Port)を指定する
    • 許可する向き先ネットワークセグメントを設定する
  3. ルーティングを設定する

ref. WireGuard:次世代耐乱用性カーネルネットワークトンネル by Jason Donenfeld

WireGuard in VyOS

したみたいにキーペアを生成したりインストールできる。 生成したらメモするなり /config/config.boot を読むなりして対向にも設定する。

1
2
generate pki wireguard key-pair install interface wg0
generate pki wireguard key-pair

ref. VyOS::wireguard

WireGuard in Debian

wg コマンドでインタフェースの設定ができます。 /etc/wireguard/{{ iface_name }}.conf があると wg-quick [up|down] {{ iface_name }} で操作できる。 したみたいに設定したことみたいなのがログに出てくる。

1
2
3
4
5
6
7
8
$ sudo wg-quick down wg0
[#] ip link delete dev wg0
vagrant@deb01:~/works$ sudo wg-quick up wg0
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.1.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0

ref.

comments powered by Disqus