はじめに
これが初めての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
を取得します。
2.Proxmoxへのアップロード
以下の順で行います。
まず、isoファイルをアップロードします。
3.VM作成
次に、Create VMボタンからVMを作成し、ISO imageはアップロードしたやつを選びましょう。そのほかはデフォルトのままで大丈夫です。
4.起動
startボタンを押下し、無事に起動できると以下のようになります。
以下でログインします。
login:vyos
pass:vyos
その後の設定は以下を参考ください。
5.vmbrの作成
最後にvmbrを作成します。これは、VyOS同士を繋げるケーブルにみたいな認識で大丈夫です。(誰かに怒られそうだな、、、)
とりあえず、このままCreateします。そして、Apply Configurationを押下します。最後に、作成したvmbrをVyOS-RTに割り当てます。これで、VyOS上でeth??として認識されるはずです。(show interfacesで確認可能です)
論理構成
今回、パケットがIPsecによって暗号化されているかを確認するためにUbuntu(Bridge)を挿入しました。ブリッジ化に使用したコマンド以下の通りです。
ブリッジ化コマンド
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
目的
- Vyos-RT1<->VyosRT2間でGREトンネルをはり、OSPFv3を使用してULA(ユニークローカルアドレス)の経路を広告し合うこと
- fd00:1::/64 <-> fd00:2::/64 のパケットをIPsecで暗号化すること
GREの設定
GREの設定をはじめに行い、GREでカプセル化されているかを確認します。設定自体はそれほど難しくありませんが、encapsulation gre
ではなく encapsulation ip6gre
を行わないと、IPv4アドレスなくないすか?となりますのでご注意ください。
(IPv4でカプセル化したい場合は、IPv4アドレスを設定しgre
で指定してください)
Vyos-RT1
#トンネルで使用する実インターフェイスの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
Vyos-RT2
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
Vyos-RT1からfd00::2へpingで疎通確認
⇧画像より、ICMPv6パケットがGREでカプセル化されていることが確認できる。
IPsec+OSPFv3の設定
ここでは、以下のポリシーに合わせて設定を行いました。
IKEポリシー
設定項目 | 設定内容 |
---|---|
hash | sha256 |
encryption | aes256 |
DH Group | 14 |
authentication | preshared-key (pass:vyos) |
ESPポリシー
設定項目 | 設定内容 |
---|---|
hash | sha256 |
encryption | aes256 |
Vyos-RT1
##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
Vyos-RT2
##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
結果
IKE SAの確認
IPsec SAの確認
GREの確認
OSPFv3ルート
show ipv6 ospfv3 route
show ipv6 ospfv3 route
より、OSPFv3での経路交換がうまく行っていることがわかる。また、Wiresharkでのキャプチャ結果より、HelloパケットがGREでカプセル化されていることが確認できる。
fd00:1::1/64
から fd00:2::1/64
へping
ping fd00:2::1 source-address fd00:1::1
を行った結果より、疎通できていることが確認できた。またWiresharkでのキャプチャ結果より、ICMPv6パケットが暗号化されていることも確認できた。以上より、GRE over IPsecの設定ができていることを確認できる(多分)
参考資料