🎼

Vyos1.5 NAT66を試してみた

2024/12/18に公開

vyos1.5 NAT66を試してみた。

エーピーコミュニケーションズ Advent Calendar 2024 18日目

極めて限定的な場面ですが、Vyosに建てているVPNのクライアント側でIPv6が必要になってしまった。
試してみたので、以下に記載する。


環境図

Linode(VPS)上にVyosがある。
モバイル端末は家の環境を参照したい時等に、このLinode上のVyosを経由して家の環境に到達できるよう設定されている。
そしてこのモバイル端末は、Linodeから割り当てられたIPv4アドレスを用いてインターネットに出て行っている。

このモバイル端末から、VPS上のvyosに振られているIPv6アドレスからインターネットに出ようという記事になっている。

下記バージョン

vyos@vyos:~$ show version
Version:          VyOS 1.5-rolling-202412140007
vyos@vyos:~$ show version all | grep wireguard
ii  wireguard-tools                      1.0.20210914-1+b1                amd64        fast, modern, secure kernel VPN tunnel (userland utilities)

準備編

IPv6ユニークローカルアドレス設計

モバイル端末に割り振るIPを設計する。
IPv6のプライベート環境で使用できるIPは「FD00::/8」となっている。[1]

そのため、このレンジからお好みで/64切り出して対応することとする。
今回は「fd00:105::/64」を使用する。

WireGuardにIPv6を割り振り

次にWireGuardにIPv6を割り振る。
Linode上のVyosには以下を設定。

vyos@vyos# set interfaces wireguard wg2 address 'fd00:105::172:18:76:17/64'

モバイル端末側は以下を設定した。
スマホで手打ちするのが嫌だったので、WindowsのWireGuardで作成してスマホにインポートを行った。

[Interface]
PrivateKey = ***************
Address = 172.18.76.17/32,fd00:101::172:18:76:17/128
DNS = [お好み]

[Peer]
PublicKey = ***************
AllowedIPs = 0.0.0.0/0,::/0
Endpoint = [Linode上のVyosのグローバルアドレス]
PersistentKeepalive = 25

インターネットIDの箇所の設計は迷ったが、RFC 6052的な感じにした。[2]

Linode IPv6受け入れ

次にLinodeのIPv6を受け入れる。
Linodesの最低構成Nanode1GBを契約してもIPv6が1つ割り振られる。
契約したLinodesにはRAで降ってくるので、以下をLinode上のVyosに設定した。

vyos@vyos# set interfaces ethernet eth0 ipv6 address autoconf

コミットを行うとすぐにIPv6アドレスが降られる。
ルートも自動で追加されているので手動で追加を行う必要はない。

確認するためのコマンドは以下になる。

vyos@vyos:~$ show interfaces detail 
vyos@vyos:~$ show ipv6 route

Vyos NAT66設定

上記でようやく準備が整った。
以下を参考にしつつ、設定を投入した。
https://docs.vyos.io/en/latest/configuration/nat/nat66.html

set nat66 source rule 100 outbound-interface name 'eth0'
set nat66 source rule 100 source prefix 'fd00::/8'
set nat66 source rule 100 translation address 'masquerade'

fd00/8すべてが外に出れるように設定を投入したが、実運用を考えると存在するセグメント(設計したセグメントのみ)をルールのソースにした方が良いと思われる。

設定の中身は下記で確認できる。

vyos@vyos:~$ show nat66 source rules 
Rule    Source     Destination    Proto    Out-Int    Translation
------  ---------  -------------  -------  ---------  -------------
100     fd00::/8   ::/0           IP6

設定が終わってコミットできたら接続のテストを行う。
確認してみるとLinodeから出れているようでうまくいった。
下記で確認。
https://bgp.he.net

脚注
  1. 詳細は以下を確認
    https://ja.wikipedia.org/wiki/ユニークローカルアドレス ↩︎

  2. 英語 https://datatracker.ietf.org/doc/html/rfc6052
    翻訳 https://tex2e.github.io/rfc-translater/html/rfc6052.html ↩︎

株式会社エーピーコミュニケーションズ

Discussion