Policy Routing

Access from '18.226.166.207'
You are in US.
It is 23:57 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 '18.226.166.207'
You are in US.
It is 23:57 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ですら活かしきれていないのである。

PPPoE 固定IP ルーター

Access from '18.226.166.207'
You are in US.
It is 23:57 JST now.

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

IPoE DS-Lite ルーターと同様、ファンレス PC*1に、Ubuntu 22.04 Server版を構築しスループットの向上を目指します。結果から言えば実測で754.16Mbpsが計測されました。IPv4 では混雑が激しいので潜在的には十分以上だといえるでしょう。
*1 J4125 4GB Mem mSATA 32GB (メモリー4GB ストレージが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. bondingあり
    設定を表示 – ネットワークインターフェースが3個以上必要なのでちょっと、凝って4つのインターフェースを使い、ボンディング設定(クリックして表示)をしてみました。もちろん自分のIPに応じて変更して下さい。ボンディングのモードについては、拙作の英語版サイト https://ntools.org/bonding/ に書いています。
  2. 通常の設定
    設定を表示 – ボンディングなしの通常の設定例はPPPoE以外のネットワーク設定ということを用意に理解できるものになっています。Ubuntu 22.04 では gateway6 gateway4 はWarning が出ます。routes: で指定しましょう。

 


PPPoEの設定

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

それでは必要なパッケージ、ppp pppoe をインストールし pppd。

# apt install ppp pppoe
# systemctl enable pppd-dns.service


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

    1. /etc/ppp/chap-secrets
    2. /etc/ppp/pap-secrets
    3. /etc/ppp/peers/dsl-provider
    4. /etc/ppp/ip-up 関連
    5. systemctl enable pppd-dns.service を実行

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 を以下のように作成します。意味については man systemd-service 参照

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

[Service]
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-reload
# systemctl enable ppp.service
# systemctl start ppp.service

下記のコマンドを実行して ppp0などが表示されてプロバイダーから指定されたIPになっていることを確認してください。再起動も忘れずに!

# ip address show

最後に

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

CentOS 8 で ssh ポートを変更

Cent OS 8 は firewall-cmd , SeLinux など高度なセキュリティを持っているのですが、よくあるブログの解説では 停止させる。とかして問題を回避しています。
もちろんこれらの動作を止めることなく活用して ssh ポートを変更していきます。

まずはssh サーバーの設定ファイル /etc/ssh/sshd_config を編集します。

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port xxxx <--- ここに好みのポート番号を記述
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

もしこの状態で “sudo systemctl restart sshd.service” を実行すれば

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
 enabled)
   Active: activating (auto-restart) (Result: exit-code) since Sat 2019-12-07 20
:37:23 EST; 33s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 3016 ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY (code=exited
, status=255)
 Main PID: 3016 (code=exited, status=255)

Dec 07 20:37:23 red systemd[1]: sshd.service: Failed with result 'exit-code'.
Dec 07 20:37:23 red systemd[1]: Failed to start OpenSSH server daemon.

こんな感じのエラーがでます。

ここで2つのことを実行します。

  1. ssh service の再定義
  2. selinuxを設定

Step1: /usr/lib/firewalld/services/ssh.xml を編集します。

<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="xxx"/>  <--- xxx を好みのポート番号に変更
</service>

Step 2: 以下のコマンドを実行

# semanage port -a -t ssh_port_t -p tcp xxxx  <--- xxx を好みのポート番号に変更

設定を確認して再起動すれば完了!!

Let’s Encryptで無料のSSL

Ubuntu 22.04 にセットアップ

既にapache2 でサイトがUbuntu/Debian Apache2の標準的な設定で構築されていることが前提です。
Ubuntu 22.04 には 標準のリポジトリーでCertbotパッケージが用意されており非常に簡単にセットアップできます。
まずはroot になり。パッケージをインストールして作業をしていきます。

$ sudo -i

# apt install apt install certbot python3-certbot-apache


続いてrewriteモジュール(WordPressでも使用されます)を有効化を行い、証明書をインストールしていきます。インストールするホスト名を選択し質問に答えるだけで完了します。

# a2enmod rewrite
# certbot --apache


上記が正常終了すれば、Apache2の再起動です。

# systemctl restart apache2.service


以下のコマンドでサーバー上、全ての証明書が更新されます。

# certbot renew --post-hook "systemctl restart apache2.service"


crontabの月単位の実行で、証明書の期限を自動的にアップデートできるようにしましょう。スクリプト名は letsencrypt とします。ファイルの内容は

#!/bin/sh

# update (renew) cert.
/usr/bin/certbot renew --post-hook "systemctl restart apache2.service" 

このシェルスクリプト、 letsencrypt を実行権限を付けて/etc/cron.monthly/ に置けば完成!!

# chmod +x letsencrypt
# mv letsencrypt /etc/cron.monthly/

 

新たなセキュリティ技術

新たなセキュリティ、NSMKの考え方

今の個人情報漏れの大半の原因は何でしょう? SSLを使ってない!?
暗号化は鍵ファイルがあれば、どんなに堅牢な物でも 暗号化していないのと同じです。
また、量子コンピュータなどが実現したら暗号化なんて意味がない!? 本当でしょうか?
量子コンピュータがあれば鍵ファイルを作るのが早いために意味がなくなるのです。
それらの欠点をすべてクリアできる技術を開発する構想とサンプルはできました。
上記だけではありません。SSLで通信していてもサーバー内部の暗号化はほとんど無く、
あっても簡単な鍵ファイルだけです。これでは情報漏れがあっても不思議ではないですよね!?
もちろんNSMK方式のアーキテクチャにはサーバー内部データの暗号化も含まれています。

この技術の延長上には下記のような応用が可能です。

  1. PCやUSBメモリーデバイスのファイルが盗まれてもデータファイルは見えない!
  2. SNSやメールサーバー いつまでも「手を変えしなを変え」続く攻撃 入り口で遮断
  3. 国などの単位でアクセスを規制。サーバーの入り口で遮断するのでサーバ負荷が、激減
  4. パスワードによる保護が不要に!!
  5. データベースの保存されている情報を持ち逃げできない。
  6. 不正操作による盗難でも解読出来ない。
  7. 誰にも解読されないクラウドデータサービス。
  8. セキュアーシェル ssh の更なる安全化。
  9. 人事管理の外部漏洩が実質、不可能に。
  10. その他応用は数多。

もし、これに興味がある方が居れば一緒にやっていきませんか!?
技術者はもちろん、営業面での仲間、出資関係などなど 多方面の方の参加が得られれば最高です!!
基本的なソフトは75%完了しています。

開発者を中心とした会社組織の詳細は御連絡頂い方々に、お伝えします。
まずはコメント欄から連絡をお願いします。質問でも結構です。
希望されない限り、コメントは公開されません。

Ubuntu で DS-Lite ルーター

Access from '18.226.166.207'
You are in US.
It is 23:57 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 で使用できます。