Ubuntu 22.04, ipip IPoE 固定IPルーター

Access from '3.142.42.247'
You are in US.
It is 19:47 JST now.

mini PC Ubuntu 22.04 で高速 ipip (transix) ルーター

ルーター設定手順

  1. NTT フレッツ・v6オプション を行っておく。NTT東日本 NTT西日本
  2. ZOOT NATIVEの申し込み
    ネットからの申込で最大2ヶ月無料で、途中で解約しても違約金などは一切ない。
    このようなプロバイダーはまれで最近はクレジットカードのみだとか制限だけしてユーザーだけにリスクを負わせる。という事は全くなくかなり好感がもてます!
    申し込みはこのリンクからも可能です。
  3. インターフェース設定
    ZOOT NATIVE の接続は NGN(NTT IPv6網)に接続してIPv6の場合は直接WANに繋がりますが、IPv4にはip4ip6(ipip6)トンネリングで繋がるのはDS-Liteと同一です。
    netplanの設定
  4. DNS(unbound)をインストール
  5. ufwの設定
  6. DHCP RAなどの設定
  7. ハードの一例

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 のインストールされたものに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:100: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:100:2e6:4cff:fefe:cead がIPv6グローバルIPになります。この結果からネットワークアドレスは 2409:cafe:dead:100:: となります。これはトンネリングを設定するのに重要な部分であり、WAN側IPv6アドレスを決定するのに必要です!
また、traceroute6 google.com を実行してIPv6側のgatewayを調べておきましょう。おそらく上記の場合は2409:cafe:dead:100::fffe なるでしょう。

netplan yamlファイルの設定

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

network:
  ethernets:
    enp1s0:
      accept-ra: no
      dhcp4: no
      dhcp6: no

# グローバルIPを固定化する。 
      addresses:
        - "2409:cafe:dead:100::feed/64"     #トンネル接続に使うIPv6アドレスの後半(下位64bit)を、プロバイダーが指定した「インターフェースID」と同じにする。
      routes:
        - to "::/0"
          via: "2409:cafe:dead:100::fffe"

# 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
# プロバイダーの指定した 固定IP トンネル終端装置 IPv6アドレス
      remote: "2404:8e00::feed:100"
# グローバルIPを記述 トンネル接続に使うIPv6アドレスの後半(下位64bit)を、プロバイダーが指定した「インターフェースID」と同じにする。
      local: "2409:cafe:dead:100::feed"

# プロバイダーの指定した 固定IP
      addresses:
        - 217.178.113.241/32
      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ユーザー会に詳しく解説されています。

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との接続を行ったり、サービスを開放します。192,168. や fd00:cafeなどは随意変更して下さい。

forwarding 設定

/etc/sysctl.conf のエディト。28行目のコメントを解除。

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1 ↓ net.ipv4.ip_forward=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]

# ここから
# Path MTU Discovery Problem 
-A ufw-before-forward -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# ここまで追加 

/etc/ufw/before6.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:
#   ufw6-before-input
#   ufw6-before-output
#   ufw6-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
# ここまで追加

/etc/ufw/after.rules のエディト。はじめにMangleを追加記述

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

# ここから
*mangle
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A FORWARD -o ip6tnl1 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1412
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
# ここまで追加

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-after-input - [0:0]
:ufw-after-output - [0:0]
:ufw-after-forward - [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のルーティング情報などはこれだけでは不十分でRAもLAN側に流すことが必要になるようでインストールは、DHCP IPv4用と IPv6向けRA割り振り用として radvd 双方をすることをお勧めする。

apt install isc-dhcp-server radvd

isc-dhcp-serverの設定

/etc/dhcp/dhcpd.conf の編集。最後に追加。このルーターの LAN側 IPは 192.168.1.1 fd00:cafe::1 に設定されるようにサンプルは書いています。

# A slightly different configuration for an internal subnet.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.144 192.168.1.191;
  option domain-name-servers 192.168.1.1;
  option domain-name "your-domain";
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
  default-lease-time 3600;
  max-lease-time 7200;
}

 

radvdの設定

/etc/radvd.conf の編集。

interface enp2s0 {
  AdvSendAdvert on;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  AdvOtherConfigFlag on;

  prefix fd00:cafe::4000/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
  };
}

内容は、IPアドレスなどを使用環境に応じて変更して下さい。radvd はIPv6 LAN fd00:cafe::/64 のデフォルトルートにしていされる機器にインストールします。

/etc/sysctl.conf の編集

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1 # 33行目 コメントアウト
net.ipv6.conf.default.forwarding = 1 # 追加


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through


最後に追加

###################################################################
# Protected links
#
# Protects against creating or following links under certain conditions
# Debian kernels have both set to 1 (restricted)
# See https://www.kernel.org/doc/Documentation/sysctl/fs.txt
#fs.protected_hardlinks=0
#fs.protected_symlinks=0
# ここから追加
# ipv6 RA
#net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.enp1s0.accept_ra = 2
net.ipv6.conf.enp1s0.accept_ra_pinfo = 1
net.ipv6.conf.enp1s0.autoconf = 1

 

使用感など

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


 

Network layer

Access from '3.142.42.247'
You are in US.
It is 19:47 JST now.

OSIモデル

OSIモデルは、インターネットの仕組みの概念モデルです。OSIモデルの主な目標は、人々がネットワーク機器とプロトコルについて話し、どのプロトコルがどのソフトウェアとハードウェアによって使用されるかを決定し、基盤となるハードウェアに関係なくインターネットがどのように機能するかを示すことを支援することです。

OSIモデルでは、さまざまなテクノロジーを分割して、インターネットを層で機能させます。合計で7つの層があります。

OSI Model

OSIモデルの第3層

OSI第3層は、ネットワーク層と呼ばれます。第3層は、相互接続されたネットワーク、つまりインターネットを可能にするプロトコルとテクノロジーで構成されています。この層は、ネットワーク全体のルーティングが行われる場所です。ネットワークを通過するデータはパケットに分割され、これらのパケットは第3層で宛先を与えられ、目的地へ送信されます。このプロセスで最も重要なプロトコルはインターネットプロトコル(IP)です。

第3層のプロトコルは、接続を開いたり、信頼できるデータ配信を保証したり、標的とするデバイス上のどのサービスがデータを使用すべきかを示したりしません。これらは第4層のプロセスです。第4層では、TCPやUDPなどのトランスポートプロトコルを使用します。第4層トランスポートプロトコルを使用せずにネットワーク経由でパケットを送信することは、住所が正しいことを確認せず、あるいはその住所の誰が手紙を開けるかを明示せずに住所宛てに手紙を郵送したり、また信頼できる郵便配達サービスを使わないようなものです。データは到着するかもしれないし、到着しないかもしれません。これが、多くの第3層プロトコルが常に、データが適切な場所に送られることを保証する第4層トランスポートプロトコルと共に使用される理由です。

ただし、トランスポートプロトコルを使用しなくても、IPを介してネットワークの宛先にデータパケットを送信することは可能です。

第3層は接続がないため、第3層のDDoS攻撃はTCP経由で接続を開いたり、ポート割り当てを示す必要はありません。第3層 DDoS攻撃は、特定のポートではなく、コンピューターが実行しているネットワークソフトウェアを標的にします。

第3層に使用されるプロトコルは?

これらは最も広く使用されている第3層プロトコルであり、DDoS攻撃で使用される可能性が最も高いものです。

IP:インターネットプロトコル(IP)は、正しい目的地に到着するようにデータのパケットをルーティングおよびアドレス指定します。インターネットに接続するすべてのデバイスにはIPアドレスがあり、IPプロトコルは各データパケットに正しいIPアドレスを添付します。誰かに宛てて手紙を送るのと同様です。

IPsec: IPsecは、VPNが使用するIPの暗号化されたバージョンであり、HTTPSとHTTPの違いに似ています。

ICMP:インターネット制御メッセージプロトコル(ICMP)はエラーレポートとテストを処理します。コネクションレス型プロトコルであるICMPは、TCPやUDPなどのトランスポートプロトコルを使用しません。むしろ、ICMPパケットはIPのみで送信されます。開発者とネットワークエンジニアは、pingおよびtraceroute機能にICMPを使用します。通常、一度に送信する必要があるICMPパケットは1つだけです。

第3層プロトコルには以下も含まれます。

  • IGMP:インターネットグループメッセージプロトコルはIPマルチキャストグループを管理し、ネットワーク内の複数のデバイスが同じIPトラフィックを受信できるようにします。
  • ARP:アドレス解決プロトコルは、単一のネットワーク内でのみ使用されます。コンピューターはこのプロトコルを使用して、IPアドレスをネットワーク内のMACアドレスにマップします(MACアドレスは、すべてのインターネット対応デバイスに組み込まれた一意の識別子で指紋のようなものです)。

これらのプロトコルのいずれかを使用すれば、理論的には攻撃が可能です。ICMPは一般に、応答できないほど多くのpingでサーバーをフラッディングするか、1つの大きなpingパケットで受信デバイスをクラッシュさせる(これは「ping of death 」として知られています)ために使用されます。攻撃者は、IPsecを使用して、標的にジャンクデータや非常に大きなセキュリティ証明書を送付してフラッディングさせることができます。

ただし、これらのプロトコルのすべてがDDoS攻撃に対して実用的であるとは限らず、ハードウェアの更新によって一部の種類の攻撃は不可能になります。たとえば、ARPはローカルネットワーク内でのみ動作するため、攻撃者はまずDDoS攻撃を実行する前にローカルネットワークに接続する必要があります。また、ICMP ping of death攻撃は、大きすぎるIPパケットを無視する最新のハードウェアでは不可能です。

第3層 DDoS攻撃の仕組みは?

他のタイプのDDoS攻撃と同様に、攻撃者はこれらのプロトコルを介して大量のジャンクネットワークトラフィックを送信します。プロトコルに応じて、これを行うためのさまざまな方法があります。ジャンクトラフィックは正当なユーザーリクエストの邪魔になり、それらへの応答を遅くしたり、完全にブロックしたりします。ジャンクデータが非常に多いため、標的のリソースを圧迫し、時に標的がクラッシュする場合があります。

よく知られているタイプの第3層 DDoS攻撃の例

IPを介した攻撃など、他の攻撃も可能ですが、ICMPベースの攻撃が最も一般的です。よく知られたICMP攻撃には以下が含まれます。

  • Pingフラッド: PingフラッドDDoS攻撃では、攻撃者は数千または数百万ものping要求を一度にサーバーに送信します。
  • Smurf攻撃:ICMPにはセキュリティまたは検証手段がありません。これにより、攻撃者はICMP要求でIPアドレスをスプーフィングできます。 Smurf DDoS攻撃では、攻撃者はping要求を数千のサーバーに送信し、ping要求の中で標的のIPアドレスを偽装して、応答が攻撃者ではなく標的に送信されるようにします。最新のネットワークハードウェアのほとんどは、この攻撃に対して脆弱性はありません。
  • Ping of death:ICMP Ping of Death攻撃では、攻撃者が最大許容サイズを超えるping要求を標的に送信します。標的に向かう途中のルーターは、pingを小さなパケットにフラグメント化するため、ターゲットはそれらを受け入れますが、小さなフラグメントから大きなパケットを再構築しようとすると、パケットサイズが最大値を超え、標的はクラッシュします。最近のデバイスは、この攻撃に対して脆弱ではありません。

TCP / IPモデルの第3層とは?

TCP/IPモデルは、ネットワークの動作の代替モデルです。TCP/IPモデルには7つの層の代わりに4つの層があります。

  1. アプリケーション層(OSIモデルの第5-7層に対応)
  2. トランスポート層(OSIモデルの第4層に対応)
  3. インターネット層(OSIモデルの第3層に対応)
  4. ネットワークアクセス/リンク層(OSIモデルの第1-2層に対応)

OSIモデルではなくTCP/IPモデルを参照すると、第3層 DDoS攻撃は第2層 DDoS攻撃となります。

Policy Routing

Access from '3.142.42.247'
You are in US.
It is 19:47 JST now.


policy routing とは

 

50-cloud-init.yaml

network:
  ethernets:
    enp1s0:
      accept-ra: no
      dhcp4: no
      dhcp6: no
      addresses:
        - 2409:cafe:dead:feed::801/64
      gateway6: 2409:cafe:dead:feed::fffe

    enp2s0:
      accept-ra: no
      addresses:
        - 192.168.1.1/24
        - fd00:cafe::1/64
      routing-policy:
        - from: 192.168.1.0/128
          table: 136
      routes:
        - to: 219.117.250.208/29
          via: 192.168.1.254
          on-link: true
        - to: 192.168.16.0/24
          via: 192.168.1.254
          on-link: true
        - to: 3.4.5.6/32
          via: 192.168.1.254
          table: 136
          on-link: true
      nameservers:
        addresses:
          - fd00:cafe::fe
          - 192.168.1.1
        search:
          - ntools.net

  tunnels:
    ip6tnl1:
      mode: ipip6
      remote: 2404:8e00::feed:100
      local: 2409:cafe:dead:feed::801
      routes:
        - to: 0.0.0.0/0
          scope: link
  version: 2

if setting dhcp range 192.168.1.129, rule is available “table: 136”.

CPU と ネットワーク速度

Access from '3.142.42.247'
You are in US.
It is 19:47 JST now.


passmark と ネットワーク速度

少し考えただけでも単に10ギガビットのNICを使っただけでは処理速度が追いつくか? という疑問を出てきます。
そこで iperf3 で転送速度をチェックしました。

  1. iperf3による計測
    • CPUの違い
      Num CPU Speed sender Speed receiver Passmark
      1 Celeron N2840 941Mbps 936Mbps 586
      2 Celeron 3805U 942Mbps 937Mbps 1102
      3 Ryzen 7 4800U 2.5G 2360Mbps 2330Mbps 16940
      4 Celeron J4125 943Mbps 938Mbps 2980
      5 Celeron N2940 943Mbps 938Mbps 1042
      6 E3-1225v6 2.5G NIC使用 2280Mbps 2270Mbps 7260
      No.1 specmark 586ではCPU占有率が100%となって処理がネットワーク速度に追いつかない
    • NIC 2枚
      NICを2つで、bonding デバイス(ラウンドロビン)でほぼ、2倍のパフォーマンスが得られる。
    • 2.5G ギガビットNIC使用
  2. NFSによるファイル転送速度
    Num CPU Speed Passmark
    1 Celeron N2840 820Mbps 586
    2 Celeron 3215U 930Mbps 1102
    3 Celeron J1900 930Mbps 1114
    4 Pentium 3805U 930Mbps 1037
    5 Pentium J4205 930Mbps 2317
    6 E3-1225v6 2.5G – Ryze7 2060Mbps min. 7260
  3. 考察
    単純にNICの高速化を行ってもCPU処理速度が不足すれば当然、NICの固有速度が得られるとは限らないし、アプリケーションによってCPU負荷が変化するので単純に早いインターフェースを使用しても高速化はできない。特にNFSでのファイル転送では速度低下が顕著!
    このデータはX86_64アーキテクチャーで同一メーカーのCPUを比較しているので単純な passmark値を使用した。
    裏を返せば 一般的な市販ルーター(¥20,000以下)のCPUでは866MBPSですら活かしきれていないのである。