Raspberry Pi 4 と さくらのVPS かつ ds-lite(IPv4 over IPv6ルータ) の構築 – JPNEのIPv6 編 – 一応出来たでいいのかなぁ。。。(1)

2021年6月7日

“Raspberry Pi 4" を買ってみました。
“Raspberry Pi 4" を使い “さくらのVPS" で ds-lite(IPv4 over IPv6ルータ) 構築してみました。
そのことについて書きたいと思います。

【お願い】
Raspberry Pi 4 と VPSサーバ で ds-lite(IPv4 over IPv6ルータ) の構築が一応出来た状態です。。
ですが、解らない部分・理解が出来ていない部分もあります。
今回、実験結果を掲載しますが、現在使用している自分のPCの環境,インターネット環境からds-liteの接続した場合になります。
また、以下のやり方について、PC,その他のトラブルについては責任を負いかねます。
改めてよろしくお願い致します。

【目的】
“さくらVPSサーバ" と “Raspberry Pi 4" を使い1対1通信の “ds-lite" を構築する。
また、現在2台のさくらVPSサーバ使用中なので “ds-lite" をした状態で “ping値" どう変化するのか実験をする。

【環境・使用機材】
・自分の住んでいる地域は・・・関東甲信越です。
・フレッツ 光ネクスト ファミリー・ハイスピードタイプ/ファミリータイプ 下り:200M/上り:100M
・Raspberry Pi 4 (4G) 本体 ※1
・USB専用のLANアダプター ※1
・スイッチングハブ ※1
・LANケーブル 3つ ※1
・ディスプレイ(HDMI対応)
・マウス
・キーボード
・PC(windows 7)
※1 製品・機器の規格によりインターネット速度が異なります。ご利用される機器情報を必ず把握をして下さい。

【契約プロバイダー】
・ipv4:au one net「フレッツ光」コース (KDDI株式会社) 【普通のインターネット使う場合はこちらを使っています】
・ipv6:au one net サービス名:IPv6:「フレッツ光」コース (日本ネットワークイネイブラー株式会社: JPNE)

【さくらVPSサーバ 環境】
・さくらのVPS(v4) 2G HDD(東京)
・さくらのVPS(v4) 1G SSD(東京) (ds-lite通信用)

【OS 環境】
・さくらのVPS(v4) 2G :CentOS 7.7
・さくらのVPS(v4) 1G :CentOS 7.7
・Raspberry Pi 4 :CentOS 7.7

【必要前提】
・"NTTフレッツ光回線の環境" かつ “フレッツ 光ネクスト、フレッツ 光ライトプラス、フレッツ 光ライト" のサービスである。
・"フレッツ・v6オプション" の手続きが完了している。また、"au one net サービス名:IPv6:「フレッツ光」コース (日本ネットワークイネイブラー株式会社: JPNE)" と手続きが完了していることを前提とします。
・"さくらVPS" に SSHサービスが利用できている状態にする。
・"さくらVPS" ,"Raspberry Pi 4″ OSがインストールがされている。
なお、"Raspberry Pi 4″ のOSに関しては、山形大学のlinux専用のダウンロードサイトに置かれている “Raspberry Pi" 用の CentOS を使用しています。
山形大学 さん -linux専用のダウンロードサイト-

【図1 構築完成図】

【青色:ipv4 橙色:ipv6 ピンク色:ローカルネット】

【設定方法】
1. Raspberry Pi 4 “インターフェース設定" と “DHCPサーバ構築"
1.1 電源ケーブル・USB専用LANアダプター・ディスプレイ・マウス・キーボードをRaspberry Pi に接続する。
1.2 Raspberry Pi の本体のLANに “ONU側のスイッチングハブ” に接続する。
※2 Raspberry Pi のネットワークデバイス “eth0” となる。
1.3 電源を入れる。
1.4 ターミナル または 端末を起動する。
1.5 インターフェースの設定をする。

1.5.1 cui形式でネットワーク設定を行う。

pi@raspberrypi:~ $ sudo nmtui

1.5.2 【接続の編集】を実行する。
1.5.3 インターフェースの項目が出力されるので “eth0" , “enp1s0u1" の編集する。
※3 “enp1s0u1" はUSB用のネットワークインターフェースになります。
※4 各インターフェースについては画像で示します。
[図2 eth0]

[図3 enp1s0u1]

1.5.4 各インターフェースの設定が完了したら【OK】を実行する。インターフェースの項目画面に戻るので【戻る】を実行し【OK】を実行する。そして、再起動する。

pi@raspberrypi:~ $ sudo reboot

1.6 DHCPサーバを構築
1.6.1 DHCPサーバをインストールする。

pi@raspberrypi:~ $ sudo yum install dhcp

1.6.2 dhcpd.conf のファイルを編集する。

pi@raspberrypi:~ $ sudo vim /etc/dhcp/dhcpd.conf

[dhcpd.conf]

default-lease-time 600;
max-lease-time 7200;

authoritative;

subnet 192.168.88.248 netmask 255.255.255.248 {
 option routers 192.168.88.254;
 option subnet-mask 255.255.255.248;
 option domain-name-servers 8.8.8.8,8.8.4.4;
 range 192.168.88.249 192.168.88.253;
}

※6 細かい設定したい場合は、個々でお願い致します。

1.6.3 dhcpのサービスファイルを設定する

pi@raspberrypi:~ $ sudo cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
pi@raspberrypi:~ $ sudo vim /etc/systemd/system/dhcpd.service

[dhcpd.service]

[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
Type=notify
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid enp1s0u1

[Install]
WantedBy=multi-user.target

1.6.4 dhcpのサービスファイルの設定が完了後、リロードを行う。

pi@raspberrypi:~ $ sudo systemctl --system daemon-reload
pi@raspberrypi:~ $ sudo systemctl restart dhcpd

以上で “インターフェース設定" と “DHCPサーバ構築" が完了します。

2. “さくらVPSサーバ(VPS 1G)" と “Raspberry Pi 4" 専用トンネル・ゲートウェイの設定
【図4 構築図】

【橙色:ipv6通信の流れ 黄色:ds-lite 青色:ipv4通信の流れ】
こんな感じで構築をしていきます。

2.1 さくらVPSサーバ(VPS 1G) 設定
2.1.1 カーネルモジュールを設定する。

[user@vps1g] sudo modprobe ip6_tunnel

2.1.2 トンネリングの接続設定をする。
今回は MTU “1460” byte をする為に “encaplimit none" を追加します。

[user@vps1g] sudo ip -6 tunnel add ip6tnl mode ipip6 remote 【※7】 local 【※8】 dev eth0 encaplimit none

※7 Raspberry Pi 4 の取得されている IPv6アドレス【】は不要
※8 さくらのVPS の固定ipv6アドレス 【】は不要 ※9
※9 さくらのVPS ではipv6アドレスが 1個 用意されています。

2.1.3 トンネルインターフェースを有効化する。

[user@vps1g] sudo ip link set dev ip6tnl up

2.1.4 ip6tnlのデバイスのipアドレス設定

[user@vps1g] sudo ip addr add 192.0.0.1/30 dev ip6tnl

2.1.5 sysctl で カーネルパラメーターの設定

[user@vps1g] sudo sysctl -w net.ipv4.ip_forward=1
[user@vps1g] sudo sysctl -w net.ipv4.conf.all.forwarding=1
[user@vps1g] sudo sysctl -w net.ipv4.conf.eth0.rp_filter=0
[user@vps1g] sudo sysctl -w net.ipv4.conf.ip6tnl.rp_filter=0
[user@vps1g] sudo sysctl -w net.nf_conntrack_max=65535

2.1.6 NAT設定

[user@vps1g] sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv6" source address="【※10】" accept"
[user@vps1g] sudo firewall-cmd --reload

※10 Raspberry Pi 3B+ eth0 ipv6アドレス 【】は不要

Raspberry Pi 4 と VPSサーバーが通信を出来るよう設定します。

[user@vps1g] sudo firewall-cmd --zone=trusted --change-interface=ip6tnl
[user@vps1g] sudo firewall-cmd --zone=public --add-masquerade
[user@vps1g] sudo firewall-cmd --zone=trusted --add-masquerade
[user@vps1g] sudo firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
[user@vps1g] sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ip6tnl -o eth0 -j ACCEPT
[user@vps1g] sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ip6tnl -m state --state RELATED,ESTABLISHED -j ACCEPT
[user@vps1g] sudo firewall-cmd --reload

2.1.7 Routing設定
さくらのVPS 側のプライベートネットワークのルート側でのルーティング設定

[user@vps1g] sudo route add -net 192.168.0.0/16 dev ip6tnl
[user@vps1g] sudo route add -net 192.0.0.1/30 dev ip6tnl

※この設定ですが・・・理解できていない部分で。。。一応設定をしています。

Raspberry Pi 4 側のipv4アドレスの通信が出来るように設定します。

[user@vps1g] sudo ip route add 192.168.88.248/29 mtu lock 1460 dev ip6tnl

2.2 Raspberry Pi 4 の設定
2.2.1 ファイアウォールの設定
2.2.1.1 さくらVPSサーバ ipv6アドレスを許可する。

pi@raspberrypi:~ $ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv6" source address="【※11】" accept"
pi@raspberrypi:~ $ sudo firewall-cmd --reload

※11 さくらVPSサーバ ipv6アドレス 【】は不要

2.2.1.2 ファイアウォール “public" 側のIPマスカレードを許可する

pi@raspberrypi:~ $ sudo firewall-cmd --permanent --zone=public --add-masquerade 
pi@raspberrypi:~ $ sudo firewall-cmd --reload

2.2.2 ルーティングの設定をする。
2.2.2.2 IPv4アドレスのフォワーディングの許可

pi@raspberrypi:~ $ sudo sysctl -w net.ipv4.ip_forward=1

2.2.2.3 USBインターフェース MTU “1460" に設定する

sudo ip route replace 192.168.88.248/29 mtu lock 1460 dev enp1s0u1

2.2.3 カーネルモジュールを設定する。

pi@raspberrypi:~ $ sudo modprobe ip6_tunnel

2.2.4 トンネリングの接続設定をする。
こちらも MTU “1460” byte をする為に “encaplimit none" を追加します。

pi@raspberrypi:~ $ sudo ip -6 tunnel add ip6tnl1 mode ipip6 remote 【※12】 local 【※13】 dev eth0 encaplimit none

※12 さくらのVPSサーバ ipv6アドレス 【】は不要
※13 Raspberry Pi 4 eth0 ipv6アドレス 【】は不要

2.2.5 トンネルインターフェースを有効化

pi@raspberrypi:~ $ sudo ip link set dev ip6tnl1 up

2.2.6 デフォルトに設定

pi@raspberrypi:~ $ sudo route add default dev ip6tnl1

2.2.7 トンネル “ip6tnl1" 確立後 RA (Router Advertisement; ルータ広告) 停止

pi@raspberrypi:~ $ sudo sysctl -w net.ipv6.conf.ip6tnl1.accept_ra = 0
pi@raspberrypi:~ $ sudo sysctl -p

3. “さくらVPSサーバ(VPS 2G)" と “Raspberry Pi 4" ルーティング設定 ※14
3.1 さくらVPSサーバ(VPS 2G) ログインする。
3.2 “Raspberry Pi 4" 側の “192.168.88.248/29" ルーティングを追加する。
図4よりピンク色の線がさくらVPSで利用できるローカルネットになります。ローカルネットに接続が出来るように以下の設定をします。

[user@vps2g] sudo route add -net 192.168.88.248 netmask 255.255.255.248 gw 【※15】 eth1

※14 自分自身の設定なので省略される部分になります。
※15 自分が指定されているIPアドレスを入力してください。【】は不要

4. ds-liteを使う端末は必ず “MTU 1460byte" に設定して下さい。
端末よりますが、 “MTU 1500byte" でデフォルト設定がされています。
デフォルト設定だと WEBサイト,オンラインゲームなどが出来ない場合があります。
注意をして下さい。
なお、Raspberry Pi 3B+ と VPSサーバ で ds-lite(IPv4 over IPv6ルータ) の構築 -さくらVPSサーバ編- 途中結果状態です。 の一番下にスクロールをして頂くと、"OS Windows" でのMTU変更の仕方がありますので、参考して頂けたらなと思います。

以上で設定が完了します。
続きの投稿は Raspberry Pi 4 と さくらのVPS かつ ds-lite(IPv4 over IPv6ルータ) の構築 – JPNEのIPv6 編 – 一応出来たでいいのかなぁ。。。(2)-現状報告- になります。

【参考文献】
にーまるろく あーるしー どっと ねっと さん – さくらのVPSでIPv4 over IPv6ルーターの構築(暫定版)
Tomocha Potter さん – さくらのVPS で IPv4 over IPv6ルータの構築
@vipper36 さん -IPoEでmtuを1500に出来ないときの解決法 (付・IPv6トンネルのmtuを1460にする方法)-
maruko2 Note. さん -DHCPサーバの設定-
SEの道標 さん -Linuxのインタフェースのエラーカウンタの状態確認と原因 〜dropped, overrun, frame, carrier等~-

【使用サービス情報】
SAKURA Internet さん -さくらのVPS-
au さん -プロバイダ au one net-
日本ネットワークイネイブラー株式会社 -JPNE- さん ipv6アドレス取得先のため
山形大学 さん -linux専用のダウンロードサイト-

【商標情報】
ラズベリーパイ財団 さん – https://www.raspberrypi.org/
NTTグループ さん
マイクロソフト さん -windows-

【フリー素材】
Digipot さん