ds-lite(IPv4 over IPv6ルータ)の構築 -自分の状況(2025.11.19 現在)-

2025年11月20日

“VPSサーバ" と “ミニPC" を使用し、"ds-lite(IPv4 over IPv6ルータ)の構築(以降、ds-lite)" をしています。
色々とWebサイトを閲覧していたところ・・・『note(2025年版)PCゲーマーなら必ず設定した方がいいネットワーク設定(Realtek PCIe GbE Family Controller)めちゃ細かく教えちゃいます!ゲーミング設定 – 最適化おじさん(K)PCゲームのあれこれ さん』 の参考にさせて頂いて、少しネットワーク機器の値を変更し、また、"カーネルパラメーター","nftable(ファイアウォール)" の設定を少し変更したことを書きたいと思います。

【お願い】
ds-lite(IPv4 over IPv6ルータ) の構築については、解らない部分・理解が出来ていないことがあります。自分のPC、インターネット環境を使用してds-liteの情報を掲載しますが、これが正しいと思わないようにお願いします。
また、自分はVPSサーバー(クラウドサーバ)を使用しています。※サービスは従量制ため、ご使用の場合は注意をお願いします。今回の記事について、PC,その他のトラブルについては責任を負いかねます。自己責任でお願い致します。

1. 自分のインターネット環境・機器

・光回線事業者:ドコモ光 1ギガ Aタイプ
・IPoeサービス:v6プラス
・ミニPC:Skynew IN-1
   OS名:Red Hat Enterprise Linux 9 (無償版)

2. VPSサーバー

Akamai Cloud(Linode)※紹介リンクにさせて頂いています。(使用中)
 サービス名:Shared CPUプラン/Nanode 1 GB/(IPv4&IPv6)
   location:Tokyo
      OS名:Red Hat Enterprise Linux 9 (無償版)

3. ds-lite接続構築

3.1【前提条件】

・少し構築の部分で変更があり設定について順番に書きますが、過去のds-liteの構築についてほとんど変わりありません。恐れ入りますが、省略をさせて頂きます。
・過去のds-liteの構築については、カテゴリより"ds-lite"を見て頂きますようお願いします。
・ミニPCにdhcpサーバが構築されている。
・VPSサーバとminiPCのds-lite接続はperl言語で記述して接続を行っています。

3.2 VPSサーバ側

3.2.1 VPSサーバ/カーネルパラメータ設定

ds-lite@vps:~ $ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.lo.forwarding = 0
net.ipv4.conf.enp0s4.forwarding = 1
net.ipv4.conf.ip6tnl.forwarding = 1
#------------------------------------
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.lo.forwarding = 0
net.ipv6.conf.enp0s4.forwarding = 1
#------------------------------------
net.ipv6.conf.enp0s4.accept_ra = 0
#------------------------------------
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.enp0s4.rp_filter = 0
net.ipv4.conf.ip6tnl.rp_filter = 0
#---

【更新のためコマンドを実行】

ds-lite@vps:~ $ sudo sysctl -p

3.2.2 NIC設定
NICよりオフロード,チェックサム等の値を変更します。
【1行ずつコマンドを実行】

ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-gso off                   
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-ntuple off                
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-rxhash off                
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-rx-gro-hw off             
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-rx-udp-gro-forwarding off 
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-rx-udp_tunnel-port-offload off
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tso off                   
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tx-checksum-ipv4 off      
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tx-checksum-ipv6 off      
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tx-checksum-ip-generic off 
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tx-udp-segmentation off    
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tx-udp_tnl-csum-segmentation off
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.feature-tx-udp_tnl-segmentation off
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.coalesce-adaptive-rx 0
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.coalesce-adaptive-tx 0
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.coalesce-rx-frames 0
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.coalesce-rx-usecs 0
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.coalesce-tx-frames 0
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.coalesce-tx-usecs 0
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.pause-autoneg off                 
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.pause-rx off                      
ds-lite@vps:~ $ sudo nmcli connection modify enp0s4 ethtool.pause-tx off  

ここで再起動

ds-lite@vps:~ $ sudo reboot

3.2.3 ファイアウォール(nftable)設定
ソースコードを掲載しますが、【】の部分は変更しています。
※ファイアウォールの細かい設定は、個々で設定を行ってください。

ds-lite@vps:~ $ sudo vim /etc/sysconfig/nftables.conf
flush ruleset

table netdev filter {

  chain ingress_filter {
    ip frag-off & 0x1fff != 0 counter drop
    tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg counter drop
    tcp flags & (fin|syn|rst|psh|ack|urg) == 0x0 counter drop
    tcp flags syn tcp option maxseg size 1-535 counter drop
    meta l4proto igmp counter packets 0 bytes 0 drop

  }
}

table ip filter {
        chain input {
                type filter hook input priority filter; policy accept;
                iifname "lo"         counter packets 0 bytes 0 accept
                ct state established,related counter packets 0 bytes 0 accept
        }

        chain output {
                type filter hook output priority filter; policy accept;
                ct state established,related counter packets 0 bytes 0 accept
        }

}

table ip6 filter {
        chain input {
                type filter hook input priority filter; policy accept;
                iifname "lo"         counter packets 0 bytes 0 accept
                ip6 saddr 【ミニPC:取得済みのIPv6アドレス】 iifname "enp0s4" counter packets 0 bytes 0 accept
                ct state established,related counter packets 0 bytes 0 accept
        }

        chain output {
                type filter hook output priority filter; policy accept;
                oifname "enp0s4" ip6 daddr 【ミニPC:取得済みのIPv6アドレス】 counter packets 0 bytes 0 accept
                ct state established,related counter packets 0 bytes 0 accept
        }

}

table ip nat {
        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                ct state related,established counter packets 0 bytes 0 accept
        }

        chain POSTROUTING {
                type nat hook postrouting priority srcnat; policy accept;
                oifname { ip6tnl, enp0s4 }  counter packets 0 bytes 0 masquerade
                ct state related,established counter packets 0 bytes 0 accept   
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                oifname { ip6tnl, enp0s4 } counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept     
        }
}

【ファイアウォール(nftable)の更新】

ds-lite@vps:~ $ sudo systemctl restart nftables.service

3.2.4 VPS/ds-liteの設定
“perl言語"を使って実行をしています。
ソースコードを掲載しますが、【】の部分は変更しています。

ds-lite@vps:~ $ sudo vim /home/ds-lite/vps_ds-lite.pl 
#!/usr/bin/perl

#-----------【魔法の言葉】------------
use POSIX qw(strftime);
use File::Path;
use strict;
use warnings;

#-----------【変数】------------
#IP関連設定
my $LOCAL_IPV6="【ミニPC:取得済みのIPv6アドレス】";
my $VPS_SERVER_IPV6="【VPSサーバ:取得済みのIPv6アドレス】";
my $LOCAL_IPV4="【ミニPC:dhcpクライアントのipv4アドレス/サブネットマスク】";

#-----------【処理】------------
print "ds-liteの構築を開始します。\n";
print "※スーパーユーザーで実行してください\n";
print "項目の値を変更したい場合はテキストエディターなど使用し編集を行ってください。\n";
print "\n";
print "ds-liteを開始したい場合は・・・ 1 \n";

my $question = <STDIN>;
chomp $question;

if($question == "1"){
        print "これより ds-lite の構築を開始します。\n";
        my $ipip6tunnel_1 = `modprobe ip6_tunnel`;
        my $ipip6tunnel_2 = `ip -6 tunnel add ip6tnl mode ipip6 remote '${LOCAL_IPV6}' local '${VPS_SERVER_IPV6}' dev ens3 encaplimit none`;
        my $ipip6tunnel_3 = `ip link set dev ip6tnl up`;

        my $route_1 = `route add -net 192.168.0.0/16 dev ip6tnl`;
        my $route_2 = `route add -net 10.0.0.0/8 dev ip6tnl`;
        my $route_3 = `route add -net 172.16.0.0/12 dev ip6tnl`;
        my $route_4 = `route add -net '${LOCAL_IPV4}' dev ip6tnl`;

        print("ipv6 ds-lite の構築が完了しました。\n");

}else{
        print "1以外の入力がされました。\n";
        print "終了します。\n";
}

【VPSサーバ/ds-lite接続の実行】

ds-lite@vps:~ $ sudo perl /home/ds-lite/vps_ds-lite.pl 

3.2.5 NIC/enp0s4 MTU設定(経路)
MTU:1460 に変更する。

ds-lite@vps:~ $ sudo ip route add 【ミニPC:DHCPサーバ ipv4アドレス/サブネットマスク】 mtu 1460 dev enp0s4

3.3 ミニPC側

3.2.1 ミニPC/カーネルパラメータ設定

ds-lite@minipc:~ $ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.lo.forwarding = 0
net.ipv4.conf.enp1s0.forwarding = 1
net.ipv4.conf.enp2s0.forwarding = 0
net.ipv4.conf.enp3s0.forwarding = 0
net.ipv4.conf.enp4s0.forwarding = 0
net.ipv4.conf.wlp0s20u5.forwarding = 0
net.ipv4.conf.ip6tnl1.forwarding = 1
#------------------------------------
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.lo.forwarding = 0
net.ipv6.conf.enp1s0.forwarding = 0
net.ipv6.conf.enp2s0.forwarding = 0
net.ipv6.conf.enp3s0.forwarding = 0
net.ipv6.conf.enp4s0.forwarding = 1
net.ipv6.conf.wlp0s20u5.forwarding = 0
net.ipv6.conf.ip6tnl1.forwarding = 0
#------------------------------------
net.ipv6.conf.enp1s0.accept_ra = 0
net.ipv6.conf.enp2s0.accept_ra = 0
net.ipv6.conf.enp3s0.accept_ra = 0
net.ipv6.conf.enp4s0.accept_ra = 2
net.ipv6.conf.wlp0s20u5.accept_ra = 0
#------------------------------------
net.ipv4.conf.default.rp_filter =0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.ip6tnl1.rp_filter = 0
net.ipv4.conf.enp1s0.rp_filter = 0

【更新のためコマンドを実行】

ds-lite@minipc:~ $ sudo sysctl -p

3.3.2 NIC設定
NICよりオフロード,チェックサム等の値を変更します。
【1行ずつコマンドを実行】
《NIC/enp1s0 の設定》

ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-gso off                   
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-ntuple off                
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-rxhash off                
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-rx-gro-hw off             
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-rx-udp-gro-forwarding off 
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-rx-udp_tunnel-port-offload off
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tso off                   
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tx-checksum-ipv4 off      
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tx-checksum-ipv6 off      
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tx-checksum-ip-generic off 
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tx-udp-segmentation off    
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tx-udp_tnl-csum-segmentation off
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.feature-tx-udp_tnl-segmentation off
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.coalesce-adaptive-rx 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.coalesce-adaptive-tx 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.coalesce-rx-frames 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.coalesce-rx-usecs 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.coalesce-tx-frames 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.coalesce-tx-usecs 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.pause-autoneg off                 
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.pause-rx off                      
ds-lite@minipc:~ $ sudo nmcli connection modify enp1s0 ethtool.pause-tx off   

《NIC/enp4s0 の設定》

ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-gso off                   
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-ntuple off                
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-rxhash off                
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-rx-gro-hw off             
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-rx-udp-gro-forwarding off 
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-rx-udp_tunnel-port-offload off
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tso off                   
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tx-checksum-ipv4 off      
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tx-checksum-ipv6 off      
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tx-checksum-ip-generic off 
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tx-udp-segmentation off    
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tx-udp_tnl-csum-segmentation off
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.feature-tx-udp_tnl-segmentation off
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.coalesce-adaptive-rx 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.coalesce-adaptive-tx 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.coalesce-rx-frames 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.coalesce-rx-usecs 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.coalesce-tx-frames 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.coalesce-tx-usecs 0
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.pause-autoneg off                 
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.pause-rx off                      
ds-lite@minipc:~ $ sudo nmcli connection modify enp4s0 ethtool.pause-tx off  

3.3.3 ファイアウォール(nftable)設定
ソースコードを掲載しますが、【】の部分は変更しています。
※ファイアウォールの細かい設定は、個々で設定を行ってください。

ds-lite@vps:~ $ sudo vim /etc/sysconfig/nftables.conf
flush ruleset

table netdev filter {
  chain ingress_filter {
    ip frag-off & 0x1fff != 0 counter drop
    tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg counter drop
    tcp flags & (fin|syn|rst|psh|ack|urg) == 0x0 counter drop
    tcp flags syn tcp option maxseg size 1-535 counter drop
    meta l4proto { igmp } counter packets 0 bytes 0 drop

  }
}

table ip6 filter {
        chain input {
                type filter hook input priority 0; policy accept;
                ip6 saddr【VPSサーバ:取得済みのIPv6アドレス】iifname "enp4s0" counter packets 0 bytes 0 accept
                iifname "lo"     counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept           }

        chain output {
                type filter hook output priority filter; policy accept
                ip6 daddr【VPSサーバ:取得済みのIPv6アドレス】oifname  "enp4s0"counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept     
        }

}

table ip filter {

        chain input {
                type filter hook input priority filter; policy accept
                meta l4proto { ipv4, icmp }              counter packets 0 bytes 0 accept
                ip saddr【ミニPC:DHCPサーバ ipv4アドレス/サブネットマスク】iifname "enp1s0" counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                iifname { enp1s0, ip6tnl1 } oifname { enp1s0, ip6tnl1 } counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept
        }

        chain output {
                type filter hook output priority filter; policy accept
                ip daddr【ミニPC:DHCPサーバ ipv4アドレス/サブネットマスク】oifname "enp1s0" counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept
        }

}

table ip nat {
        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                ct state related,established counter packets 0 bytes 0 accept     
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                oifname { ip6tnl1, enp1s0 } counter packets 0 bytes 0 masquerade
                ct state related,established counter packets 0 bytes 0 accept     
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                oifname { enp1s0, ip6tnl1 } counter packets 0 bytes 0 accept
                ct state related,established counter packets 0 bytes 0 accept 
        }
}

【ファイアウォール(nftable)の更新】

ds-lite@vps:~ $ sudo systemctl restart nftables.service

3.3.4 ds-liteの設定
“perl言語"を使って実行をしています。
ソースコードを掲載しますが、【】の部分は変更しています。

ds-lite@minipc:~ $ sudo vim /home/ds-lite/minipc_ds-lite.pl 
#!/usr/bin/perl

#-----------【魔法の言葉】------------
use POSIX qw(strftime);
use File::Path;
use strict;
use warnings;
#use NetAddr::IP;
#use Net::Netmask;
#use utf8;

#-----------【変数】------------
#IP関連設定
my $LOCAL_IPV6="【ミニPC:取得済みのIPv6アドレス】";
my $VPS_SERVER_IPV6="【VPSサーバ:取得済みのIPv6アドレス】";


#-----------【処理】------------
print "ds-liteの構築を開始します。\n";
print "※スーパーユーザーで実行してください\n";
print "項目の値を変更したい場合はテキストエディターなど使用し編集を行ってください。\n";
print "\n";
print "ds-liteを開始したい場合は・・・ 1 \n";

my $question = <STDIN>;
chomp $question;

if($question == "1"){
        print "これより ds-lite の構築を開始します。\n";

        my $ipip6tunnel_1 = `modprobe ip6_tunnel`;
        my $ipip6tunnel_2 = `ip -6 tunnel add ip6tnl mode ipip6 remote '${VPS_SERVER_IPV6}' local '${LOCAL_IPV6}' dev ens3 encaplimit none`;
        my $ipip6tunnel_3 = `ip link set dev ip6tnl up`;

        print("ipv6 ds-lite の接続が完了しました。\n");

}else{
        print "1以外の数字が入力されました。\n";
        print "終了します。\n";
}

【ミニPC/ds-lite接続の実行】

ds-lite@minipc:~ $ sudo perl /home/ds-lite/vps_ds-lite.pl 

3.3.5 NIC/enp1s0 MTU設定(経路)
MTU:1460 に変更する。

ds-lite@minipc:~ $ sudo ip route add 【ミニPC:DHCPサーバ ipv4アドレス/サブネットマスク】 mtu 1460 via 【ミニPC:DHCPサーバ デフォルトゲートウェイ(ipv4アドレス)】

以上になります。

自分はPS5でオンラインゲームをしています。
※機器自体のMTU:1460に変更しています。

今現在ですが・・・ApexLegends が重いようなぁ〜ふわふわしたようなぁ〜動きが鈍いような感じがします。
また、相手に攻撃しても全然当たらない。。。
VPSとミニPCの細かい設定したところ安定しているような感じがします。
少し様子をみたいと思います。

【実験動画】

【使用サービス情報】
NTT Docomo さん
JPIX さん
Akamai Cloud(Linode)※紹介リンクにさせて頂いています。

【参考文献】
note(2025年版)PCゲーマーなら必ず設定した方がいいネットワーク設定(Realtek PCIe GbE Family Controller)めちゃ細かく教えちゃいます!ゲーミング設定 – 最適化おじさん(K)PCゲームのあれこれ さん』
note FPSゲーマー必見のNICの受信・伝送(送信)バッファを深堀 – フォートナイトラグ改善マニアMuji さん