スキップしてメイン コンテンツに移動

フレッツ光クロス コラボ enひかりクロス V6プラス 固定IPの環境でOpenWRTを使いULA/GUAを混在させる

フレッツ光クロス(コラボ 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を参照するようにしました。
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です。 今回は以上です。それでは。

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかも...

Windows デバイス暗号化 のサポートで "許可されていない dma 対応バス/デバイスが検出されました"の対処

Windows でセキュリティー関係を見ているのですが、とあるPCでmsinfo32で確認すると"デバイス暗号化のサポート"で"許可されていない dma 対応バス/デバイスが検出されました"と出ていました。このPCの場合、それ以外はOK(なにも表示されない)だったのですが、ネットでしらべるとMSのドキュメントではハードウェアベンダーに問い合わせるなどと敷居が高く具体的にどこが引っかかっているかわかりません。そこでほかに方法はないかとしらべやってみたところ、"前提条件をみたしています"まで持って行けたので、本稿を挙げた次第です。 具体的には、以下のようにします。 1-a. 許可するDMA対応バス・デバイスを指定するレジストリの所有権と書き込み設定をおこなう。 以下のレジストリキーの所有者を自分自身(管理ユーザ)のものにし、フルコントロール権を付与する。 HKLM\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses もしくは 1-b. MicrosoftよりPsExecをダウンロードし、System権限でRegeditを立ち上げ編集する。 Microsoftより、https://docs.microsoft.com/en-us/sysinternals/downloads/psexec にある こちら をダウンロードし、解凍する。解凍すると、x64の場合、PsExec64.exeがあるので、管理者権限で以下を実行し、システム権限でregeditを立ち上げることが出来るようになる。 cd Downloads\PSTools .\PsExec64.exe -sid C:\Windows\regedit.exe 2-a. パワーシェルスクリプトを実行し、PnPデバイスのうちインスタンスがPCIで始まるものを"AllowedBuses"に追加する。 以下のパワーシェルスクリプトを作成する。たとえばDocuments\allow-dma-bus-device.ps1として作成する。( こちらの記事のものを使用させていただきました: Thank you! ) $tmpfile = "$($env:T...

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-...