フレッツ光クロスで固定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側)は以下の通りです。
こちらの環境では ookla speedtest にてウィンドウズで実測でDL 最大約8Gbps、UP 最大約7.8Gbps出たので良い感じです。
参考までにDebianルータから測定したところ、こちらはDL約8.0Gbps、UP約7.7Gbpsでました。なお、dhcpd、radvd、sysctl.conf、firewallの設定は今回も触れていませんので、悪しからずご了承ください。
2024/05/12追記:
上述の2024/05/12追記の通りLANのIPv6アドレスについてはGUAではなくULAを割り当てる様に変更しました。これに伴い、ip6tables (/etc/iptables/rules.v6) や /etc/radvd.conf 等の変更も必要となりますので、ご注意ください。
今回は以上です。それでは。
早速ですが設定です。なお環境はDebian 12/Bookworm(testing)で行いました。まず、/etc/network/interfaces.d/enp1s0f0(WAN側)は以下の通りです。
auto enp1s0f0 iface enp1s0f0 inet6 dhcp accept_ra 2 request_prefix 1enp1s0f1(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/12追記:
上述の2024/05/12追記の通りLANのIPv6アドレスについてはGUAではなくULAを割り当てる様に変更しました。これに伴い、ip6tables (/etc/iptables/rules.v6) や /etc/radvd.conf 等の変更も必要となりますので、ご注意ください。
今回は以上です。それでは。

コメント
コメントを投稿