joolで linux にCLAT をつけてIPv6-only with NAT64 環境からでもIPv4パケットを送れるようにする

コマンド (ChatGPTに説明のコメントを書いてもらった)

jool_siitで変換を行なって、ネットワークネームスペースでIPv4アドレスをもつ仮想インターフェースを作成する。

準備で jool_siitを使えるようにする必要があります。

GitHub - NICMx/Jool: SIIT and NAT64 for Linux こちらから。

2001:db8::/64 をそのネットワークが使用しているアドレスたいに変更すればいい。

# clat-netnsという名前のネットワークネームスペースを作成
ip netns add clat-netns

# HOST_TO_CLAT4とCLAT_IPv4_LINKという名前のvethペア(仮想イーサネットペア)を作成
ip link add name HOST_TO_CLAT4 type veth peer CLAT_IPv4_LINK
# CLAT_IPv4_LINKをclat-netnsネットワークネームスペースに割り当て
ip link set dev CLAT_IPv4_LINK netns clat-netns
# HOST_TO_CLAT4デバイスをアクティブにする
ip link set up dev HOST_TO_CLAT4

# CLAT_IPv6_LINKという名前のipvlan(IPバーチャルLAN)を作成し、特定のインターフェースにリンク
ip link add name CLAT_IPv6_LINK link <interface> type ipvlan
# CLAT_IPv6_LINKをclat-netnsネットワークネームスペースに割り当て
ip link set dev CLAT_IPv6_LINK netns clat-netns

# 特定のインターフェース上でIPv6のプロキシARPを設定
ip -6 neigh add proxy 2001:db8::c1a7 dev <interface>
# プロキシNDPを有効にするシステム設定
sysctl net.ipv6.conf.<interface>.proxy_ndp=1

# HOST_TO_CLAT4デバイスIPv4アドレスを割り当て
ip -4 address add 192.0.0.1/30 dev HOST_TO_CLAT4
# IPv4のデフォルトルートを設定
ip -4 route add default via 192.0.0.2 dev HOST_TO_CLAT4

# clat-netns内でCLAT_IPv4_LINKデバイスをアクティブにする
ip netns exec clat-netns ip link set up dev CLAT_IPv4_LINK
# clat-netns内でCLAT_IPv6_LINKデバイスをアクティブにする
ip netns exec clat-netns ip link set up dev CLAT_IPv6_LINK
# clat-netns内のCLAT_IPv4_LINKデバイスIPv4アドレスを割り当て
ip netns exec clat-netns ip -4 address add 192.0.0.2/30 dev CLAT_IPv4_LINK
# clat-netns内のCLAT_IPv6_LINKデバイスIPv6アドレスを割り当て
ip netns exec clat-netns ip -6 address add 2001:db8::c1a7 dev CLAT_IPv6_LINK
# clat-netns内でIPv6のデフォルトルートを設定
ip netns exec clat-netns ip -6 route add default dev CLAT_IPv6_LINK
# clat-netns内でjool_siitのインスタンスを作成し、ネットフィルタリングとアドレスプールを設定
ip netns exec clat-netns jool_siit instance add --netfilter --pool6 64:ff9b::/96
# clat-netns内でjool_siitのEAMT(Explicit Address Mappings Table)を設定
ip netns exec clat-netns jool_siit eamt add 2001:db8::c1a7 192.0.0.1

以下のコマンドを参考にした。

CLAT for Linux using Jool and ipvlan PoC · GitHub