フレッツ光クロス(コラボ enひかりクロス V6プラス 固定IP)でプレフィックスが変更されたので、ルータの見直しをしているのですが、LAN側にULAだけを割り振っていると例えばWindows10/11は、IPv6に接続できているのにIPv6接続が"ネットワークアクセスなし"と表示され気持ち悪いことに気が付きました。とはいえ、GUAプレフィックスが変更される場合があり、そのうえGUAを割り当てたくないサーバ(例えばdns serverやsambaなど)もあるので、どうしたものかと思いつつ、思い切ってOpenWRTで対応してみることにしました。構成は以下の通りです。(2024/06/04修正のため差替)
ただし、先に断っておきますが、今回の設定では残念ながらプレフィックスが変更されると再起動・再認証をする必要があります。また、対向ルータのリンクローカルアドレスが変更されると、今のところ修正が必要になりますのでご注意ください。また、フレッツ光クロスの場合、ひかり電話あり無しにかかわらず、ONU直下ではRAでプレフィックスは降りてきません。つまりそのままだとWAN側にGUAが割り当てられません。そのため、ipip6.shの一部を修正し、WAN側ではなくLAN側のGUAを参照するようにしました。
次に /lib/functions/network.sh を/lib/functions/network_new.shとしてコピーし network_get_prefix_assignment6 の次に以下を追加してください。
ただし、先に断っておきますが、今回の設定では残念ながらプレフィックスが変更されると再起動・再認証をする必要があります。また、対向ルータのリンクローカルアドレスが変更されると、今のところ修正が必要になりますのでご注意ください。また、フレッツ光クロスの場合、ひかり電話あり無しにかかわらず、ONU直下ではRAでプレフィックスは降りてきません。つまりそのままだとWAN側にGUAが割り当てられません。そのため、ipip6.shの一部を修正し、WAN側ではなくLAN側のGUAを参照するようにしました。
0. authorized_keysのコピーとパスワードの設定 1. scp .ssh/authorized_keys root@192.168.1.1:/etc/dropbear/ 2. パスワードの変更 1. ipip6のインストール(ipip6パッケージをopkgでインストールすると問題がでたので手動でコピーしています。) software 1. opkg update; opkg install kmod-ip6-tunnel resolveip curl wget diffutils 2. opkg upgrade luci-proto-ipv6 3. download ipip6.sh and more wget https://raw.githubusercontent.com/HiraokaHyperTools/openwrt-ipip6/main/net/ipv6/ipip6/files/ipip6.sh wget https://raw.githubusercontent.com/HiraokaHyperTools/openwrt-ipip6/main/net/ipv6/ipip6/files/ipip6_reg.lua wget https://raw.githubusercontent.com/HiraokaHyperTools/openwrt-ipip6/main/net/ipv6/ipip6/files/ipip6.lua wget https://raw.githubusercontent.com/HiraokaHyperTools/openwrt-ipip6/main/net/ipv6/ipip6/files/ipip6.js scp ipip6.sh root@192.168.1.1:~/ scp *.lua root@192.168.1.1:~/ scp *.js root@192.168.1.1:~/ ssh -l root 192.168.1.1 以下の内容のパッチを当てる(LANのGUAをipip6トンネルのローカルにする為) ===================================================================== --- ipip6.sh 2024-05-23 12:28:56.274213260 +0000 +++ /lib/netifd/proto/ipip6.sh 2024-05-23 13:51:14.158844035 +0000 @@ -43,7 +43,8 @@ done [ -z "$ip6addr" ] && { - local wanif="$tunlink" +# local wanif="$tunlink" + local wanif="lan" if [ -z "$wanif" ] && ! network_find_wan6 wanif; then proto_notify_error "$cfg" "NO_WAN_LINK" return ===================================================================== cp ipip6.sh /lib/netifd/proto/ipip6.sh chmod +x /lib/netifd/proto/ipip6.sh mkdir -p /usr/lib/lua/luci/model/network cp ipip6_reg.lua /usr/lib/lua/luci/model/network/proto_ipip6.lua chmod +x /usr/lib/lua/luci/model/network/proto_ipip6.lua mkdir -p /usr/lib/lua/luci/model/cbi/admin_network cp ipip6.lua /usr/lib/lua/luci/model/cbi/admin_network/proto_ipip6.lua chmod +x /usr/lib/lua/luci/model/cbi/admin_network/proto_ipip6.lua cp ipip6.js /www/luci-static/resources/protocol/ipip6.js 2. reboot 3. 対向ルータのリンクローカルアドレスを調べておく。以下の場合は fe80::1122:33ff:fe44:5566 。 # ip -6 r default from 2aaa:bbbb:cccc:dd00::/56 via fe80::1122:33ff:fe44:5566 dev eth1 metric 512コンフィグは以下の通りです。
# /etc/config/network config interface 'loopback' option device 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd98:1:1::/48' config device option name 'br-lan' option type 'bridge' list ports 'eth0' config interface 'lan' option device 'br-lan' option proto 'static' option ipaddr '10.1.1.23' option netmask '255.255.255.0' option ip6assign '56' option ip6ifaceid '::0011:2233:4400:0000' config interface 'wan' option proto 'ipip6' option peeraddr '2www:xxxx:yyyy:gggg::1111' option ip4ifaddr 'aaa.bbb.ccc.ddd' option tunlink 'wan6' option encaplimit 'ignore' option mtu '1460' config interface 'wan6' option device 'eth1' option proto 'dhcpv6' option reqaddress 'try' option reqprefix 'auto' config route option interface 'lan' option target '192.168.0.0/24' option gateway '10.1.1.2' config route6 option interface 'wan6' option target '::/0' option gateway 'fe80::1122:33ff:fe44:5566' # /etc/config/dhcp -- snip -- config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option dhcpv4 'server' option dhcpv6 'server' option ra 'server' list ra_flags 'managed-config' list ra_flags 'other-config' list dns 'fd98:1:1::64' list dns 'fd98:1:1::65' -- snip --コンフィグを書き換えたら、再起動してください。再起動後はアドレスが今回の場合は10.1.1.23に変わるので注意してください。
次に /lib/functions/network.sh を/lib/functions/network_new.shとしてコピーし network_get_prefix_assignment6 の次に以下を追加してください。
network_get_second_prefix_assignment6() { __network_ifstatus "$1" "$2" "['ipv6-prefix-assignment'][1]['address','mask']" "/" }次に以下のスクリプトを流し、nftablesでGUA/ULAのNPTを行うようにしておきます。(追記:2024/06/01 修正)
cat << "EOF" > /etc/nftables.d/npt6.sh LAN_IF="lan" sleep 5 . /lib/functions/network_new.sh network_flush_cache network_get_device LAN_DEV "${LAN_IF}" network_get_second_prefix_assignment6 LAN_PFX "${LAN_IF}" network_find_wan6 WAN_IF network_get_device WAN_DEV "${WAN_IF}" network_get_prefix6 WAN_PFX "${WAN_IF}" nft insert rule inet fw4 srcnat oifname "${WAN_DEV}" snat ip6 prefix to ip6 saddr map { "${LAN_PFX}" : "${WAN_PFX}" } # 2024/06/01 修正 nft insert rule inet fw4 dstnat iifname "${WAN_DEV}" dnat ip6 prefix to ip6 daddr map { "${WAN_PFX}" : "${LAN_PFX}" } EOF uci -q delete firewall.npt6 uci set firewall.npt6="include" uci set firewall.npt6.path="/etc/nftables.d/npt6.sh" uci commit firewall service firewall restart参考までにnftablesは以下の様になります。(追記:2024/06/01 修正)
-- snip -- chain dstnat { type nat hook prerouting priority dstnat; policy accept; iifname "eth1" dnat ip6 prefix to ip6 daddr map { 2aaa:bbbb:cccc:dd00::/56 : fd98:1:1::/56 } } chain srcnat { type nat hook postrouting priority srcnat; policy accept; oifname "eth1" snat ip6 prefix to ip6 saddr map { fd98:1:1::/56 : 2aaa:bbbb:cccc:dd00::/56 } oifname { "eth1", "ipip6-wan" } jump srcnat_wan comment "!fw4: Handle wan IPv4/IPv6 srcnat traffic" } -- snip --最後は認証です。以下のスクリプトを流してください。(パラメータはプロバイダから指定されたものにしてください。)
UPDT_URL=http://xxx.enabler.ne.jp/update USER=UserName PASS=PassWord curl "$UPDT_URL?user=$USER&pass=$PASS"参考までにWindowsはipv6 dns サーバをULAで指定していてもGUA/ULAのいずれも取得していれば、IPv6インターネット接続の表示に問題はありませんでした。 なお試したOpenWRTのバージョンは23.05.3 r23809-234f1a2efaです。 今回は以上です。それでは。
コメント
コメントを投稿