【Proxmox環境】VyOS間でIPv6 GRE over IPsecを構築してみた記録

# はじめに
これが初めてのQiitaでの記事になります。
今回は、最近導入したProxmox環境を使用してVyOS間でIPv6 GRE over IPsecを構築したので勉強メモとして記事を書いてみました。

# 環境
環境は以下の通りです。
| OS                  | ホスト名      | 目的                   |
| ------------------- | ------------ | ----------------------|
| VyOS 1.5                | Vyos-RT1     | 設定の検証用            |
| VyOS 1.5              | Vyos-RT2     | 設定の検証用            |
| ubuntu22.04 desktop |  ----------  | Wiresharkでパケット見る用|

# 環境構築手順
### 1.VyOS isoの入手
こちらより``` vyos-1.5-rolling-202502030007-generic-amd64.iso ```を取得します。

https://vyos.net/get/nightly-builds/
### 2.Proxmoxへのアップロード
以下の順で行います。
まず、isoファイルをアップロードします。

![スクリーンショット 2025-02-08 21.51.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/83cab368-c558-a05d-2e6e-35ce89a3cd95.png)

### 3.VM作成

次に、Create VMボタンからVMを作成し、ISO imageはアップロードしたやつを選びましょう。そのほかはデフォルトのままで大丈夫です。

![スクリーンショット 2025-02-08 21.53.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/288c74d1-5ad4-af59-2aa5-a404aa7dd7da.png)
![スクリーンショット 2025-02-08 21.54.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/afa14e2d-ec5b-418b-d0f3-b911c87867ec.png)
### 4.起動

startボタンを押下し、無事に起動できると以下のようになります。
以下でログインします。
login:vyos
pass:vyos

![スクリーンショット 2025-02-08 21.59.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/25496ac5-e9fc-60de-3069-14094c16b595.png)

その後の設定は以下を参考ください。

https://qiita.com/h_tyokinuhata/items/f1f6da1ba9e1265b4192

### 5.vmbrの作成
最後にvmbrを作成します。これは、VyOS同士を繋げるケーブルにみたいな認識で大丈夫です。(誰かに怒られそうだな、、、)
とりあえず、このままCreateします。そして、Apply Configurationを押下します。最後に、作成したvmbrをVyOS-RTに割り当てます。これで、VyOS上でeth??として認識されるはずです。(show interfacesで確認可能です)

![スクリーンショット 2025-02-08 22.02.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/5b06c20d-cfa9-b02d-b615-331d30fd4850.png)

![スクリーンショット 2025-02-08 22.07.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/5709cb70-f194-6ba1-8d2e-8367983c860d.png)


# 論理構成
論理構成は以下の通りです。
![スクリーンショット 2025-02-08 17.09.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/2e893630-8b93-9302-979a-3d21897d39aa.png)

今回、パケットがIPsecによって暗号化されているかを確認するためにUbuntu(Bridge)を挿入しました。ブリッジ化に使用したコマンド以下の通りです。
<details><summary>ブリッジ化コマンド</summary>

```
sudo ip link add br0 type bridge
sudo ip link set ens19 master br0
sudo ip link set ens20 master br0
sudo ip link set dev ens19 promisc on
sudo ip link set dev ens20 promisc on
sudo ip link set br0 up
sudo ip link set ens19 up
sudo ip link set ens20 up
```
</details>

# 目的
- Vyos-RT1<->VyosRT2間でGREトンネルをはり、OSPFv3を使用してULA(ユニークローカルアドレス)の経路を広告し合うこと
- fd00:1::/64 <-> fd00:2::/64 のパケットをIPsecで暗号化すること

# GREの設定
GREの設定をはじめに行い、GREでカプセル化されているかを確認します。設定自体はそれほど難しくありませんが、```encapsulation gre``` ではなく ```encapsulation ip6gre``` を行わないと、IPv4アドレスなくないすか？となりますのでご注意ください。
(IPv4でカプセル化したい場合は、IPv4アドレスを設定し```gre```で指定してください)
<details><summary>Vyos-RT1</summary>

```
#トンネルで使用する実インターフェイスのipv6アドレス
set interfaces tunnel tun1 source-address 2001::1/64
set interfaces tunnel tun1 remote 2001::2/64

#トンネルのipv6アドレス
set interfaces tunnel address fd00::1/64

#gre設定(ipv6使用)
set interfaces tunnel encapsulation ip6gre
```
</details>

<details><summary>Vyos-RT2</summary>

```
set interfaces tunnel tun1 source-address 2001::2/64
set interfaces tunnel tun1 remote 2001::1/64
set interfaces tunnel address fd00::2/64
set interfaces tunnel encapsulation ip6gre
set set protocols static route6 fd00:1::/64 next-hop fd00::1
```
</details>

#### Vyos-RT1からfd00::2へpingで疎通確認
![スクリーンショット 2025-02-08 18.11.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/c5a763a9-ab15-5c02-a40d-10e596e8d029.png)
⇧画像より、ICMPv6パケットがGREでカプセル化されていることが確認できる。

# IPsec+OSPFv3の設定
ここでは、以下のポリシーに合わせて設定を行いました。
IKEポリシー
| 設定項目        | 設定内容                   |
| -------------- | -------------------------|
| hash           | sha256                   |
| encryption     | aes256                   | 
| DH Group       | 14                       | 
| authentication | preshared-key (pass:vyos)|

ESPポリシー
| 設定項目      | 設定内容 |
| ------------ | -------|
|hash          | sha256 |
|encryption    | aes256 |

<details><summary>Vyos-RT1</summary>

```
##IPsecの設定
#IKE設定
set vpn ipsec ike-group IKE-Policy proposal 1 hash sha256
set vpn ipsec ike-group IKE-Policy proposal 1 encryption aes256
set vpn ipsec ike-group IKE-Policy proposal 1 dh-group 14


#ESP設定
set vpn ipsec esp-group ES-Policy proposal 1 hash sha256
set vpn ipsec esp-group ES-Policy proposal 1 encryption aes256


#事前鍵設定
set vpn ipsec authentication psk Peer-RT2 secret vyos
set vpn ipsec authentication psk Peer-RT2 id 2001::1
set vpn ipsec authentication psk Peer-RT2 id 2001::2


#認証設定
set vpn ipsec site-to-site peer Peer-RT2 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer Peer-RT2 authentication local-id 2001::1
set vpn ipsec site-to-site peer Peer-RT2 authentication remote-id 2001::2

#実インターフェイスのIPv6指定
set vpn ipsec site-to-site peer Peer-RT2 local-address 2001::1
set vpn ipsec site-to-site peer Peer-RT2 remote-addresss 2001::2

#IKEを適用
set vpn ipsec site-to-site peer Peer-RT2 ike-group IKE-Policy

#トンネルへの設定反映
set vpn ipsec site-to-site peer Peer-RT2 tunnel 1 esp-group ES-Policy

#暗号化対象のプリフィックス指定
set vpn ipsec site-to-site peer Peer-RT2 tunnel local prefix fd00:1::/64
set vpn ipsec site-to-site peer Peer-RT2 tunnel remote prefix fd00:2::/64


#OSPFv3の設定
set protocols ospfv3 interface tun1 area 0
set protocols ospfv3 interface lo area 0

```
</details>

<details><summary>Vyos-RT2</summary>

```
##IPsecの設定
#IKE設定
set vpn ipsec ike-group IKE-Policy proposal 1 hash sha256
set vpn ipsec ike-group IKE-Policy proposal 1 encryption aes256
set vpn ipsec ike-group IKE-Policy proposal 1 dh-group 14


#ESP設定
set vpn ipsec esp-group ES-Policy proposal 1 hash sha256
set vpn ipsec esp-group ES-Policy proposal 1 encryption aes256


#事前鍵設定
set vpn ipsec authentication psk Peer-RT1 secret vyos
set vpn ipsec authentication psk Peer-RT1 id 2001::2
set vpn ipsec authentication psk Peer-RT1 id 2001::1


#認証設定
set vpn ipsec site-to-site peer Peer-RT1 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer Peer-RT1 authentication local-id 2001::2
set vpn ipsec site-to-site peer Peer-RT1 authentication remote-id 2001::1

#実インターフェイスのIPv6指定
set vpn ipsec site-to-site peer Peer-RT1 local-address 2001::2
set vpn ipsec site-to-site peer Peer-RT1 remote-addresss 2001::1

#IKEを適用
set vpn ipsec site-to-site peer Peer-RT1 ike-group IKE-Policy

#トンネルへの設定反映
set vpn ipsec site-to-site peer Peer-RT1 tunnel 1 esp-group ES-Policy

#暗号化対象のプリフィックス指定
set vpn ipsec site-to-site peer Peer-RT1 tunnel local prefix fd00:2::/64
set vpn ipsec site-to-site peer Peer-RT1 tunnel remote prefix fd00:1::/64


#OSPFv3の設定
set protocols ospfv3 interface tun1 area 0
set protocols ospfv3 interface lo area 0

```
</details>

# 結果

#### IKE SAの確認

<details><summary> show vpn ike sa</summary>

```show vpn ike sa```より、ルータ間でIKE SAが確立されていることがわかる。

![スクリーンショット 2025-02-08 20.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/8bcfc5c1-2d4d-168b-10fc-6ab7a17fb8a7.png)

![スクリーンショット 2025-02-08 20.39.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/16ed16f9-e850-9229-3243-99bc8c981547.png)

</details>


#### IPsec SAの確認

<details><summary> show vpn ipsec sa</summary>

```show vpn ipsec sa```より、IPsec SAが確立されていることがわかる。

![スクリーンショット 2025-02-08 20.44.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/1a6cefcf-5ea0-81ff-a4c5-19f4fbfba4b4.png)

![スクリーンショット 2025-02-08 20.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/3f29b2e7-a910-3151-2817-eb3577d767a2.png)

</details>


#### GREの確認

<details><summary> show interfaces tuunel tun1</summary>

```show interfaces tunnel tun1```より、GREトンネルが確立されていることがわかる。

![スクリーンショット 2025-02-08 20.47.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/d8010154-1ad5-589b-c7d0-15331bad3704.png)

![スクリーンショット 2025-02-08 20.48.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/f04cb2c5-d466-b484-0bd4-e91f08d09b52.png)

</details>

#### OSPFv3ルート

<details><summary> show ipv6 ospfv3 route</summary>

```show ipv6 ospfv3 route```より、OSPFv3での経路交換がうまく行っていることがわかる。また、Wiresharkでのキャプチャ結果より、HelloパケットがGREでカプセル化されていることが確認できる。

![スクリーンショット 2025-02-08 20.41.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/1aab8545-3169-80a2-047a-8c31f2d9877e.png)

![スクリーンショット 2025-02-08 20.42.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/efbf28a3-1488-c41c-7aec-f3de5d5f68a1.png)

![スクリーンショット 2025-02-08 21.02.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/6426a1e1-84e2-ef6f-66f3-a5fbcedb5d4f.png)

</details>


#### ```fd00:1::1/64``` から ```fd00:2::1/64``` へping

``` ping fd00:2::1 source-address fd00:1::1```を行った結果より、疎通できていることが確認できた。またWiresharkでのキャプチャ結果より、ICMPv6パケットが暗号化されていることも確認できた。以上より、GRE over IPsecの設定ができていることを確認できる(多分)

![スクリーンショット 2025-02-08 20.23.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/e1710fd0-f466-2274-c5a0-5e644ba9591e.png)


![スクリーンショット 2025-02-08 20.25.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4005556/a6dee46b-0405-3511-12bf-469c603dc94b.png)

# 参考資料
https://docs.vyos.io/ja/latest/configuration/vpn/site2site_ipsec.html

https://debslink.hatenadiary.jp/entry/20220130/1643510508