ipv6のNAT転送で、NTTフレッツ倶楽部にログインできたらいいな。
LAN内部にグローバルのv6 アドレスを割り当てたくない。
IPv6グローバルを割り当てるとフォールバックでイラッとする。
WindowsにULAを割当て、ルーターからNATしてv6通信をすることにした。
フォールバックさせたくない、でもフレッツ網内と通信はしたい(フレッツClubログイン回線認証はしたい)というレアケースに対応した。
windows --- ルーター間
windows とルーターの間は fd03:ac7f:3852:67bb::/64 でネットワークしている。
windows は、 fd03:ac7f:3852:67bb::3
ルーターは、 fd03:ac7f:3852:67bb::1
IPv6をそれぞれに、割り当てて、接続することにする。
window にIPアドレスを割り当てる。
netsh interface ipv6 add address eth01 fd03:ac7f:3852:67bb::3
Windows側から、ルーターをデフォルトGWにする。
netsh interface ipv6 add route ::/0 eth01 fd03:ac7f:3852:67bb::1
ルーター内部動作
ルーターでは、WAN(eth1) / LAN ( eth0 )を定義している
ルーターに v6 アドレスを割り当てる
ip addr add fd03:ac7f:3852:67bb::1 dev eth0
ルーター側で、LAN→WANのv6 をNATする。
サンプルは、default allow のネットワークなので-A
にしている。Default Deny のネットワークであれば、-I
にしてルール先頭に加えること。
LAN_IF=eth0 WAN_IF=eth1 ip6tables -A FORWARD -i $LAN_IF -o $WAN_IF -j ACCEPT ip6tables -A FORWARD -i $WAN_IF -o $LAN_IF -j ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED ip6tables -t nat -A POSTROUTING -o $WAN_IF -d ::/0 -j MASQUERADE
IPv6のNATは最近の ip6tables でサポートされている。 「IPv6にはNATがない」なんて昔話なんですね。
ルーター側で、フレッツへの経路を追加する。
たとえば、フレッツ倶楽部の経路を作成し、Windowsからフレッツログインができるようにする。
ルーターの経路を作る。
ゲートウェイのアドレスは fe80 のやつでいい。
WAN_IF=eth1 GW=$([[ $(ip neigh show dev $WAN_IF ) =~ (fe80[0-9a-f:]+) ]] ; echo ${BASH_REMATCH}) ip route add default via $GW dev eth1 metric 1024 pref medium
v6ではゲートウェイをneigh で示されたfe08アドレス宛に投げつけておけばいいので便利だ。
WindowsがNATでv6グローバルと通信できる
NAT通信できるので、Windowsがグローバルv6 アドレスをもたなくても、NATでv6グローバルと通信ができる。
メリット
- 冒頭にも書いたが、NATすることで、V6のGUAを割当しなくていい。
- グローバルなv6アドレスがなくULAだけだと、フレッツ閉域網フォールバックが発生しなくなる。
- v6の外部との通信を、ルーターの経路表でも制御できるようになる。
- v6のあれこれ、特に近隣探索を覚えなくていい。
v6アドレスでNATができると、「フレッツ固有」のグローバルIPに縛られずに済む。 VPN経由で通信しても接続先の拠点のグローバルなv6アドレスで通信ができるようになる。 たとえば、フレッツ回線認証のようなv6アドレス認証は、接続先のv6アドレスで認証される。
そのため、IPアドレス範囲でのファイアウォールが記述しやすくなる。
NTT のフォールバック問題
https://www.geekpage.jp/blog/?id=2012/3/28/1
NGNのv6フレッツは、グローバルなアドレスをRA・DHCPv6してくるので、WindowsやiOSはv6通信を試みる。 v6 接続が失敗してはじめて4v接続が開始される。つまり、初回接続が極めて遅い問題がある。
ちょっと面倒な問題なので、v6をストップして運用するかIPoEを申し込むのが手っ取り早い解決策である。
v6網内通信をしたい
v6をオフにして運用していたとしても、v6網内折返しは使いたい。
あれこれ考えてみて、NATゲートウェイにすることにした。
v6でNATなどと思うんだけど、壊れたv6へ出ていくことを考えればGUAを割り振って無ければいいんじゃないかと。
フレッツclub 西日本と通信するには
西日本の場合、つぎのアドレスと通信できれば回線認証が通る。
2001:a7ff:ff63:1::a 2001:a7ff:ff47:101::1
次の経路を、以下のようにNATルーターの経路表へ追記しておくと、どこからでもNTT西日本フレッツ・クラブへログインができる。
WAN_IF=eth1 GW=$([[ $(ip neigh show dev $WAN_IF ) =~ (fe80[0-9a-f:]+) ]] ; echo ${BASH_REMATCH}) ## ip -6 route add from ::/0 to 2001:a7ff:ff63:1::a via $GW dev eth1 ip -6 route add from ::/0 to 2001:a7ff:ff47:101::1 via $GW dev eth1
ULAでNATする例として、網内折返しのサンプルを使いづらいのでフレッツの回線認証を例とした。NATができるといういいサンプルですね。
DNSホストの解決を上書きする。などAAAAの解決を図る必要がある。
www.flets-west.jp 2001:a7ff:ff47:101::1 aaaa
Adguard でv6フォールバックを防いでるときなど、このあたりを注意しておく
2021-08-17
修正