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

フレッツ光クロス コラボ(enひかりクロス)でv6プラスの固定IPにてDebianを使い接続

フレッツ光クロスで固定IPを使いたいと思い、調べたところコラボ(enひかりクロス)ですが、v6プラスの固定IPが利用できるようだったのでこちらに転用しました。2023/04/22にNTTに転用番号の払い出しを申請し取得、前のプロバイダにも月末解約を申し込み、その日のうちにenひかりに申し込んだところ翌日の連絡で開通予定日が5/2となったのですが、IPoE接続の切替えタイミングがずれ、前のプロバイダに問い合わせたところIPoEの切り替えは2-3日かかるとのことで最終的に5/3の午前中に切り替わり開通しました。 結果、"プレフィクス+インターフェースID"(CEアドレス)はLAN/WANのいずれに割り振ってもDebianルータでIPv6/IPv4ともに問題なく接続できたので備忘録として挙げてみました。構成は以下の通りです。
注意点としては "ONU直下にルータを置いている" というところです。このためWAN側にはRAではPrefixは降りてきません。(V6プラスの固定IP接続に関する各社のコンフィグ例で一部ONU直下ホームゲートウェイ直下のいずれかの明記もなく、RAからPrefixを取得することを前提としている設定例があり、少し混乱しました。)
早速ですが設定です。なお環境はDebian 12/Bookworm(testing)で行いました。まず、/etc/network/interfaces.d/enp1s0f0(WAN側)は以下の通りです。
auto enp1s0f0
iface enp1s0f0 inet6 dhcp
  accept_ra 2
  request_prefix 1
enp1s0f1(LAN側)は以下の通りです。
auto enp1s0f1
iface enp1s0f1 inet static
  address 10.1.1.1
  netmask 255.255.255.0
## 2024/05/12: LAN側IPv6アドレスのULA化
iface enp1s0f1 inet6 static
  address fd98:1:1::1/64
これらに色々書いてもよいのですが、かえってごちゃごちゃするので /etc/rc.local から /usr/local/sbin/ipt-v6p-static-lan-01.sh という名前にしたスクリプト(chmod +x)を呼び出して一括して設定するようにしました。スクリプトは以下の通りです。
#!/bin/bash

UPDT_URL=http://xxx.enabler.ne.jp/update
USER=userid
PASS=p@ssw0rd

IFID=000a:0b0c:0d00:0000
IP4=10.11.12.13
BR=2404:aaaa:bbbb:cccc::dd

#対向のルータ(WAN側のデフォルトゲートウェイ):radvdumpでわかります。
#FGW=fe80::aaaa:bbff:fecc:ddee

WANDEV=enp1s0f0
LANDEV=enp1s0f1
TUNDEV='tun0'

# dhclientが呼び出されない場合の対処
if [ ! -f /run/dhclient6.$WANDEV.pid ];then
  dhclient -6 -v -pf /run/dhclient6.$WANDEV.pid -lf /var/lib/dhcp/dhclient6.$WANDEV.leases -I -P -N -df /var/lib/dhcp/dhclient.$WANDEV.leases $WANDEV
fi

# PREFIXを取得
PFX=`cat /var/lib/dhcp/dhclient6.$WANDEV.leases | grep iaprefix -m1 | awk '{print $2}'`
PREFIX=`echo $PFX | awk 'BEGIN{FS="::"}{print $1}'`
GW_PLEN=`echo $PFX | awk 'BEGIN{FS="/"}{print $2}'`

# 2024/06/12: ULAを追加
ULA=fd98:1:1::/56

# 2024/05/11 CE_PLENを128から$GW_PLENに変更
# 2024/05/02 以下三行の記述位置をこちらへ移動
GW=1
CE=$PREFIX:$IFID
CE_PLEN=$GW_PLEN

# 2024/05/11 WANDEVにプレフィックス+インターフェースID(CEアドレス)を割り当てる場合を削除
ip -6 addr add $PREFIX::$GW/$GW_PLEN dev $LANDEV

ip -6 addr add $CE/$CE_PLEN dev $LANDEV
ip -6 tunnel add $TUNDEV mode ip4ip6 remote $BR local $CE dev $LANDEV encaplimit none

ip link set dev $TUNDEV mtu 1460
ip link set dev $TUNDEV up
ip -4 addr add $IP4/32 dev $TUNDEV

ip route delete default
ip route add default dev $TUNDEV

#対向のルータ(WAN側のデフォルトゲートウェイ)が自動で設定されない場合
#ip -6 route add default proto static metric 20 \
#    nexthop via $FGW dev $WANDEV weight 10

curl "$UPDT_URL?user=$USER&pass=$PASS"

iptables -t nat -F
iptables -t mangle -F

iptables -t mangle -o $TUNDEV -I FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu

#マスカレードする場合
iptables -t nat -A POSTROUTING -o $TUNDEV -j MASQUERADE

# FULLCONENAT モジュールを使用する場合
#iptables -t nat -A PREROUTING -i $TUNDEV -j FULLCONENAT
#iptables -t nat -A POSTROUTING -o $TUNDEV -j FULLCONENAT

# 2024/06/12 追加: ULA/GUA変換をnftで行う。
ip6tables-restore < /etc/iptables/rules.v6
nft insert rule ip6 nat POSTROUTING oifname "${WANDEV}" snat ip6 prefix to ip6 saddr map { "${ULA}" : "${PFX}" }
nft insert rule ip6 nat PREROUTING  iifname "${WANDEV}" dnat ip6 prefix to ip6 daddr map { "${PFX}" : "${ULA}" }

## other local setup below...
ip link set $WANDEV txqueuelen 10000
ip link set $LANDEV txqueuelen 10000
ip link set $TUNDEV txqueuelen 10000

## 2024/05/12追記:LAN側IPv6アドレスのULA化に伴う/etc/iptables/rules.v6の変更と再読み込み
PREFIX_CHANGED="no"

IF1PREFIX_NEW=`echo $PREFIX | awk -F":" '{
        val1="0x"$1; printf "%x", val1;
        printf ":";
        val2="0x"$2; printf "%x", val2;
        printf ":";
        val3="0x"$3; printf "%x", val3;
        printf ":";
        val4="0x"$4; val4=val4+"0x1"; printf "%x", val4;
	}'`

#IF1PREFIX_ULAは環境に合わせてください。
IF1PREFIX_ULA=fd98:1:1
IF1PREFIX_OLD=`grep $IF1PREFIX_ULA /etc/iptables/rules.v6 | grep PREROUTING | awk -F"-d" '{print $2}' | awk '{print $1}' | awk 'BEGIN{FS="::"}{print $1}'`

if [ "$IF1PREFIX_OLD" != "$IF1PREFIX_NEW" ]; then 
	sed -i "s/$IF1PREFIX_OLD/$IF1PREFIX_NEW/g" /etc/iptables/rules.v6
	PREFIX_CHANGED="yes"
fi

if [ "PREFIX_CHANGED" = "yes" ]; then
	ip6tables-restore < /etc/iptables/rules.v6
fi
CEアドレスをデバイスに割り当ててIP4IP6トンネルを張る所と-j TCPMSSでTCP MSSクランプを使用している所以外は特に難しい設定はありません。その他、ルータのIPv6アドレスをこの例の場合は、$PREFIX::$GW/$GW_PLENにしていますが、必要に応じて変更してください。
こちらの環境では ookla speedtest にてウィンドウズで実測でDL 最大約8Gbps、UP 最大約7.8Gbps出たので良い感じです。
参考までにDebianルータから測定したところ、こちらはDL約8.0Gbps、UP約7.7Gbpsでました。なお、dhcpd、radvd、sysctl.conf、firewallの設定は今回も触れていませんので、悪しからずご了承ください。
2024/05/11追記:
LAN側にIPv6アドレスを自動で割り当てる場合、例えば、こちらのように/etc/dhcp/etc/dhcp/dhclient-exit-hooks.d/ 以下に、prefix-delegation という名前で mode 644にて"Sample script"の内容のものを置いてください。(ipv6calcパッケージ必要、IA_PD_IFACEとIA_PD_IPV6CALCの変更要)
2024/05/12追記:
上述の2024/05/12追記の通りLANのIPv6アドレスについてはGUAではなくULAを割り当てる様に変更しました。これに伴い、ip6tables (/etc/iptables/rules.v6) や /etc/radvd.conf 等の変更も必要となりますので、ご注意ください。
今回は以上です。それでは。

コメント

このブログの人気の投稿

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-...