VyOSでIPSec

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が変わってもゲートウェイと再接続する必要がないらしいです。 モバイルで便利みたいですね。

comments powered by Disqus