VyOSでNAT64してIPv6-Mostlyなネットワークをつくる

なぜIPv6-Mostly ネットワークが求められるのか

IPv4アドレスの枯渇からいずれIPv6に移行する必要が出てきます。IPv4とIPv6のデュアルスタック構成では、アドレスの2重管理になることの運用負荷の増大が課題になってしまいます。これらから今後IPv6 onlyのネットワークが必要になると考えられます。
しかし、IPv6のみのネットワークからIPv4ネットワークとの接続性をどのようにするかが課題になってきます。
IPv6-Mostlyネットワークでは、464XLATによってIPv4ネットワークとの接続性を確保しながら、ほぼIPv6なネットワークへの移行を進めることができます。

464XLATとは

464XLATとは、IPv6とIPv4の共存技術の一つです。

IPv4ネットワークにアクセスするときは、クライアント側でIPv4アドレスをIPv6アドレスに変換(CLAT: Client side translator)します。
IPv4ネットワークに出る時は、IPv4アドレスを変換したIPv6アドレスをルーター側でIPv4アドレスに変換(PLAT: Provider side translator)します。ここでNAT64が使われます。
これによってIPv6 onlyネットワークからIPv4ネットワークへの接続性を確保します。

詳細は、インターネット用語1分解説~464XLATとは~ – JPNIC「IPv6時代のIPv4を考える」 ~第二章~ 【464XLAT 事前公開資料】 が分かりやすいです。

VyOSでNAT64を実装する

VyOSのバージョンは2025.11.14-0020-rollingを使用しました。VyOSでNAT64とDNS64を実装しました。なぜDNS64かというと後述でも述べますが、Windows11はCLATに対応していないため、VyOSのDNSサーバで、IPv4アドレスをAAAAレコードに変換する必要があります。

VyOSのインタフェース設定

グローバル側のインタフェースをeth0、IPv6 onlyネットワーク側のインタフェースをeth1とします。
eth0側のネットワークはSLAACでアドレスを設定するのですが、ここではinterface-identifierを設定してIPv6アドレスを固定化しています。

set interfaces ethernet eth0 address '192.168.0.10/24'
set interfaces ethernet eth0 ipv6 address autoconf
set interfaces ethernet eth0 ipv6 address interface-identifier '::0:0:1ab0:1000'

set interfaces ethernet eth1 address '2001:db8:2000::1/64'
set interfaces ethernet eth1 ipv6 address

実験用IPv6ネットワークをNAT66で作る

私の環境ではグローバルIPv6アドレスは/64で配られているため、実験用のIPv6ネットワークのアドレスは、任意で割り当てて、NAT66でグローバルIPv6アドレスに変換することにしました。

set nat66 source rule 10 outbound-interface name 'eth0'
set nat66 source rule 10 source prefix '2001:db8::/32'
set nat66 source rule 10 translation address 'masquerade'

show nat66 source translations コマンドで、NAT66されていることが確認できます。

Router Advertisementの設定

eth1にRouter Advertisementを設定していきます。ここで2行目の設定でnat64 prefixをRAで配布します。IPv4アドレスを変換したIPv6アドレスのWell-known prefixは、64:ff9b::/96となるので、その値で設定します。

set service router-advert interface eth1 prefix 2001:db8:2000::/64
set service router-advert interface eth1 nat64prefix 64:ff9b::/96
set service router-advert interface eth1 name-server '2001:db8:2000::1'

以下のパケットのようにRouter AdvertisementにPref64 Optionが含まれるようになり、クライアント側はIPv4アドレスをIPv6アドレスに変換できるようになります。

NAT64の設定

NAT64の設定では、送信元のIPv4アドレスとなるアドレスとポート範囲、およびIPV4に変換する送信元IPv6アドレスのprefixを指定します。

set nat64 source rule 10 source prefix '64:ff9b::/96'
set nat64 source rule 10 translation pool 10 address '192.168.0.10'
set nat64 source rule 10 translation pool 10 port '1024-65535'

DNS64設定

DNS64の設定は以下のように設定を入れます。

set service dns forwarding allow-from '2001:db8:2000::/64'
set service dns forwarding dns64-prefix '64:ff9b::/96'
set service dns forwarding listen-address '2001:db8:2000::1'

動作確認

Windows11 25H2で、動作を確認しました。IPv4アドレスが設定されていない状態で、IPv6のみとなっています。

ブラウザで、IPv4のサイトに接続しても、IPv6アドレスに変換され、ページを表示できることが確認できます。

2025年12月時点でのWindows11は、CLATに対応していません。従って、以下のように直接IPv4アドレスを指定しても通信できません。

今後対応する予定があるようなので、その時は再度確認してみたいと思います。

iPad OSでも確認してみました。CLATできていることが確認できます。

NEC IXにおいてNintendo Switch 2 にDNS(IPv6)を自動設定させる

Nintendo Switch 2ではIPv6が使えるようになっています。
NEC IXを使っている環境で設定例の設定だと、Switch 2にDNSサーバ設定でIPv6アドレスを自動設定できません。

NECの設定事例だとRAにother-flagを付けたうえでDHCPv6でDNSアドレスを配布しているが、Switch 2はDHCPv6に対応していないようです。

Switch 2はRDNSSに対応しているようなので、NEC IXのLAN側インタフェースに以下のように設定したところSwitch 2にもIPv6のDNS設定ができるようになりました。

interface GigaEthernet2.0
  ipv6 nd ra dns-server 2001:4860:4860::8888 2001:4860:4860::8844

VyOSでフレッツ光のPPPoE接続する

メモ書きなので最小限だけ。いつかちゃんと書き直すかも。

eth0がWAN側、eth1が内部ネットワーク側とする。
以下のコマンドで設定する。

set interfaces ethernet eth0 ipv6 address autoconf
set interfaces ethernet eth1 address '192.168.10.1/24'
set interfaces pppoe pppoe0 authentication password '*******'
set interfaces pppoe pppoe0 authentication username '*******'
set interfaces pppoe pppoe0 mtu '1454'
set interfaces pppoe pppoe0 source-interface 'eth0'
set nat source rule 1 outbound-interface name 'pppoe0'
set nat source rule 1 source address '192.168.10.0/24'
set nat source rule 1 translation address 'masquerade'

確認方法は以下のコマンドで

vyos@vyos:~$ show interfaces pppoe detail
pppoe0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1454 qdisc fq_codel state UNKNOWN group default qlen 3
    link/ppp
    inet ***.***.***.*** peer ***.***.***.***/32 scope global pppoe0
       valid_lft forever preferred_lft forever
    inet6 fe80::****:****:****:****/64 scope link
       valid_lft forever preferred_lft forever

    RX:       bytes  packets  errors  dropped  overrun       mcast
          108013479   311990       0        0        0           0
    TX:       bytes  packets  errors  dropped  carrier  collisions
         1263886849   942265       0        0        0           0

Let’s Encryptの証明書を自動更新する

Let’s EncryptのTLS証明書は2025年9月現在、有効期限が90日です。都度TLS証明書を更新するのは手間なので自動化します。更新はcertbotがやってくれます。

環境はUbuntu Server 24.04 LTSです。
以下で、certbotをインストールしておきます。

sudo apt install certbot

以下にウェブサーバの設定リロードするフックスクリプトを作成して設置します。certbotのフックにはpre、deploy、postの3種類がありますが、ここではdeployで実行します。

初回は以下のコマンドで作成したフックスクリプトを指定して証明書を作成します。

証明書の自動更新はcertbotをインストールされるとsystemd timerが登録されますので、有効にしておきます。

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
sudo systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/usr/lib/systemd/system/certbot.timer; enabled; preset: enabled)
     Active: active (waiting) since Sat 2025-09-06 18:54:01 JST; 5 days ago
    Trigger: Fri 2025-09-12 18:37:03 JST; 3h 53min left
   Triggers: ● certbot.service

Sep 06 18:54:01 ********** systemd[1]: Started certbot.timer - Run certbot twice daily.

ログなどは/var/log/letsencrypt/letsencrypt.logで確認できます。

ZabbixでLinux機のSMARTを監視する

ZabbixでLinux機のストレージのSMARTをZabbixに標準で組み込まれているのモジュールで監視する設定をしてみます。

環境構成

Zabbixサーバ Zabbixバージョン:6.0.7
Linux機 OS:Ubuntu 22.04
Linux機 Zabbix Agent:6.0.8

Zabbix エージェントのインストール

Zabbix Agent2をインストールする

smartmontoolsインストールと実行権限設定

// SMART用のツールをインストール
$ sudo apt install smartmontools
// SMART取得の確認
$ sudo smartctl -a /dev/nvme0

zabbixエージェントがsmartctlコマンドを実行できるように、sudoersでzabbixユーザに実行権限を付与します。(太字の部分を追記)

$ sudo visudo
# User privilege specification
root    ALL=(ALL:ALL) ALL
zabbix  ALL=(ALL:ALL) NOPASSWD:/usr/sbin/smartctl 

Zabbix監視設定

ホスト設定に「Template Module SMART by Zabbix agent2」を追加する。

動作確認

取得できていればOK

ThinkPad T480sでメモリの増設とSSDの交換をしてみた

年始にThinkPad T480sを購入しました。

メモリとSSDは自分で後から増設した方が安上がりなため、PC購入後にSSDの交換とメモリの増設をやってみました。

※メモリの増設やストレージの交換を行うと、メーカーの保証対象外になるため自己責任で行ってください。

 購入時のスペックと増設・交換後のスペックは以下の通りです。

  購入時 増設・交換後
CPU Intel Core i7-8550U
メモリ DDR4-2400 8GB
(オンボードのみ)
DDR4-2400 16GB
(オンボード8GB + 拡張スロット8GB)
SSD SATA SSD 128GB NVMe SSD 512GB
GPU Intel UHD グラフィックス 620
ディスプレイ 14インチ WQHD
OS Windows 10 Pro (1803)

第8世代のIntel CPUではコア数が増加しており、性能は違えど今使っているデスクトップPCと同じ8スレッド数のCPUがノートPCでも使えるというのは感慨深いです。
キーボードもタイプしやすいのはもちろんのこと、USB type-CやHDMIだけでなく、有線LANポートもついているのも高評価です。
WQHD液晶にしたのが案外よく、広いデスクトップがあると作業効率が上がります。

続きを読む

Let’s Encrypt 公開ベータ版を導入してみた

久々の更新です。
更新していない間にこのサイトのサーバーを入れ替えたりIPv6 に対応したりと色々やっていました。

12月3日にLet’s Encrypt が公開ベータとしてだれでも使えるようになりました。
https://letsencrypt.org/2015/12/03/entering-public-beta.html
Let’s Encrypt は米電子フロンティア財団が運営する、ウェブサイトを無料でHTTPS 化するプロジェクトです。
ということでLet’s Encrypt でSSL 証明書を導入してみました。

続きを読む

SECCON 2014 OnlineのWrite up

夏です。CTFの季節がやってきました。
今年のSECCON CTFはオンライン予選が最初でした。
朝9時から21時までの12時間という短い時間で行われました。
私は今回もwasamusumeで参加しました。

私は他の用事があったので、がっつりやれませんでしたが
息抜きに問題を解いたのでWrite upを書いてみます。

続きを読む

pkg(またはPorts)でBINDを使う時に気をつけること

FreeBSD8.4とFreeBSD9.2で最新のBINDをpkgで導入するときに気をつける点があるのでメモ

pkgだとportsに比べてコンパイルしなくてもよいので手軽にインストールできます。

# pkg install bind99
# echo "named_enable=\"yes\"" >> /etc/rc.conf
# /etc/rc.d/named start

これだけだとシステムデフォルトのBINDが動いてしまいます。
pkgでインストールしたBINDにするには以下の設定をする必要があります。

# echo "named_program=\"/usr/local/sbin/named\"" >> /etc/rc.conf

ただし、これだけではエラーが出るので起動しません。
chroot環境の/usr/local/etcにBINDの設定ファイルを置く必要があります。

# mkdir -p /var/named/usr/local/etc
# ln -s /etc/namedb/named.conf /var/named/usr/local/etc/
# ln -s /etc/namedb/rndc.key /var/named/usr/local/etc/

これでpkg(またはports)でインストールしたBINDで起動できます。

/var/log/messageで正しく起動しているかを確認しておきましょう。

$ less /var/log/messages
Jul 12 xx:xx:xx gw named[xx]: starting BIND 9.9.5 -t /var/named -u bind
Jul 12 xx:xx:xx gw named[xx]: built with '--localstatedir=/var' '--disable-linux-caps' ...
Jul 12 xx:xx:xx gw named[xx]: ----------------------------------------------------
Jul 12 xx:xx:xx gw named[xx]: BIND 9 is maintained by Internet Systems Consortium,
Jul 12 xx:xx:xx gw named[xx]: Inc. (ISC), a non-profit 501(c)(3) public-benefit
Jul 12 xx:xx:xx gw named[xx]: corporation.  Support and training for BIND 9 are
Jul 12 xx:xx:xx gw named[xx]: available at https://www.isc.org/support
Jul 12 xx:xx:xx gw named[xx]: ----------------------------------------------------
Jul 12 xx:xx:xx gw named[xx]: command channel listening on 127.0.0.1#953
Jul 12 xx:xx:xx gw named[xx]: command channel listening on ::1#953
Jul 12 xx:xx:xx gw named[xx]: all zones loaded
Jul 12 xx:xx:xx gw named[xx]: running