PPPoE IPv6 ルーター

Access from '216.73.216.245'
You are in US.
It is 11:39 JST now.

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

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

ルーター設定手順

  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: で指定しましょう。

パッケージインストール

必要なパッケージ、ppp pppoe などをインストール。

# apt install ppp pppoe dhcpcd5
# systemctl enable pppd-dns.service プロバイダDNSを使用する場合


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

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

ufw の設定

ufw 設定と言っても中身はiptables の設定で、Masquarade でLANとWANとの接続を行ったり、サービスを開放します。また カーネル動作のシステム変数をセットも行います。

forwarding 設定、ufw 未使用でも動作させたい場合

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

# 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
↓ net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

forwarding 設定、ufw 使用時

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

# 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
↓ net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

forwarding 設定、ufw 未使用でも有効

/etc/sysctl.conf のエディト。33行目のコメントを解除し、1行追加。

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# 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


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

/etc/default/ufw のエディト。

# 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/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:
#   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  // 任意のIPv6 Local IPアドレス
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 fd00:cafe::/64 # ufw allow from 2000:bedd:cafe:aaaa::/64 割り当てられた IPv6アドレス

ufw enable 実行し、有効化するには再起動が必要です。

dhcpd 設定

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

$ sudo apt install dhcpcd5

dhcpcd の設定ファイルは /etc/dhcpd.conf で、編集は好みのエディタで編集します。

noipv6rs
denyinterfaces enp1s0 enp2s0 enp4s0
noipv4
noipv4ll

interface ppp0
  ipv6rs
  iaid 1
  ia_pd 1 enp3s0

この時点で 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-reload
# systemctl enable ppp.service
# systemctl start ppp.service

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

# ip address show

最後に

これで作業は完了します。また応用としてはIPv4 IPv6 PPPoE デュアルスタックルーターも制作可能です。IPoEに比べPPPoE IPV4ルーターは経路上の問題で低速になりがちですが、NGN グローバルIPと速度の低下もさほどありません。

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

Access from '216.73.216.245'
You are in US.
It is 11:39 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 アクセスポイントも構築していくのも良いかもしれません。


 

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

Access from '216.73.216.245'
You are in US.
It is 11:39 JST now.

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

機器性能など

Intel Celeron  J4125 搭載の ファンレスPC に Ubuntu 20.04 上に DS-Lite 設定をしたルーターの結果に気を良くしたのでIPoE固定IPでも作成しました。今回はCeleron J4125の小型ハードを使用し、前回の約3倍の速度で2/3の消費電力のCPUです。
残念ながらPPPoE Unnumberedの方が高速という結果がでました。IPv4の混雑という問題が結局、どこに接続しても変わらない・・・ということでしょうか? 堺市でのPPPoE速度は720Mbps程ですが混雑時のipip接続では600Mbpsを割ることすら発生しています。ただし、一般的な市販ルーターでこの属度はでないので気にすることではないし、ルーター負荷の軽いipip接続の価値は高いでしょう!!

ルーター設定手順

  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/50-cloud-init.yaml 編集します。

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

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

/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 20.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 アクセスポイントも構築していくのも良いかもしれません。


 

PPPoE 固定IP ルーター

Access from '216.73.216.245'
You are in US.
It is 11:39 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接続では専用ルーターになり、自由なサーバーは難しいようで、高額です。)