【vyos on VMware Playerでネットワークのお勉強】(004) IPsec暗号化


はじめに

みなさま。こんにちは。
新しい技術を覚えようとしたら、無限に存在しワクワク感が増える一方なのですが、過去に「苦労して覚えたはずの技術」を忘れていると挫折感と無能感に襲われ、無気力感に覆われる。
かと言って、新しい技術を疎かにしていたら時代に置いていかれるので、なんとかモチベーションを保ってやり続けるしかないのですね。

そのような導入を記載したものの、私自身IPv6や無線通信はほとんど勉強していません。(20年以上前の技術にも関わらず)
最近はPython、Go言語、Angular、elastic search、AWS等でアプリレイヤーで遊んでばかりいたので、2022年はレイヤ3以下のところを中心にやり直してみようかなぁ~と何気なく考えています。
(IPv6はvyOSで試せるし、無線周りはラズベリーパイを使えば、そこそこ遊べるような気がしているので)

本記事(002)から(004)にかけて作っていた最終構成(以下のような環境)になります。
前回のGREトンネルをIPsecで暗号化する事によって、前回見えていたパケットの内容を隠します。

使用する環境

# 使用環境 備考
1 vyos-1.4 192.168.151.0/24(VMnet2), 192.168.161.0/24(VMnet3)
2 vyos-1.4 192.168.151.0/24(VMnet2), 192.168.171.0/24(VMnet4)
3 vyos-1.4 192.168.171.0/24(VMnet4), 192.168.181.0/24(VMnet5)
4 CentOS 8 Stream HTTPサーバ(192.168.161.101)
5 CentOS 8 Stream HTTPクライアント(192.168.181.101)

本稿で構築する環境

本稿では、
1. vyOS1とvyOS3間をIPsecで暗号化する
2. 192.168.181.101(HTTPクライアント)から192.168.161.101(HTTPサーバ)にアクセスしたときパケットが暗号化されていることを確認する
の2点を記載していこうと思います。

vyOS02はパケット取得用の環境として扱います。

なお、vyOS1、vyOS2、vyOS3は前回の作業にてOSPFで互いに通信のやり取りが可能になっていること、BGPによりクライアント同士の通信が可能になっていることを前提としています。

vyOS1とvyOS3間をIPsecで暗号化する

下記コマンドにてIPsecトンネル設定を行います。
(鍵交換はsha1、暗号化はAES128なので検証環境のみ許される設定です)

vyatta01.sh
set vpn ipsec ike-group OchanIKEGroup proposal 1 dh-group '2'
set vpn ipsec ike-group OchanIKEGroup proposal 1 encryption 'aes128'
set vpn ipsec ike-group OchanIKEGroup proposal 1 hash 'sha1'

set vpn ipsec esp-group OchanESPGroup proposal 1 encryption 'aes128'
set vpn ipsec esp-group OchanESPGroup proposal 1 hash 'sha1'

set vpn ipsec site-to-site peer 192.168.171.12 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 192.168.171.12 authentication pre-shared-secret 'xe3EPT1wGUHj4Hiy'
set vpn ipsec site-to-site peer 192.168.171.12 ike-group 'OchanIKEGroup'
set vpn ipsec site-to-site peer 192.168.171.12 local-address '192.168.151.11'
set vpn ipsec site-to-site peer 192.168.171.12 tunnel 0 esp-group 'OchanESPGroup'
vyatta03.sh
set vpn ipsec ike-group OchanIKEGroup proposal 1 dh-group '2'
set vpn ipsec ike-group OchanIKEGroup proposal 1 encryption 'aes128'
set vpn ipsec ike-group OchanIKEGroup proposal 1 hash 'sha1'

set vpn ipsec esp-group OchanESPGroup proposal 1 encryption 'aes128'
set vpn ipsec esp-group OchanESPGroup proposal 1 hash 'sha1'

set vpn ipsec site-to-site peer 192.168.151.11 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 192.168.151.11 authentication pre-shared-secret 'xe3EPT1wGUHj4Hiy'
set vpn ipsec site-to-site peer 192.168.151.11 ike-group 'OchanIKEGroup'
set vpn ipsec site-to-site peer 192.168.151.11 local-address '192.168.171.12'
set vpn ipsec site-to-site peer 192.168.151.11 tunnel 0 esp-group 'OchanESPGroup'

実行結果の確認

vyatta01.sh
vyos@vyos:~$ show vpn ike sa
Peer ID / IP                            Local ID / IP
------------                            -------------
192.168.171.12 192.168.171.12           192.168.151.11 192.168.151.11

    State  IKEVer  Encrypt      Hash          D-H Group      NAT-T  A-Time  L-Time
    -----  ------  -------      ----          ---------      -----  ------  ------
    up     IKEv2   AES_CBC_128  HMAC_SHA1_96  MODP_1024      no     9       0

vyos@vyos:~$ show vpn ipsec sa
Connection                    State    Uptime    Bytes In/Out    Packets In/Out    Remote address    Remote ID    Proposal
----------------------------  -------  --------  --------------  ----------------  ----------------  -----------  ------------------------
peer_192-168-171-12_tunnel_0  up       13s       0B/0B           0/0               192.168.171.12    N/A          AES_CBC_128/HMAC_SHA1_96
vyatta03.sh
vyos@vyos:~$ show vpn ike sa
Peer ID / IP                            Local ID / IP
------------                            -------------
192.168.151.11 192.168.151.11           192.168.171.12 192.168.171.12

    State  IKEVer  Encrypt      Hash          D-H Group      NAT-T  A-Time  L-Time
    -----  ------  -------      ----          ---------      -----  ------  ------
    up     IKEv2   AES_CBC_128  HMAC_SHA1_96  MODP_1024      no     381     0

vyos@vyos:~$ show vpn ipsec sa
Connection                    State    Uptime    Bytes In/Out    Packets In/Out    Remote address    Remote ID    Proposal
----------------------------  -------  --------  --------------  ----------------  ----------------  -----------  ------------------------
peer_192-168-151-11_tunnel_0  up       6m30s     0B/0B           0/0               192.168.151.11    N/A          AES_CBC_128/HMAC_SHA1_96

実行結果の確認(パケットの確認)

ISAKMPプロトコルのやり取りが行われていることが確認できます。
(パケットは本稿最後の方にGITのリンクを記載します。)

192.168.181.101(HTTPクライアント)から192.168.161.101(HTTPサーバ)にアクセスしたときパケットが暗号化されていることを確認する

vyatta03.sh
[root@localhost ~]# curl http://192.168.161.101
<h1>hello world</h1>

実行結果の確認(パケットの確認)

前回はSYN、SYN/ACK、ACK、TCPパケットの中身がのぞけたのに対して、ESPで暗号化されていることがわかります。

Wiresharkパケット

今回の環境構築で取得したWiresharkのパケットを下記gitにアップロードしたので、興味のある方はご参照ください。
Qiita_004_Packet on Git

今回は、GREでトンネルを作っただけなので、パケットキャプチャによって通信の中身が丸見えというのがよくわかりました。
次回は、vyOS01とvyOS3間でIPsecを張って、vyOS2でパケットキャプチャしても通信の中身を見えないようにします。

さいごに

今回は通信経路上で暗号化されることを確認するためにIPsecの設定を行いましたが、次回移行は通信内容を確認するためにIPsecの設定は行わない環境を利用で検証していきます。
実運用では盗聴されたら問題ありますが、検証環境では通信内容を把握しておく必要がありますからね。

次回はElastic Searchを構築し、パケットをのぞいてみます。

参考リンク

【vyos on VMware Playerでネットワークのお勉強】(003) BGP通信
【vyos on VMware Playerでネットワークのお勉強】(002) OSPF通信の疎通
【vyos on VMware Playerでネットワークのお勉強】(001)ご挨拶