Ubuntu で DS-Lite ルーター

Access from '216.73.216.185'
You are in US.
It is 01:03 JST now.

ファンレス PC Ubuntu 22.04, 20.04 で超高速 DS-Lite(RFC6333) ルーター


これ実測です(^-^) 930Mbps 驚き!。

 

バグ対応 update dec. 2023

netplan によるトンネルデバイス(DS-Lite)設定がアップデートにより正常に設定できなくなっています。これはUbuntuだけでではないようです。新規に対応しています。
こちら https://mxnl.com/ipoe-ip-set/ からどうぞ

機器性能など update June. 2023

上記の画像の実際に使用した計測サイト は  https://fast.com/ja/ でこの数字は Intel Pentium 3805U 搭載の ファンレスPC に Ubuntu 22.04 上に DS-Lite 設定をしたルーターに有線接続したデスクトップPCでIPv6接続での最高数値です。LANにはクライアント機器10台以上やNASなどが接続されています。試験的に同時刻にMac Air i7、これだけをWiFi(866Mbps)に接続して計測した結果は、半分以下の 下り390Mbps – 上り330Mbps。やはり安めのWiFiルーターを通すと、この程度しか出ないようです。少し、NFSでの速度計測を利用してCPUによる速度の違いを実験しましたので暇があれば御覧ください。
IPv4ではトンネリング経由だけでなくIPv4網自身も混雑していますので過度な期待はしないで下さい。それでも speedtest.netで計測した値は下り816.69Mbps 上り 318.67Mbpsとかなり高速です。
ちなみに下記のネットワーク図1G網で、iperf3 計測値で941Mbpsのスループットが出ています。 ルーターをはじめとしたネットワーク機器でかなりの性能差は出ます。実際にRaspberry PIにインストールされたものはcpu稼働率100%で30Mbpsのスループットだという記事がありました。
実際、一般的なWiFiルーターでは速度比較では、お話にならないレベルです。それで2.5Gbps以上の回線を引いて早くなったなんて希望的な方や瞬間最大速度に振り回されていることがないようにして下さい。
また高速に接続したい方に向けて記述しているのでひかりテレビなどの使用は全く考慮していません
思い切り余談ですが Intel I225-V 4個使いのファンレス機で遊んでいます。

ルーター設定手順

  1. ZOOT NATIVEの申し込み
    ネットからの申込で最大2ヶ月無料で、途中で解約しても違約金などは一切ない。
    このようなプロバイダーはまれで最近はクレジットカードのみだとか制限だけしてユーザーだけにリスクを負わせる。という事は全くなくかなり好感がもてます!
    申し込みはこのリンクからも可能です。またIIJmioひかり IPoEオプション, OCN IPoE(要注意) もOKです。
  2. インターフェース設定 ZOOT NATIVE の接続は NGN(NTT IPv6網)に接続してIPv6の場合は直接WANに繋がりますが、IPv4にはip4ip6(ipip6)トンネリングで繋がります。セキュリティー面からもOSも必ずアップデートしてください。
    netplanによる方法
  3. ufwの設定
  4. DNS(unbound)をインストール
  5. DHCP RAなどの設定
  6. ハードの一例

 

ネットワーク図


クリックで拡大
 今回、作成する機器はブルーのDS-Liteルーターです。

x86_64のルーターを使用する理由
一部のサイトでは速度があまり上がらないという話がありますが、実際に使用しているルーターのパフォーマンスだけでなくネットワーク設計によりかなり違います。特に¥40,000以下の安価なWiFiルーターの脆弱なMPU使用した機器の性能やそれに繋がれたスマートフォンの様な重いGUI機器ではもちろん数百MBpsの速度はでないことは明らかです。そのおかげでマンションタイプのギガネットでも500MBPS程度以上のパフォーマンスは出ていているので、ネット混雑にはなりにくいため、ある意味 助けられているのかもしれません。昨今、自分でサーバーも設定せずに何処ぞのブログサイトで技術云々を語っている多数の方々には理解不能かもしれませんが・・・
ちなみに瞬間最大速度ではなく多数のタスクを処理できないと安定して高速はできません。
実際、Unnumberで市販で¥10,000程度の無線LANルーターを使ってギガビットLANで接続された機器より100MBPSのFTTHで性能の良いルーターを使用した機器の方がより高速で安定したものになるでしょう。
ちなみにルーターを作成するのですから当然LANポート、ネットワークデバイスは2つ以上必要です。


Netplanを使ったIPアドレスとトンネリング

IPv6のアドレスとgateway(IPv6)

NTT IPv6網(NGN)からRAでIPアドレスが設定されます。ひかり電話ルーター(HGW)がある場合はIPv6パススルーに設定するか、ONUに直接接続します。スループットはONUに直接接続したほうが良いでしょう。
Ubuntu 18.04.3のインストールされたものにNGNを接続するして “ip -6 address show” コマンドを実行すれば次のように表示されます。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2409:cafe:dead:feed:2e6:4cff:fe68:a27/64 scope global dynamic mngtmpaddr noprefixroute   <- これがIPv6 Wan側 IP
       valid_lft 2591986sec preferred_lft 604786sec
    inet6 fe80::2e6:4cff:fe68:a27/64 scope link 
       valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fe80::2e6:4cff:fe68:a26/64 scope link 
       valid_lft forever preferred_lft forever
この例の場合は 2409:cafe:dead:feed:2e6:4cff:fefe:cead がIPv6グローバルIPになります。もし 2409:cafe:dead:feed::1 のような判りやすいIPにしたければ traceroute6 google.com を実行してIPv6側のgatewayを調べて記述できます。

netplan yamlファイルの設定

ルーターを作成するにはUbuntuサーバー版が良いのでNetworkmanager を使わない時のサンプルです。
通常、/etc/netplan/50-cloud-init.yaml 編集します。

network:
  ethernets:
    enp1s0:
# RAで割当られたグローバルIP使用する場合は記述しない
      accept-ra: no

# RA割当られたグローバルIPを書く場合はこの2行だけでOK
      dhcp4: no
      dhcp6: no

# グローバルIPを固定化する場合(上記の様にgatewayを確認した上で記述)
      addresses:
        - 2409:cafe:dead:feed::801/64
      gateway6: 2409:cafe:dead:feed::fffe
# RA割当られたグローバルIPを書く場合は記述不要

# LAN 側
    enp2s0:
      accept-ra: no
      addresses:
        - 192.168.1.1/24
        - fd00:cafe::1/64
#if use static route
      routes:
        - to: 10.0.0.0/8
          via: 192.168.1.254
          on-link: true
        - to: 4.3.2.1/32
          via: 192.168.1.254
          on-link: true
       nameservers:
        addresses:
          - fd00:cafe::80a
          - 192.168.1.11
        search:
          - ntools.net

  tunnels:
    ip6tnl1:
      mode: ipip6
#NTT 東日本の場合
      remote: 2404:8e00::feed:100
#NTT 西日本の場合
      remote: 2404:8e01::feed:100
#上記どちらかを記述
# グローバルIPを記述 local: 2409:cafe:dead:feed:2e6:4cff:fefe:cead # OCN等 mtu 設定が必要な場合
# mtu: 1460 #
routes: - to: 0.0.0.0/0 scope: link version: 2

 

Unbound インストール

別途ネームサーバーがあれば不要ですが、DS-Liteではダイナミックに通知されるので設定するのがお勧め。

sudo apt install unbound

unbound の設定ファイルは /etc/unbound/unbound.conf.d/unbound-local.conf で、編集は好みのエディターで以下の様なものがサンプルになります。設定は interface: に自分のIPアドレスをIPv4、IPv6 それぞれ設定すればOKです。
また、アクセスを許可する ネットアドレスを access-control: で設定します。下記のサンプルは、allow すなわち許可範囲で deny 禁止も可能です。Unboundに関しては日本Unboundユーザー会に詳しく解説されています。好みで適当なものでもOKです。

server:
    interface: 127.0.0.1
    interface: 192.168.1.1
    interface: fd00:cafe::1
    interface: 2409:250::1fb
    access-control: 2409:250::/64 allow
    access-control: fd00:cafe::/64 allow
    access-control: 192.168.1.0/24 allow

 

ufw の設定

ufw 設定と言っても中身はiptables の設定で、Masquarade でLANとWANとの接続を行ったり、サービスを開放します。システムとしてしっかり設定をしてUbuntuのカーネル等のバージョンアップにもしっかりとした設定をして下さい。過去の遺物を使った設定や意味がわからずにやらないようにすることが寛容です。

forwarding 設定

/etc/ufw/sysctl.conf のエディト。9行目からコメントマーク#を消す。

Uncomment this to allow this host to route packets between interfaces
#net/ipv4/ip_forward=1
#net/ipv6/conf/default/forwarding=1
#net/ipv6/conf/all/forwarding=1 ↓ # Uncomment this to allow this host to route packets between interfaces
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

/etc/default/ufw のエディト。19行目を編集。

# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="Drop"
       ↓
DEFAULT_FORWARD_POLICY="ACCEPT"

/etc/ufw/before.rules のエディト。はじめにMasquaradeを記述

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# Masquarade ここから
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
COMMIT
# don't delete the 'COMMIT' line or these rules won't be processed
# ここまで追加

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

続いて /etc/ufw/before6.rules のエディト。/etc/ufw/before.rules と同様にMasquaradeを記述

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# Masquarade ここから
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -s fd00:cafe::/64 -j MASQUERADE
COMMIT
# don't delete the 'COMMIT' line or these rules won't be processed
# ここまで追加

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw6-before-input - [0:0]
:ufw6-before-output - [0:0]
:ufw6-before-forward - [0:0]
:ufw6-not-local - [0:0]

 

以下のコマンドを実行してLAN側からのアクセスをすべて許可(外部からは不可)

ufw allow from 192.168.1.0/24
ufw allow from fd00:cafe::1
ufw allow from 2409:250::/64

 

DHCP RAなどの設定

Ubuntu 22.04 パッケージでDHPCP サーバーの isc-dhcp-serverは、IPv4,IPv6双方に対応し使用しても良いでしょう(未検証)。IPV6のルーティング情報はradvdだけで十分です。

いい加減な記事に『radvdはDNS情報設定は出来ない』などの嘘っぱちが多いので注意が必要です。
複数のDNSの指定も RDNSS fd00:cafe::beaf fd00:cafe::abe3 {} とスペースで区切り複数設定が可能。

apt install isc-dhcp-server radvd

 

radvdの設定

/etc/radvd.conf の編集。ちなみにGatewayはradvdをインストールした機器が設定されます。設定は簡単でdhcpサーバーの方が難解です。

interface enp2s0 { # RA(dhcp代わり) 対象のI/F
  AdvSendAdvert on;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  AdvOtherConfigFlag on;

  prefix fd00:cafe::/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
  };
RDNSS fd00:cafe::beaf {}; # DNSのIPを記述 };

検証は radvdump で表示出来ます。 インストールは apt install radvdump でOK。


使用感など

さすがに日本のネット環境は素晴らしいというのが感想で、実際に100Mbps を超える環境を使用できる国は少ない。海外生活が長い自身の感想がこれです! またモバイル環境などの瞬間最大速度ではなく、タスク配分もCiscoやヤマハの高額ルーターよりも高速なものが手軽に作れるのが嬉しい限りです。
用途として固定IPはPPPoEが主流なので今後も使用していきたいのですが、ワークステーションやOSのダウンロードやアップデートの経路にIPoEのZOOT NATIVEの活用はなかなか小気味の良いものであり、WiFi アクセスポイントも構築していくのも良いかもしれません。
契約をしていなくて検証ができていませんが、IIJのブロードバンドサービス、IIJmioひかりや、IIJmio FiberAccess/NF でのIPoEでも使用できると思います。

MTU の設定(OCNで必要)

ip6tnlでモードをipip6 にすれば 自動的にMTUは 1452 に設定されますが、OCN用にMTUを1460にする場合はnetplan yaml ファイルでコメントに記載されたように mtu: xxxx で変更できるので必要に応じて変更して下さい。

最後にNTT V6オプションを設定すればONUにもれなくNGNに接続されて、これには全世界にIPv6では固定IPが ::/64 で使用できます。