psx boot system install

Installing Debian using network booting

 

 

Preface

Installation using network booting must not be confused with DebianNetworkInstall. In network install, you start with a CD (or USB flash memory or similar) to install a minimal Linux system before you proceed to download further packages over the network.

Installation using network booting is also different from using the network to boot an already-installed system: in which case, the client machine remains dependent on the server being up and running at every future boot. The Linux Terminal Server Project (LTSP) works like that, for example.

This page describes installing a new Debian system with no CD, DVD, USB at all. By the end of the installation process, the new machine is able to run without the support of the server. During the installation, you will need a network boot server.

As there are no fiducial boot servers out in the wild, you need to set up your own. This is considerably more complicated than installing Debian from CD (shorthand for CD or USB or …). Normally, network booting is only used if there is really no way to boot from CD. If booting from CD fails, this may be due to BIOS problems that will equally prevent network booting (typical troubleshooting attempts include switching off secure booting, switching from UEFI to legacy boot mode, and similar).

In the Web, several articles can be found that describe in more or less detail how to setup a network boot server. They all have the same weakness: you are required to execute a long list of instructions without getting any feedback before the very end of the procedure when you try to boot. If it works, fine. If not, debugging will become very very difficult. Therefore, in the following, we break down the procedure into steps that can be debugged separately.

 

http://www.debian.org/releases/stable/amd64/ch04s05 – Debian Installation Guide – 4.5. Preparing Files for TFTP Net Booting

Note: If your system supports iPXE, then using netboot.xyz is likely to be much simpler.

 

Preconditions

The computer you want to install to will be called the Client.

The computer you install from will be called the Server. We assume that the Server is running Debian.

To be specific, we assume that the Client and the Server are part of a LAN with the following IP addresses:

  • 192.168.0.1 router (i.e. LAN default gateway) and DNS recursive server
  • 192.168.0.2 the Server (will host a DHCP and TFTP server)
  • 192.168.0.x the Client

You will find out the value of x later.

Note that many routers also provide a DHCP server: you will have to turn it off, since only one DHCP server can run in a given LAN. Unless you may configure your router’s DHCP server to comply with the ISC DHCP server configuration below, but this is outside of the scope of this document.

It is also possible that the router and the server are the same machine, i.e. that your Debian server is the default gateway for this LAN. This will work fine.

The following instructions have been tested with Debian 8.2 (Jessie) in September 2015.

 

Activate PXE boot

Setup the BIOS boot menu of the Client to boot from the network.

Reboot. On most systems, this produces an output that contains the Client’s MAC address. Then, it will fail with

  PXE-E53: no boot filename received.

Note the MAC address; it will be helpful for interpreting log messages.

On many servers, it is also possible to temporary switch to PXE boot without permanently changing the BIOS settings. There will be some kind of keystroke to hit during BIOS POST. On Dell servers, F12 will do the trick (or Esc then @ from a serial or IPMI console).

 

Set up DHCP server

On the Server, we need to set up a DHCP server.

Current best practice seems to be to use the package isc-dhcp-server, which provides a daemon dhcpd.

Its configuration file is /etc/dhcp/dhcpd.conf. Modify this file so that it contains about the following; adapt IP and MAC addresses to your local needs:

 

default-lease-time 600;
max-lease-time 7200;

allow booting;

# in this example, we serve DHCP requests from 192.168.0.(3 to 253)
# and we have a router at 192.168.0.1
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.3 192.168.0.253;
  option broadcast-address 192.168.0.255;
  option routers 192.168.0.1;             # our router
  option domain-name-servers 192.168.0.1; # our router has DNS functionality
  next-server 192.168.0.2;                # our Server
  filename "pxelinux.0"; # setting a default, might be wrong for "non defaults"
}

group {
  next-server 192.168.0.2;                # our Server
  host tftpclient {
    # attempt to provide better match for architecture and bootfile
    if option architecture-type = 00:07 {
      filename "debian-installer/amd64/bootnetx64.efi";
    } else {
      filename "pxelinux.0";
    }
  }
}

After each modification of the above, restart the DHCP server with

  # /etc/init.d/isc-dhcp-server restart

or with the systemd equivalent

  # systemctl restart isc-dhcp-server

Check that it is actually running:

  # pgrep -lf dhcpd
  32277 /usr/sbin/dhcpd -q

or

  # systemctl status isc-dhcp-server

which gives slightly more information.

Before rebooting the client, you may like to run

  # journalctl -fu isc-dhcp-server

which shows you the last few lines of the DHCP server log, then updates the screen with each new log entry. (If you do not want to “follow” the log, just leave out the “f”)

Reboot the Client. On success, it will output the IP addresses of the Server (“DHCP”), of the router (“Gateway”) and of itself (192.168.0.x). Then it will hang with a TFTP request, and finally write the error message:

  PXE-E32: TFTP open timeout

and at the same time, you will see log messages on the server screen showing the DHCP requests and offers similar to the output below the alternative command below

If you prefer not to use systemd, or wish to compare the traditional log output for diagnostic purposes, you can look up /var/log/syslog, for example with this command

  # grep DHCP /var/log/syslog
  • where you should see something like:

 

Jun  3 09:53:46 server dhcpd: DHCPDISCOVER from 40:01:1c:47:44:1e via eth0
Jun  3 09:53:47 server dhcpd: DHCPOFFER on 192.168.0.3 to 40:01:1c:47:44:1e via eth0
Jun  3 09:53:51 server dhcpd: DHCPREQUEST for 192.168.0.3 (192.168.0.2) from 40:01:1c:47:44:1e via eth0
Jun  3 09:53:51 server dhcpd: DHCPACK on 192.168.0.3 to 40:01:1c:47:44:1e via eth0

(Note that earlier Debian releases used /var/log/daemon.log instead of syslog)

If nothing appears in the log with either command, check the network links between the Server and the Client. Note that some network switches may impose severe limitations on DHCP traffic; for Cisco ones, use ‘portfast’ if possible (see http://www.cisco.com/en/US/products/hw/switches/ps708/products_tech_note09186a00800b1500.shtml).

 

Set up TFTP server

Next, we need to set up a TFTP server on the Server.

Again, there are several packages that provide TFTP (trivial FTP, unsafe, to be used in LAN’s only). It seems best practice to use the package tftpd-hpa. On installation, a few questions are asked. The response to these questions goes into a configuration file, /etc/default/tftpd-hpa. There should be no need to modify the following default contents:

 

  TFTP_USERNAME="tftp"
  TFTP_DIRECTORY="/srv/tftp"
  TFTP_ADDRESS="0.0.0.0:69"
  TFTP_OPTIONS="--secure"

Ignore older Web sites that instruct you to insert something like ‘RUN_DAEMON=”yes”‘.

After each modification of the above configuration file, restart the TFTP server with

  # /etc/init.d/tftpd-hpa restart

or

  # systemctl restart tftpd-hpa

On Jessie, the directory /srv/tftp will be automatically created. This means the next two steps are not necessary if you use Jessie.

Initially, on pre-Jessie versions, restarting the TFTP server might fail with a message like

  Restarting HPA's tftpd: in.tftpd/srv/tftp missing, aborting.

Therefore, as root, create the directory /srv/tftp. Restart the TFTP daemon. Check that it is actually running:

  # pgrep -lf tftpd
  12555 /usr/sbin/in.tftpd

or

  # systemctl status tftpd-hpa

which again gives a few lines of the log rather than just the fact that the task is (isn’t) running.

It is useful to test your TFTP server with a TFTP client; you may simply use the tftp-hpa package for this purpose:

  # cd /tmp
  # uname -a >/srv/tftp/test
  # tftp 192.168.0.2
  tftp> get test
  tftp> quit
  # diff test /srv/tftp/test
  (nothing, they are identical)

It is also useful to see what log entries you get when you download a file that exists, and when you try to download one that doesn’t. While using tftp to test your tftpd server, try tracking your experiments with old and new forms of the log command while you are using your TFTP client to download files that do, as well as files that do not, exist.

The traditional command on Jessie

  # tail -f /var/log/syslog

(Note again that earlier Debian releases used /var/log/daemon.log instead of syslog.)

On systemd

  # journalctl -fu tftpd-hpa

Sadly, these seem to give different results, as of January 2017. The systemd command does not display file requests for files that do not exist.

It is quite useful to know what the client is asking for, as it helps you move files to the expected location if you make mistakes later on. At present then it is probably worth using the traditional way of log tracking for TFTPD.

Reboot the Client. You should see error messages on the client screen starting with

  PXE-T01: File not found

which is quite correct since we did not yet provide any files. On the server screen, you will see exactly what the client did ask for.

 

Provide the boot image

Download netboot/netboot.tar.gz from a Debian mirror (see http://www.debian.org/distrib/netinst#netboot).

To add firmware into your initrd.gz see : https://wiki.debian.org/DebianInstaller/NetbootFirmware

Optional: To verify the digital signature, type these commands:

# export YOURMIRROR=deb.debian.org # A CDN backed by cloudflare and fastly currently
# export ARCH=amd64
# export DIST=stable
# wget http://"$YOURMIRROR"/debian/dists/$DIST/main/installer-"$ARCH"/current/images/netboot/netboot.tar.gz
# wget http://"$YOURMIRROR"/debian/dists/$DIST/main/installer-"$ARCH"/current/images/SHA256SUMS
# wget http://"$YOURMIRROR"/debian/dists/$DIST/Release
# wget http://"$YOURMIRROR"/debian/dists/$DIST/Release.gpg

# sha256sum -c <(awk '/netboot\/netboot.tar.gz/{print $1 " netboot.tar.gz"}' SHA256SUMS)
# # Must print: netboot.tar.gz: OK


# sha256sum -c <(awk '/[a-f0-9]{64}[[:space:]].*main\/installer-'$ARCH'\/current\/images\/SHA256SUMS/{print $1 " SHA256SUMS"}' Release)

# # Must print `SHA256SUMS: OK`

# gpg --verify Release.gpg Release
gpg: WARNING: multiple signatures detected.  Only the first will be checked.
gpg: Signature made Sat 15 Jun 2013 05:55:56 AM CDT using RSA key ID 473041FA
gpg: Good signature from "Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>"

Unpack netboot.tar.gz to /srv/tftp, which should now contain

  debian-installer/
  pxelinux.0@
  pxelinux.cfg@
  version.info

It may be necessary to chmod -R a+r * to make all files in this directory readable for the TFTP daemon.

If you are booting with UEFI, you should link grub and grubx64.efi into the root of your tftp directory:

# cd /srv/tftp
# ln -s debian-installer/amd64/grubx64.efi .
# ln -s debian-installer/amd64/grub .

You may also have to edit grub/grub.cfg in order to set your serial console, if needed (I replaced the section about the graphical terminal):

serial --speed=115200 --unit=1 --word=8 --parity=no --stop=1
terminal_input console serial
terminal_output console serial

as well as the serial console for debian-installer by appending this to the kernel command line:

console=ttyS1,115200n8r console=tty1

Restart the TFTP daemon, and again you may like to follow the log entries as they appear

  # tail -f /var/log/syslog

HISTORICAL NOTE: /var/log/syslog is right for Jessie — in earlier Debian versions, if this does not seem to work, also try /var/log/daemon.log

then reboot the Client. You should get to a Debian install screen.

If you lookup into /var/log/syslog, you will see what has been downloaded from the TFTP server by the PXE bootloader, and then by SYSLINUX. You might also see some “NAK” replies when SYSLINUX asked for files that do not exist (it tries several locations for some important files).

Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.0 to 192.168.0.3:2070
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.0 to 192.168.0.3:2071
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.cfg/44454c4c-5600-1048-8051-c7c04f575831 to 192.168.0.3:57089
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.cfg/40-01-b1-1c-47-44-1e to 192.168.0.3:57090
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.cfg/default to 192.168.0.3:57090
Jun  3 09:53:51 server tftpd.in[32698]: Serving bootmenu.txt to 192.168.0.3:57095

The PXE loader (the firmware in the BIOS or the network controller of the client) tries to load in this order:

  • pxelinux.0 (or more exactly, what you told it to download in the ‘filename’ field of the DHCP response)

Then SYSLINUX/PXELINUX will try to search its configuration at different paths, from the most specific to the least:

  • pxelinux.cfg/GUID
  • pxelinux.cfg/MAC
  • pxelinux.cfg/default

And if the configuration menu depends on other configuration items, they are also downloaded. Debian will at least need the ‘bootmenu.txt’ file which is the main menu.

By default, you arrive at the graphical Debian install start menu screen. Press ‘enter’ to start installation. Be patient: it may take over a minute before the next screen (‘Select a language’) appears.

 

Alternative way to obtain the boot image

If you have a Debian system of the same release as you wish to install, you can install the boot image using apt.

 

VERSION=8 # jessie, 7.0 for wheezy
ARCH=amd64 # or any other release architecture
apt-get install debian-installer-$VERSION-netboot-$ARCH

Now point the tftp server to /usr/lib/debian-installer/images/$VERSION/$ARCH/$INTERFACE where INTERFACE=text for the text mode installer or INTERFACE=gtk for the graphical installer. A simple way to achieve this is to turn /srv/tftp into a symbolic link.

 

Simple way – using Dnsmasq

dnsmasq is a lightweight, easy to configure DNS forwarder and DHCP server with BOOTP/TFTP/PXE functionality. That is, you can replace isc-dhcp-server and tftpd-hpa with Dnsmasq.

Following is the /etc/dnsmasq.conf providing the same functionality as the method of installing and configuration of isc-dhcpd-server and tftpd-hpa described above.

 

interface=eth1
domain=yourdomain.com
dhcp-range=192.168.0.3,192.168.0.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.0.2
enable-tftp
tftp-root=/srv/tftp
pxe-service=x86PC, "PXELINUX (BIOS)", "pxelinux.0"
pxe-service=X86-64_EFI,"PXE (UEFI)","grubx64.efi"

# other UEFI type identifier, see RFC4578 section-2.1

pxe-service=2, "PXELINUX (0002-EFI)", "grubx64.efi"
pxe-service=6, "PXELINUX (0006-EFI)", "grubx64.efi"
pxe-service=7, "PXELINUX (0007-EFI)", "grubx64.efi"
pxe-service=8, "PXELINUX (0008-EFI)", "grubx64.efi"
pxe-service=9, "PXELINUX (0009-EFI)", "grubx64.efi"

Download the netboot.tar.gz and extract it in the /srv/tftp as previous description or for Bookworm :

 

cd /srv/
mkdir tftp
cd /srv/tftp
wget http://ftp.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar -xzvf netboot.tar.gz
rm netboot.tar.gz
ln -s debian-installer/amd64/grubx64.efi .
ln -s debian-installer/amd64/grub .

To add firmware into your initrd.gz see : NetbootFirmware

Restart dnsmasq :

 

systemctl restart dnsmasq

 

Potential Issues

If the kernel in the netboot image gets out of sync with the kernel module packages, then the modules won’t load and the install will fail, the usual symptoms are that messages about “missing symbols” appear in the ctrl-alt-f4 console.

To fix this, update the kernel and initrd on the netboot server.

There is probably a Debian BTS issue open for this, but I can’t find it now.

PPPoE IPv6 ルーター

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

Network layer

Access from '18.97.14.86'
You are in US.
It is 19:54 JST now.

OSIモデル

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

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

OSI Model

OSIモデルの第3層

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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