VyOSでWireGuard
VyOSでWireGuardを設定してみる。
ソフトウェア |
バージョン |
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 wg0
や wg 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ノードで同時に設定が必要になったりしました。
流れです。
- インタフェースを作る
- アドレスを与える
- 秘密鍵を与える
- エンドポイント(IP, Port)を決める
- peerを設定する
- 公開鍵を設定する
- 対向のエンドポイント(IP, Port)を指定する
- 許可する向き先ネットワークセグメントを設定する
- ルーティングを設定する
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.