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 と ネットワーク速度

passmark と ネットワーク速度

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

  1. NFS上のファイルを転送(1ギガビットNIC使用)
    • CPUの違い
      Num CPU Speed Passmark
      1 Celeron N2840 820Mbps 1010
      2 Celeron 3215U 930Mps 1657
      3 Celeron J1900 930Mps 1868
      4 Pentium 3805U 930Mps 1998
      5 Pentium J4205 930Mps 2395
        Pentium J4205 2NIC 1880Mps 2395
      No.1 specmark 1010ではCPU占有率が100%となって処理がネットワーク速度に追いつかない
    • NIC 2枚
      NICを2つで、bonding デバイス(ラウンドロビン)でほぼ、2倍のパフォーマンスが得られる。
  2. 考察
    単純にNICの高速化を行ってもCPU処理速度が不足すれば当然、NICの固有速度が得られるとは限らないし、アプリケーションによってCPU負荷が変化するので単純に早いインターフェースを使用しても高速化はできない。
    このデータはX86_64アーキテクチャーで同一メーカーのCPUを比較しているので単純な passmark値を使用した。
    裏を返せば 一般的な市販ルーター(¥20,000以下)のCPUでは866MBPSですら活かしきれていないのでないかと想像できる。

PPPoE 固定IP ルーター

Ubuntu 18.04 サーバー で PPPoE Unnumbered (固定IP) ルーター 作成

IPoE DS-Lite ルーターと同様、ファンレス PC*1に、Ubuntu 18.04.3 Server版を構築しスループットの向上を目指します。結果から言えば実測で690Mbpsが計測されました。IPv4 では混雑が激しいので潜在的には十分以上だといえるでしょう。
*1 J1900 4GB Mem mSATA 32GB (メモリー2GB ストレージが8GB以上あれば大丈夫です。)

ネットワーク図(赤部分が今回のルーター

ルーター設定手順

  1. IPアドレスの設定
  2. PPPoEの設定
  3. sysctl ufwの設定
  4. キャッシュ DNS(unbound)のインストール
  5. systemctl xxxx ppp.service で制御できるようにする。

IP 設定

ネットワークのIP設定を確認します。
unnumbered(固定 8IP): 200.100.50.0/29  LAN: 192.168.1.0/24
インターフェース enp1s0: emu に接続   enp2s0: 200.100.50.1   enp2s0: 192.168.1.1
/etc/netplan/50-cloud-init.yaml は以下の様になります。

  1. 設定を表示 – ネットワークインターフェースが3個以上必要なのでちょっと、凝って4つのインターフェースを使い、ボンディング設定(クリックして表示)をしてみました。もちろん自分のIPに応じて変更して下さい。ボンディングのモードについては、拙作の英語版サイト https://www2.ntools.net/bonding/ に書いています。
  2. 設定を表示 – ボンディングなしの通常の設定例はPPPoE以外のネットワーク設定ということを用意に理解できるものになっています。

 


PPPoEの設定

コマンドラインで “pppoeconf” を実行すれば、このような画面が出て聞いてきますので全て答えていきます。DNSは自前のサーバーがなければプロバイダーの物を自動で設定するように出来ますが、これはできますよというものです。pppoeconfは、Ubuntu 16.04では完璧なのですが、Ubuntu 18.04 のデフォルトで使用するのは問題があります。

それでは必要なパッケージ、ppp をインストールしてください。

# apt install ppp


編集するファイルは以下の通りで、クリックしてそれぞれ、表示された指示通りに編集して下さい。

    1. /etc/ppp/chap-secrets
    2. /etc/ppp/pap-secrets
    3. /etc/ppp/peers/dsl-provider
    4. /etc/ppp/ip-up 関連

ufw の設定

ufw 設定と言っても中身はiptables の設定で、Masquarade でLANとWANとの接続を行ったり、サービスを開放します。

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]

以下のコマンドを実行してLAN側からのアクセスをすべて許可(外部からは不可)
ここで許可するのは、このルーターに対するものだけです。 WAN 側に接続されたサーバーのポートなどの許可をする必要はありません。サーバーアクセス制限はそれぞれのサーバーで行います。

# ufw enable
# ufw allow from 192.168.1.0/24 # ufw allow from 200.100.50.0/29

ufw enable 実行し、有効化するには再起動が必要です。この時点で poff dsl-provider 実行し、再起動した後に ppp0 が接続された事を確認してください。勿論、enp2s0 に接続されたサーバーなどからインターネット接続されたことも確認できるでしょう。


Unbound インストール

別途ネームサーバーがあれば不要です。インストールは簡単に出来きて手順は以下の通りです。

$ 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: 200.100.50.1
    access-control: 200.100.50.0/29 allow
    access-control: 192.168.1.0/24 allow

ppp.service の登録

エディターで /etc/systemd/system/ppp.service を以下のように作成します。

[Unit]
BindsTo=sys-subsystem-net-devices-enp1s0.device
After=sys-subsystem-net-devices-enp1s0.device

[Service]
ExecStartPre=/sbin/ip link set mtu 1508 dev enp1s0
ExecStartPre=/sbin/ip link set up dev enp1s0
ExecStart=/usr/sbin/pppd call dsl-provider
Type=forking
SuccessExitStatus=5
RestartSec=3S
PIDFile=/run/ppp0.pid

[Install]
WantedBy=sys-subsystem-net-devices-enp1s0.device

この中のenp1s0はONUに接続するネットワークインターフェースです。インターフェース名は使用するものを記述してください。
編集終了後、systemctl daemon-reloadsystemctl enable ppp、次にsystemctl start pppを実行します。ip address show を実行して ppp0などが表示されてプロバイダーから指定されたIPになっていることを確認してください。再起動も忘れずに!


最後に

これで作業は完了します。IPv6の作業はさほど難しくはないでしょう。スールプットはDS-Lite ルーターに比べて遜色はないと思いますが、速度計測サイトは下図の通りで全く問題なく一般的に販売されている物よりかなり良い物が出来ていると思います。IPoE接続ではNGNからIPv4に接続させる為、トンネリング経由になる為、一般的なプロバイダー接続になるには問題が多いと思われます。(OCNのIPoE固定IP接続では専用ルーターになり、自由なサーバーは難しいようで、高額です。)