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 で接続できた。が、まだまだ IPv6 では「このサイトにアクセスできません」が多い。

https://fast.com/ja/ でダウンロード速度を計測してみたら数 Mbps しかでなかった。初期の ADSL 並かな?

 

タグ