VyOSでIPSec
VyOSでIPSecを設定してみる。
ソフトウェア |
バージョン |
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経由でホストマシンに向いています。
OSPFでの経路広報は前回のネットワークを流用します。ただしネットワーク図両端のセグメントをOSPFで広報することをやめてIPSec経由に変更します。(100.1.10.0/24, 100.2.10.0/24 をIPSecで繋げます)
設定
広報している経路を停止する
1
2
3
4
5
|
# in vysite1
configure
delete protocols ospf area 0 network 100.1.10.0/24
commit
save
|
1
2
3
4
5
|
# in vysite3
configure
delete protocols ospf area 0 network 100.2.10.0/24
commit
save
|
設定前確認
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# in vysite1
$ show ip ospf route
============ OSPF network routing table ============
N 100.0.10.0/24 [1] area: 0.0.0.0
directly attached to eth2
N 100.0.20.0/24 [2] area: 0.0.0.0
via 100.0.10.1, eth2
============ OSPF router routing table =============
============ OSPF external routing table ===========
$ show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL
100.0.20.2 1 Full/Backup 35.180s 100.0.10.1 eth2:100.0.10.2 0 0 0
|
設定前確認
IPSecを設定。
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
26
27
28
29
30
|
configure
# in vysite1
## 共通設定
set vpn ipsec esp-group test-tunnel-esp
set vpn ipsec esp-group test-tunnel-esp proposal 0 encryption aes256gcm128
set vpn ipsec esp-group test-tunnel-esp proposal 0 hash sha512
set vpn ipsec esp-group test-tunnel-esp lifetime 60
set vpn ipsec ike-group test-tunnel proposal 0
set vpn ipsec ike-group test-tunnel proposal 0 encryption aes256gcm128
set vpn ipsec ike-group test-tunnel proposal 0 hash sha512
set vpn ipsec ike-group test-tunnel lifetime 120
set vpn ipsec ike-group test-tunnel dead-peer-detection action restart
## 対向の基本設定
set vpn ipsec interface eth2
set vpn ipsec site-to-site peer 100.0.20.1
set vpn ipsec site-to-site peer 100.0.20.1 local-address 100.0.10.2
set vpn ipsec site-to-site peer 100.0.20.1 ike-group test-tunnel
set vpn ipsec site-to-site peer 100.0.20.1 tunnel 0 esp-group test-tunnel-esp
## 対向との認証設定
set vpn ipsec site-to-site peer 100.0.20.1 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 100.0.20.1 authentication pre-shared-secret test-secret-aaa
## 対向とのトンネル設定
set vpn ipsec site-to-site peer 100.0.20.1 tunnel 0
set vpn ipsec site-to-site peer 100.0.20.1 tunnel 0 remote prefix 100.2.10.0/24
set vpn ipsec site-to-site peer 100.0.20.1 tunnel 0 local prefix 100.1.10.0/24
commit
save
|
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
26
27
28
29
|
configure
# in vysite3
set vpn ipsec esp-group test-tunnel-esp
set vpn ipsec esp-group test-tunnel-esp proposal 0 encryption aes256gcm128
set vpn ipsec esp-group test-tunnel-esp proposal 0 hash sha512
set vpn ipsec esp-group test-tunnel-esp lifetime 60
set vpn ipsec ike-group test-tunnel proposal 0
set vpn ipsec ike-group test-tunnel proposal 0 encryption aes256gcm128
set vpn ipsec ike-group test-tunnel proposal 0 hash sha512
set vpn ipsec ike-group test-tunnel lifetime 120
set vpn ipsec ike-group test-tunnel dead-peer-detection action restart
## 対向の基本設定
set vpn ipsec interface eth2
set vpn ipsec site-to-site peer 100.0.10.2
set vpn ipsec site-to-site peer 100.0.10.2 local-address 100.0.20.1
set vpn ipsec site-to-site peer 100.0.10.2 ike-group test-tunnel
set vpn ipsec site-to-site peer 100.0.10.2 tunnel 0 esp-group test-tunnel-esp
## 対向との認証設定
set vpn ipsec site-to-site peer 100.0.10.2 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 100.0.10.2 authentication pre-shared-secret test-secret-aaa
## 対向とのトンネル設定
set vpn ipsec site-to-site peer 100.0.10.2 tunnel 0
set vpn ipsec site-to-site peer 100.0.10.2 tunnel 0 remote prefix 100.1.10.0/24
set vpn ipsec site-to-site peer 100.0.10.2 tunnel 0 local prefix 100.2.10.0/24
commit
save
|
設定後確認
したみたいにステータスを確認できる。
1
2
3
4
|
show vpn ipsec status
....
peer_100-0-20-1_tunnel_0{35688}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: cc916b93_i c78660b2_o
peer_100-0-20-1_tunnel_0{35688}: 100.1.10.0/24 === 100.2.10.0/24
|
インタフェースが作られたりはしない。またルートテーブルもlocal(0)に追加されなかった。
1
2
3
4
5
6
7
8
9
|
# in vysite1
$ ip rule
0: from all lookup local
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default
$ ip route show table 220
100.2.10.0/24 via 100.0.10.1 dev eth2 proto static src 100.1.10.1
|
疎通確認
vysite1に接続したDebianから traceroute で経路を確認した。
1
2
3
4
|
# setup
sudo ip route del default
sudo ip addr add 100.1.10.10/24 dev eth1
sudo ip route add default via 100.1.10.1
|
1
2
3
4
|
$ traceroute -n 100.2.10.1
traceroute to 100.2.10.1 (100.2.10.1), 30 hops max, 60 byte packets
1 100.1.10.1 0.510 ms 0.592 ms 0.637 ms
2 100.2.10.1 3.599 ms 3.440 ms 3.420 ms
|
IPSecメモ
WireGuardのようにインタフェースが生成されてフォワードされるのかと思っていたら仕組みが違うようだった。
IPSecはIKE,ESP,AHという3つのサブプロトコルで組み立てられているらしいです。
IKE versionは設定してないのでv1,v2がネゴシエーションされておそらくv2が使われるとのこと。
v1,v2の違いはここが参考になりました。とくに比較表が入りやすかったです。
IKEv2だとMOBIKEというのが使えるらしい。
これが有効だとIPSecセッションの送信元IPが変わってもゲートウェイと再接続する必要がないらしいです。
モバイルで便利みたいですね。