🔌 IPv6リンクローカルだけのホストをインターネットへ出すには
IPv6Link-LocalNAT64/DNS64Proxy
結論: IPv6リンクローカル(fe80::/10)だけを持つホストのパケットはルータを越えてはいけないため、IPレイヤのルーティングではインターネットに到達できません。実現するには、次のいずれかの方法を用います。
- ULA + DNS64/NAT64(推奨) — ホストは
fd00::/8などの ULA のみを持ち、ゲートウェイが v6→v4 変換して外の IPv4 インターネットへ接続。 - アプリ層プロキシ — 同一リンク上に HTTP/HTTPS プロキシや SOCKS5 を立て、クライアントは IPv6リンクローカルでプロキシへ接続。プロキシ経由で外に出る。
🗺️ 想定トポロジ
[HOSTA/B] ---[L2]--- [INSIDE GW] --- (outside: IPv4-only) --- Internet
| IPv6: fe80::/64 (リンクローカルのみ) ^
| |
+-- 同一リンク上で到達できるのはINSIDE GWまで --+
リンクローカルは同一リンク内限定。デフォルトゲートウェイの next-hop をリンクローカルに指定すること自体は可ですが、送信元がリンクローカルのままではルータ転送不可です。
✅ 方法1:ULA + DNS64/NAT64(推奨)
クライアントは ULA のみ。ゲートウェイは inside で IPv6/IPv4 デュアル、outside は IPv4 のみで構いません。
構成イメージ
┌──────────────────────────────────────────────────────────┐
│ Inside (dual) Outside (IPv4-only) │
│ │
│ [HOSTA/B] ULA: fd00:1::/64 │
│ | │
│ ┌───┴──── L2 ───┐ │
│ │ [Gateway] v6: fd00:1::1 / v4: 192.0.2.2 │
│ │ - DNS64 (e.g., Unbound) │
│ │ - NAT64 (e.g., Jool/Tayga) → 64:ff9b::/96 │
│ └───────────────┬─────────────────────────────────────────────┘
│ NAT44/MASQUERADE → Internet (IPv4-only)
└──────────────────┘
RA/DHCPv6(dnsmasq例)
# /etc/dnsmasq.d/ipv6.conf
interface=eth0
enable-ra
# ULAを配布(SLAAC)
dhcp-range=::,constructor:eth0,ra-only,64,12h
# DNSはゲートウェイのULAに
dhcp-option=option6:dns-server,[fd00:1::1]
DNS64(Unbound例)
# /etc/unbound/unbound.conf.d/dns64.conf
server:
interface: fd00:1::1
do-ip6: yes
module-config: "dns64 validator iterator"
dns64:
prefix: 64:ff9b::/96
NAT64(Jool例)
# 例:プールは Well-Known Prefix を使用
jool instance add --netfilter --pool6 64:ff9b::/96
jool -t nat64 --enable
# outside側は従来のIPv4 NAT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
メリット: クライアントは v6-only でOK(v4不要)/outsideはIPv4-onlyでOK/大半のアプリが透過的に動作
デメリット: ゲートウェイでDNS64/NAT64の用意が必要
🧰 方法2:アプリ層プロキシ(リンクローカル接続)
IPレイヤの転送は諦め、同一リンク上のプロキシへリンクローカルで接続します。
Squid(ゲートウェイ側)
# squid.conf(リンクローカルにバインド)
http_port [fe80::1%eth0]:3128
acl localv6 localnet
http_access allow localv6
クライアント設定例(ブラウザ)
# URL欄/OS設定でプロキシ指定
http://[fe80::1%eth0]:3128
# Windows 例: %Ethernet / macOS: %en0 / Linux: %eth0 など
SOCKS5 例(danted)
# /etc/danted.conf(要件に合わせて調整)
logoutput: /var/log/danted.log
internal: [fe80::1%eth0] port = 1080
external: eth1 # IPv4 アップリンク側
method: username none
clientmethod: none
user.notprivileged: nobody
メリット: クライアントはLLAのみのまま/構築が比較的容易
デメリット: プロキシ対応アプリに限定/名前解決の所在(クライアント or プロキシ)を要設計
🔎 よくある質問
| 質問 | 回答 |
|---|---|
| デフォルトゲートウェイにリンクローカルを指定しても良い? | はい、next-hop としての指定は可能です。ただし送信元アドレスがLLAのままではルータは転送しません。ULAやGUAを持たせる必要があります。 |
| outsideがIPv4-onlyでも大丈夫? | 方法1(DNS64/NAT64)なら問題ありません。ゲートウェイが v6→v4 変換します。 |
| 名前解決は? | 方法1ではDNS64がAAAAを合成、方法2ではクライアントまたはプロキシ側で行います。 |
📘 まとめ
リンクローカルのみではルーティング不可。
すべてのアプリをシンプルに動かすなら ULA + DNS64/NAT64。
最小構成でブラウジング等なら アプリ層プロキシ が実用的です。
すべてのアプリをシンプルに動かすなら ULA + DNS64/NAT64。
最小構成でブラウジング等なら アプリ層プロキシ が実用的です。
このページは、既存の社内ドキュメントの体裁に合わせた高コントラスト&プレーン背景で作成しています。