Tunnel Broker でクライアント PC から IPv6 接続する
先日、Tunnel Broker で VM に IPv6 over IPv4 のトンネルを設定した。
今回は、この VM をルーターとして、LAN 内の他の 仮想マシン(Pop!_OS) から IPv6 でインターネットに接続してみる。
構成
単純に「クライアント>ルーター>インターネット」でお試し接続。
ルーターの WAN 側インターフェースは先日の設定どおりサブネット 2001:db8:11:11::/64 に属している。
LAN 側インターフェースは Tunnel Broker の画面の Routed IPv6 Prefixes の Routed /64 から設定する。今回のサブネットは分離なしの1個だけだから 2001:db8:22:22::1/64 だけど、LAN 側を複数のサブネットで分離する場合は Routed /48 からサブネットを切り分けることとなる。仮想マシンのアドレスはルーターから割り当てられるように後ほど設定する。
ファイアウォールの設定
VM(Pop!_OS) は IPv4 のように NAPT の内側じゃなく、グローバルユニキャストアドレスでつながることになる。もちろん、VM(Router) も同様。なので、最初にファイアウォールを設定する。
Proxmox VE の仮想マシンだから、PVE の管理画面から個別 VM/CT 毎にファイアウォールを設定することも可能。だけど今回は一般的な方法として ufw を使用する。
ufw のインストールや使い方はググれば沢山出てくるから省略。IPv6 に関して触れたところをメモしておく。
sysctl.conf
/etc/ufw/sysctl.conf を編集して forwarding=1 とする。
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1
書き換えたら sudo sysctl -p /etc/ufw/sysctl.conf を実行しておく。
routed
デフォルトの routed を allow にする。
sudo ufw default allow routed
http、https 接続を有効化する。ついでに IPv4 と IPv6 の両方が ALLOW になるから、あとで IPv4 の設定だけ delete しておく。
sudo ufw allow http
sudo ufw allow https
ssh 接続を IPv4 の LAN 内だけに制限する。もともと ssh は外部開放していないけど念の為。
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
sudo ufw allow proto tcp from 10.254.254.0/24 to any port 22
とりあえず ufw status は次のとおり。Windows 仮想マシン用に念の為 port 135,137〜139,445 も外部に出ないよう拒否しておく。
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN 192.168.1.0/24
22/tcp ALLOW IN 10.254.254.0/24
443 (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
135,137,138,139,445/tcp DENY OUT Anywhere on he-ipv6
135,137,138,139,445/udp DENY OUT Anywhere on he-ipv6
135,137,138,139,445/tcp (v6) DENY OUT Anywhere (v6) on he-ipv6
135,137,138,139,445/udp (v6) DENY OUT Anywhere (v6) on he-ipv6
ルーターのインターフェース設定と RA/SLAAC
LAN に接続するインターフェースの設定
仮想マシン(Pop!_OS)その他を含む、vlan100(Prefixes 2001:db8:22:22::/64)を設定する。とはいってもルーターに vlan 用のアドレスを付与するだけ。今はこんな感じになってる。
$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp6s18
iface enp6s18 inet static #Tunnel の Client側
address 10.254.254.3/24
gateway 10.254.254.1 #YAMAHA ルーターのデフォルトゲートウェイ
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.1.1
dns-search jisaba.life
auto he-ipv6
iface he-ipv6 inet6 v4tunnel #Tunnel の設定
address 2001:db8:11:11::2
netmask 64
endpoint 74.82.xx.xx
local 10.254.254.3
ttl 255
gateway 2001:db8:11:11::1
auto enp6s19
iface enp6s19 inet6 static #Prefixes /64 からアドレスを割り当てる
address 2001:db8:22:22::1
netmask 64
仮想マシンは、Proxmox VE の管理画面でノードに VLAN や Linux Bridge を設定して、それから仮想マシンにネットデバイスを追加すればOK。
RA/SLAAC の設定
クライアントの PC はルーターからプレフィックスを受け取って(RA)、自らのMACアドレスなどから生成した 64 ビットのインターフェース識別子とプレフィックスを組み合わせて 128 ビットの IPv6 アドレスを生成する仕組み。今回はこれを適用してみる。併せて Google の公開 DNS を通知する。
詳細は IPv6 基礎解説などを参照してください。
radvd のインストール
sudo apt -y install radvd
radvd の設定
アドレスはステートレスでクライアント側で自動設定するので m フラグは off、DNS 情報も併せて通知するから O フラグも off。両方ともデフォルトで off なので記述しなくても良い。
cat /etc/radvd.conf
interface enp6s19
{
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvManagedFlag off; #ステートレスであることを明示
AdvOtherConfigFlag off; #DHCPv6を使用しないことを明示
prefix 2001:470:24:54::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844
{
AdvRDNSSLifetime 300;
};
};
最初は、DNS 情報は RA/SLAAC で通知できないと思っていたから DHCPv6 をインストールしてみたけれど、クライアント PC では取得できなかった。
改めて Chat GPT に質問したところ、RA/SLAAC で DNS を通知できることが判ったから設定を変更した。
クライアント PC のアドレスや DNS の情報は、ネットワークの設定の詳細で表示できる。ただ、クライアントの PC は接続のたびにアドレスが変わってしまうから、Web Server などは指定されるプレフィックス内でアドレスを固定(手動設定)する。
クライアントからの接続確認
仮想マシン(Pop!_OS)からGoogle Chrome で SoftBank の IPv6 接続確認ページを表示したスクリーンショットが下の画像。
無事に IPv6 で接続できた。が、まだまだ IPv6 では「このサイトにアクセスできません」が多い。
https://fast.com/ja/ でダウンロード速度を計測してみたら数 Mbps しかでなかった。初期の ADSL 並かな?