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

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


 

ffmpeg & mp4tags コマンドライン

Access from '3.145.85.123'
You are in US.
It is 19:50 JST now.

ffmpeg  mp4tags


Ubuntu 22.04 , Debian 12 でも mp4tags など mp4v2 ユーティリティを使用

mp4tags コマンドは ffmpeg で Video のタイトルなどマメに設定するのは骨がおれるので mp4tagsを騙し、騙し、Ubuntu 18 のコマンドを使用してきただが、調べてみると当時と比べかなりバージョンが上がっている(当たり前だが・・・)
そこでVersion 2.5.0.1 の debパッケージを作成したので好みで ダウンロードしてみてください。
インストールは簡単で sudo dpkg -i  [ダウンロードしたファイル] で可能です。 ちなみに こちらの環境では debian 12,  ubuntu 22.04で動作しています。

コマンドライン使用法

ffmpeg の基本である動画形式の変換です。

トランスコード

基本となるトランスコーダー的使い方について説明する。トランスコードとは、符号化してあるものを一旦復号化し、別の形式で符号化しなおす処理全般のことを言う。書式は以下の通り。

ffmpeg INPUT_OPTIONS -i INPUT_FILE OUTPUT_OPTIONS OUTPUT_FILE

入力ファイルと出力ファイルを指定して、あとは適宜オプションを指定すればよい。基本的にはそれだけである。例えば、AVI を MP4 に変換するには、

ffmpeg -i input.avi output.mp4

とすればよい。実際これで動くわけだが、これだと出力のコーデックがどうなっているのか、ビットレートはどうなのか、何も分からない。これらの不足している情報は自動的に補われ、例えばこの場合だと、出力のコーデックはおそらく H.264 になるものと思われる。

出力のビットレート等を具体的に指定したくなったときに使うのが出力オプションである。例えば動画のビットレートを 2 Mbps にしたいのであれば、

ffmpeg -i input.avi -b:v 2M output.mp4

とすればよい。もちろん1パス処理なので正確にこの値になるわけではないが、ある程度コントロールできる。では入力のオプションは何に使うのかと言うと、フォーマットに含まれていない情報を補ったり、それを上書きしたりするときに使う。また、純粋なトランスコード以外の簡単な加工、例えば動画サイズ変更、を行うオプションも存在する。

主要オプション解説

以下、主要なオプションについて簡単に解説する。/ で区切られているのは同じオプションの表記違い、(in), (out), (in/out) はそれぞれ、入力用オプション、出力用オプション、両方に使用可能なオプションを意味する。

フォーマット指定: -f (in/out)

フォーマットを指定するオプションだが、ほぼ100%拡張子から判定できるので、よほど変なことをしようと思わない限り基本的には不要。変なことというのは、例えば拡張子が avi の MP4 ファイルを作るなど。使う可能性があるものとしては、複数の動画を結合する際に使う concat と、RAW データを表す rawvideo がある。

コーデック指定: -c:v / -codec:v / -vcodec (in/out)

v の部分はビデオを意味する。同様にして、音声コーデックは -c:a で指定できる。動画も音声もまとめて扱う際は、-c とすればよい。使うことが多いと思われるコーデックをいくつか挙げておく。

ffmpeg での表記 対応するコーデック
libx264 OR h264 H.264 / AVC
libx265 OR hevc H.265 / HEAV
mpeg4 MPEG-4 Part 2
mpeg2video MPEG-2 Part 2
rawvideo RAW

MPEG-1 は古すぎるので、MPEG-3 は存在しないので挙げていない。H.264 と H.265 については、libx264 と libx265 がエンコーダー、h264 と hevc がデコーダーに対応する。仕様可能なコーデック一覧は、

ffmpeg -codecs

で取得できる。

動画の長さの指定: -t (in/out)

動画を指定した長さで打ち切ることができる。単位は秒。入力と出力に適応可能だが、これはそれぞれ、入力動画基準で何秒か、出力動画基準で何秒かという指定になる。この区別は、例えば途中で再生速度を変更したりタイムスタンプを書き換えたりした際に意味を持つ。

動画の開始時刻の指定: -ss (in/out)

単位は秒で、入出力両方に適応可能なことの意味合いは -t と同様。

品質指定: -q:v / -qscale:v (out)

出力の品質を指定できる。小さい方が高品質だが、ファイルサイズは大きくなる。具体的な意味合いはエンコーダーに依存する。なお、H.264 の場合はどうやらエンコーダーがこの指定を無視するようなので、代わりに以下の2つのエンコーダーオプションを用いる必要がある。

品質指定(最小): -qmin (out)

H.264 等のエンコーダーは、フレームごとに異なる q の値を使っている。このオプションは q の値域の最小値を指定する。

品質指定(最大): -qmax (out)

同様に q の値域の最大値を指定する。具体的な使い方はここを参照。

品質オプションのようにエンコーダー依存が大きいものに関しては、コーデックごとに何が有効か色々と試してみる必要がある。

フレームレート指定: -r (in/out)

単位は FPS。入力への指定と出力への指定で、振る舞いが異なる。入力へ指定した場合、動画に元からあるタイムスタンプが破棄され、ここで指定したフレームレートに基づいて新しくタイムスタンプが振り直される。つまり、間接的に動画の長さが変わることになる。出力へ指定した場合は、いわゆるフレームレート変換的な振る舞いになり、動画の長さは変わらない。なおフレーム補間は行われず、時間的に近いフレームが参照される。

動画サイズ指定: -s (in/out)

指定は -s 1920x1080 という要領で行う。これも入力と出力で意味が異なる。RAW データ等サイズが分からないフォーマットの場合、このオプションを用いてサイズ指定を行う。出力へ指定した場合は、そのサイズへの拡大縮小処理が走る。

ピクセルフォーマット指定: -pix_fmt (in/out)

ピクセルフォーマットとは、YUV データの並び方、ビット深度、UV のサブサンプリング方式等を指定するものである。動画サイズと同様、入力は値が不明なフォーマットの場合の指定、出力はその形式への変換となる。よく使われる、8-bit PLANAR のピクセルフォーマット例をいくつか挙げる。PLANAR というのは、YUV チャンネルをそれぞれ1枚の画像として保持する形式である。

ffmpeg での表記 UV サブサンプリング
yuv420p 縦横共に 1/ 2 にサブサンプリング
yuvj420p 縦横共に 1/ 2 にサブサンプリング
yuv422p 縦のみ 1/ 2 にサブサンプリング
yuv444p サブサンプリングしない

yuvj420p とは yuv420p のフルレンジ版であり、jJPEG からきている。レンジ設定は別にあるので、これは本来であればピクセルフォーマットに含めるべきものではない。ffmpeg としても depricated な設定だが、見かけることがあるので挙げた。フォーマットの一覧は、

ffmpeg -pix_fmts

で取得できる。

アルバムアート追加:

ffmpeg -i input.mp3 -i AlbumArt.png -disposition:v:1 attached_pic -map 0 -map 1 -id3v2_version 3 -metadata:s:v 'show=Show title' -metadata 'title=Music Title' -metadata "artist=Yoiko Tanaka" -metadata genre=misic -metadata date=2022 output.mp3

ビットレート指定: -b:v (out)

単位は bps。M や K などの接頭辞も使用可能。-qmin, -qmax と同様これもエンコーダーへのオプション指定であるが、あまり違いについて考える必要はない。なお、品質と同時に指定した場合にどちらが優先されるのかは把握していない。

音声無効化: -an (in/out)

最後に動画用のオプションではないが、便利なので挙げておく。これを指定すれば音声が削除される。

コマンド例

フォーマットだけ変換する

例えば AVI を MP4 に変換したいが、動画も音声もコーデックはそのままでいいという場合がある。そのときは、

ffmpeg -i input.avi -c copy output.mp4

とすれば、再エンコードなしで入れ物(フォーマット)だけ変更することができる。逆に言えば、-c copy を指定しない場合、仮に同じコーデックであったとしても再エンコードが走るので、品質が落ちる結果になる。

動画のコーデックを H.264 に変換する

人に動画を渡す際は、コーデックを H.264 にしておくのが現状では無難。

ffmpeg -i input.mp4 -c:v libx264 output.mp4

ただ、どこまで確実なのかは把握していないが、コーデック指定を省いて

ffmpeg -i input.mp4 output.mp4

としても望む結果は得られると思う。

RAW データをエンコードする

RAW データの場合は、最低限画像サイズとピクセルフォーマットを指定する必要がある。

ffmpeg -f rawvideo -s 1920x1080 -pix_fmt yuv420p -r 30 -i input.yuv output.mp4

input.yuv は、エンコードしたい全てのフレームデータを1つのファイル内で並べたものである。この例のように yuv 拡張子を使えば、-f rawvideo は省略できる。

H.264 動画の品質コントロール

オプションのところでも述べたが、H.264 の品質コントロールには -qmin, -qmax を用いる必要がある。例えば、

ffmpeg -i input.mp4 -qmax 16 -c:v libx264 output.mp4

として q の最大値を 16 あたりで抑えると、かなり高品質な動画になる。望む品質を得るには、数字を変更しつつ必要に応じて -qmin も指定すればよい。

4K 10-bit の動画を 2K 8-bit YUV420 に変換する

4K 動画や 10-bit 動画は扱いにくいので、2K 8-bit の YUV420 動画に変換したいときがある。

ffmpeg -i input.mp4 -s 1920x1080 -pix_fmt yuv420p output.mp4

YUV444 動画を用意する

あまり見かけないフォーマット(例えば YUV444)の動画が必要な時があるが、変換すれば簡単に手に入る。

ffmpeg -i input.mp4 -pix_fmt yuv444p output.mp4

動画を連番 JPEG に変換する

printf の要領で JPEG ファイル名のパターンを出力に指定すれば、連番 JPEG への変換が行われる。

ffmpeg -r 1 -i input.mp4 'out/img%05d.jpg'

ファイルパスは特殊文字や空白を含むことがあるので、念の為に ' で囲っている。一般的に動画のフレームレートは一定ではないが、ffmpeg の連番 JPEG 出力機能は定フレームレートで JPEG を作ってしまう。そのままだと、タイムスタンプがズレて飛ばされるフレームや重複するフレームが出てしまうので、入力側に -r 1 を設定して防止している。強制的に入力を定フレームレートにしたいだけなので、-r 11 の部分は何でもよい。

なお、別のやり方としては以下でもよい。

ffmpeg -i input.mp4 -vsync passthrough 'out/img%05d.jpg'

これは、出力側と入力側で同じタイムスタンプを使うことを強制している。つまり、「勝手に定フレームレートにせずに、入力通りのタイミングで JPEG にせよ」という指示である。

連番 JPEG を動画に変換する

これは先ほどの逆操作で、簡単である。

ffmpeg -r 30 -i 'in/img%05d.jpg' output.mp4

フレームレートを指定しないと 25 FPS になる。つまり、30 FPS 動画を作ろうとして

ffmpeg -i 'in/img%05d.jpg' -r 30 output.mp4

としてしまうと、25 FPS の動画を 30 FPS に変換したものができてしまうので注意。

簡易スローモーション動画の作成

例えば入力動画が 30 FPS だとすると、

ffmpeg -r 7.5 -i input.mp4 output.mp4

とするだけで、4倍のスローモーション動画を作ることができる。

簡易タイムラプス動画の作成

基本的にはスローモーションの逆である。30 FPS 動画を4倍速にするには、以下のようにすればよい。

ffmpeg -r 120 -i input.mp4 -r 30 output.mp4

120 FPS 動画を表示させるのは現実的ではないので、出力側に常識的なフレームレートを指定して間引きを行っている。

複数の動画ファイルを結合する

複数の動画ファイルを結合するには、まず結合する順番にファイルパスを並べたテキストファイルを用意する。

# 動画のパスをつなげる順に列挙する
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'

このように、file の後にパスを記述する。なお、# はコメントであり、念のためにパスを ' で囲っている。フォーマットを concat とし、このテキストファイルを入力として設定すれば、結合された結果が得られる。

ffmpeg -f concat -safe 0 -i input.txt output.mp4

オプション -safe 0 は必須ではないが、これがないと書き方によっては「安全ではないパス」として弾かれてしまい面倒なので、付けている。入力動画のコーデックが同一なら、

ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4

のように書いて再エンコードを避けることもできる。

一定間隔おきに動画の内容を静止画にして保存する

長い動画の内容をひと目で把握するために、例えば10秒おきにフレームを取り出したい場合がある。出力のフレームレート指定を利用して連番 JPEG に変換すれば、簡単に実現できる。

ffmpeg -i input.mp4 -r 1/10 'out/img%05d.jpg'

動画から音声だけを削除する

動画データには手を加えずに、音声データだけファイルから削除する。

ffmpeg -i input.mp4 -c:v copy -an output.mp4

mp4tags options

mp4tags: You must specify at least one MP4 file.
usage mp4tags OPTION... FILE...
Adds or modifies iTunes-compatible tags on MP4 files.

      -help            Display this help text and exit
      -version         Display version information and exit
  -A, -album       STR  Set the album title
  -a, -artist      STR  Set the artist information
  -b, -tempo       NUM  Set the tempo (beats per minute)
  -c, -comment     STR  Set a general comment
  -C, -copyright   STR  Set the copyright information
  -d, -disk        NUM  Set the disk number
  -D, -disks       NUM  Set the number of disks
  -e, -encodedby   STR  Set the name of the person or company who encoded the file
  -E, -tool        STR  Set the software used for encoding
  -g, -genre       STR  Set the genre name
  -G, -grouping    STR  Set the grouping name
  -H, -hdvideo     NUM  Set the HD flag (1\0)
  -i, -type        STR  Set the Media Type(tvshow, movie, music, ...)
  -I, -contentid   NUM  Set the content ID
  -j, -genreid     NUM  Set the genre ID
  -l, -longdesc    STR  Set the long description
  -L, -lyrics      NUM  Set the lyrics
  -m, -description STR  Set the short description
  -M, -episode     NUM  Set the episode number
  -n, -season      NUM  Set the season number
  -N, -network     STR  Set the TV network
  -o, -episodeid   STR  Set the TV episode ID
  -O, -category    STR  Set the category
  -p, -playlistid  NUM  Set the playlist ID
  -P, -picture     PTH  Set the picture as a .png
  -B, -podcast     NUM  Set the podcast flag.
  -R, -albumartist STR  Set the album artist
  -s, -song        STR  Set the song title
  -S  -show        STR  Set the TV show
  -t, -track       NUM  Set the track number
  -T, -tracks      NUM  Set the number of tracks
  -x, -xid         STR  Set the globally-unique xid (vendor:scheme:id)
  -X, -rating      STR  Set the Rating(none, clean, explicit)
  -w, -writer      STR  Set the composer information
  -y, -year        NUM  Set the release date
  -z, -artistid    NUM  Set the artist ID
  -Z, -composerid  NUM  Set the composer ID
  -r, -remove      STR  Remove tags by code (e.g. "-r cs"
                        removes the comment and song tags)

qemu

qemu on Ubuntu 20.04

  1.  Install
    sudo apt -y update
    sudo apt -y install kvm
    sudo apt -y install kvm-ipxe
    sudo apt -y install qemu-common
    sudo apt -y install qemu-kvm 
    sudo apt -y install qemu-keymaps
    sudo apt -y install qemu-kvm-extras
    sudo apt -y install qemu-system
    sudo apt -y install qemu-user
    sudo apt -y install qemu-utils 
    sudo apt -y install qemu-launcher
    sudo apt -y install qemulator
    sudo apt -y install qemuctl
    sudo apt -y install qtemu 
    sudo apt -y install qemu-kvm-spice
    
  2. Setup kernel modules.

    load each kernel modules.

    sudo modprobe kvm_intel
    sudo modprobe kvm
    lsmod | grep kvm
    kvm-ok
    

    うまく組み込めるようだったら、自動で組み込むように設定することにする。 /etc/modules を編集し、

    kvm_intel
    kvm
    

    の2行を追加する

  3. Ubuntu でSPICE クライアントのインストール
    sudo apt -y update
    sudo apt -y install spice-client
    
  4. Ubuntu で仮想マシン管理ソフトウエア libvirt と ubuntu-vm-builder のインストール
    sudo apt -y update
    sudo apt -y install libvirt0
    sudo apt -y install libvirt-bin
    sudo apt -y install libvirt-dev
    sudo apt -y install libvirt-doc
    sudo apt -y install python-libvirt
    sudo apt -y install libvirt-ruby 
    sudo apt -y install virt-manager 
    sudo apt -y install virt-viewer
    sudo apt -y install virt-goodies
    sudo apt -y install virt-top
    sudo apt -y install ubuntu-vm-builder
    sudo apt -y install cpu-checker
    sudo apt -y install bridge-utils
    

    以上の操作で,vmware2libvirt, virt-viewer, virsh, virt-install などのコマンドが使えるようになります また /etc/libvirt 下にいくつかの設定ファイルができる

  5. ユーザの所属グループの調整
    sudo usermod $(whoami) -a -G libvirtd
    cat /etc/group | grep libvirtd
    

QEMU を使ってみる

【ここでの設定内容】

設定項目 データ型 本 Web ページでの設定値
仮想マシン・イメージファイルのファイル名 文字列 /home/os001.qcow2
仮想マシン・イメージファイルのフォーマット 文字列 qcow2
仮想マシン・イメージファイルの最大サイズ 数値 80 (GB)
ゲスト OS の種類 文字列 precise (Ubuntu 12.04)
仮想マシンに割り当てるメインメモリのサイズ 数値 2048 (MB)
仮想マシンの起動に使う ISO イメージファイル名 文字列 /home/ubuntu-12.04-desktop-amd64.iso
cd /tmp
qemu-img create -f qcow2 /home/os001.qcow2 80G .
sudo modprobe kvm_intel 
# 32 ビット の Ubuntu 12.04 の場合
qemu-system-i386 -hda /home/os001.qcow2 -m 2048 -cdrom /home/ubuntu-12.04-desktop-i386.iso -boot d --enable-kvm -usb -serial none -parallel none
# 64 ビット の Ubuntu 12.04 の場合
qemu-system-x86_64 -hda /home/os001.qcow2 -m 2048 -cdrom /home/ubuntu-12.04-desktop-amd64.iso -boot d --enable-kvm -usb -serial none -parallel none

qemu-launcher の起動コマンド

 

qemu-launcher

マシン名、割り当てるメモリ量、仮想ハードディスク、仮想 CD-ROM の設定ができる。

Redmine Install

Step 1: インストールするサーバーにLoginしアップデートを行う

SSH to your server:

$ ssh user@sshdserver

Begin to update it for latest packages to be updated in the server.

$ sudo -i
# apt update
# apt full_upgrade
# reboot

Step 2: MySQL 8.0 をインストール

# apt install mysql-server-8.0

Step 3: インストール Apache, Ruby and Passenger

# apt install apache2 libapache2-mod-passenger

Step 4: インストール Redmine と必要なパッケージ

Redmine の依存関係は全く完結しない! そういう意味ではバグパッケージかも。

# apt install redmine redmine-mysql fonts-takao-gothic pkg-config make libffi-dev libmysqlclient-dev \ 
libreadline-dev libedit-dev rmagic imagemagick libmagickcore-dev libmagickwand-dev

yes を選択します。

install redmine ubuntu 01

dbのパスワードを入力:

install redmine ubuntu 02

パスワード確認:

install redmine ubuntu 03

Step 5: gem update

時間がかかる上にエラーが出ても停止しないので注意が必要

# gem update

エラーが発生したら足りないパッケージをインスト−ルして再度、実行し、エラーがなくなるまで繰り返す。エラーがなくなったらrm -r /var/lib/gems でgemを完全に消したのち gem update を実行。これでエラーがなくなれば完了!

# apt install xxxxxx <- check packages.
## No error found.
# rm -r /var/lib/gems
# gem update

Apache Passenger module file, /etc/apache2/mods-available/passenger.conf を下記の通り修正。

<IfModule mod_passenger.c>
  PassengerDefaultUser www-data
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>
EOF

シンボリックリンクを作成:

ln -s /usr/share/redmine/public /var/www/html/redmine

Access Redmine web console Domain name

Redmine サイトの設定 ServerAdmin ServerNameは 適時変更する。

# vim /etc/apache2/sites-available/redmine.conf

Add configuration data – replace projects.computingforgeeks.com with your domain name.

<VirtualHost *:80>
  ServerAdmin admin@example.com
  DocumentRoot /var/www/html/redmine
  ServerName projects.example.com
  ServerAlias www.projects.example.com
  <Directory /var/www/html/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Redmine ウェブサイトを有効にしてApache2を再起動すれば完成!!

sudo a2ensite redmine.conf
sudo systemctl restart apache2.service

You should now be able to access redmine with your domain: http://projects.example.com

install redmine ubuntu 04

Default Login credentials are:

Username: admin
Password: admin
install redmine ubuntu 05

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

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


 

Policy Routing

Access from '3.145.85.123'
You are in US.
It is 19:50 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”.

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/

 

Ubuntu で DS-Lite ルーター

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