VyOS 1.4でNAT66を利用した通信ができなくなる

こんにちは。tukapiyoです。

VyOS 1.3.3 LTSからVyOS 1.4 LTSへアップデートした後、概ね正常に動作しているのですが、NAT66での通信ができないことに気づきました。
パケットキャプチャなどをした結果、うちの環境では原因が特定でき、コンフィグ修正により解消しましたので紹介します。

構成

構成を単純化したイメージ図が以下になります。

LAN側(eth1)ではISPから割り当てられているグローバルIPv6アドレスを利用しておらず、別の(HE.netから割り当てられた)グローバルIPv6アドレスを利用しています。
ルーティング的に、LAN側のグローバルIPv6を利用して通信を行うことができないので、IPv4と同様にNATをしてWAN側(eth0)のアドレスに送信元を変換して通信していました。

ちなみにIPv4では割り当てられるグローバルIPが少ないことからmasquerade(NAPT)をすることが多いですが、NAT66ではネットワーク部の変換(ホスト部はそのまま)を行うように設定しています。
たとえば、bbbb::123/64であれば、aaaa::123/64に変換するというイメージです。

NAT66の通信ができなくなる

VyOS 1.4 LTSへアップデートしたことによって、LAN側からのIPv6の通信ができなくなったことに気づきました。
調査を行った結果、以下の様な事象であることを確認しました。

  • VyOSからのIPv6通信は可能(eth0に割り当てられたIPv6アドレスを利用)
  • LAN側からのIPv6通信は不可能
  • NAT66の処理自体は行われていそう
    • show nat66 source translationsより確認
  • Firewallで落とされているわけでもなさそう
    • show firewall ipv6 name XXXXでカウントを確認
  • LAN側からpingを打ちながら、VyOS上でtcpdumpでパケットを確認
    • Ping先からEcho Replyが返ってこない
    • 送られてくるNeighbor Solicitationに対して、VyOSがNeighbor Advertisementを返していない
  • VyOS 1.3.3 LTSに戻せば通信可能
  • VyOS 1.4 LTSへアップデートした直後は通信可能だが、しばらくすると通信できなくなる

太文字にした2つの文章が重要で、対向側の機器がNAT66によって変換したIPv6アドレスを持つ機器がどれか特定できていないのではないかと推測しました。

コンフィグを確認

VyOS 1.4 LTSへアップデートしたことによってコンフィグ体系が再整理されていますが、それ以外に追加されたコンフィグがあることに気づきました。
(実際には、追加されていること自体はアップデート直後のコンフィグ確認で気づいていました…)

それがこれです。

set service ndp-proxy interface eth0 prefix bbbb::/64

ndp-proxyというセクションの説明は、現時点でVyOS 1.4及びVyOS 1.5のドキュメントには記載がありません。
LTSでそれはどうなのかという気持ちはさておき、ndpとはNeighbor Discovery Protocolのことで、それっぽい雰囲気がします。

ndp-proxyの正確な機能は分かりませんがproxy-arpと同じようなものだと想定すると、Neighbor Discoveryの代理応答のようなイメージでしょうか。
とすれば、上記のコンフィグはbbbb::/64に対するNDの代理応答を行う設定だと推測されます。
しかしこのネットワークでは、eth0からbbbb::/64からの通信やbbbb::/64への通信は発生しません、というかできないのでNAT66をしているわけです。

解決へ

上記の推測を元に、ndp-proxyの設定自体を削除してみたり、以下の様にdisableの設定を入れてみたりしたものの事象は解決しませんでした。

set service ndp-proxy interface eth0 disable

そこで、aaaa::/64のNDを応答してほしいので以下の設定を入れてみました。

set service ndp-proxy interface eth0 prefix aaaa::/64

ndp-proxyeth0のプリフィックスを設定したところ、NAT66の通信が正常に行えるようになりました。

まとめ

VyOS 1.3.3 LTSからVyOS 1.4 LTSへコンフィグ変換が走る際に、nat66のコンフィグがあるとndp-proxyのコンフィグを自動追加するようになっているのかもしれません。
もしかしたら、router-advertの設定が影響しているかも、そこまでは確認しませんでした。

いずれにせよ、変換前のプリフィックスがndp-proxyで設定されてしまい意味の無い(そして通信できない)状況になったようです。

NAT66を利用している人は少ないと思いますが、もし同じ状況に陥った方がいれば参考にしてみて下さい。

おすすめ

コメントを残す

Amazon プライム対象