自宅のインターネット環境はauひかり(ISPはニフティ)で、auから提供されるホームゲートウェイ(BL1500HM)をそのまま使っていました。生活で使うのには十分な環境ですが、ネットワークでセキュリティ懸賞などの実験をやるには不便なので、UTM(Fortigate 40F)を導入して、複数のサブネットを作ることにしました。Fortigate 40FはWANポート1個、LANポート3個を備えているので、最大3つのサブネットが作れます。
UTMなので、設定次第でホームゲートウェイの代わりにもなるのですが、0ABJの電話サービスを契約している関係から、BL1500HMはそのままとして、LAN上にFortigate 40Fを置いてルーティングさせる方針としました。
UTMにIPv4関連の設定を行う
UTMのIPv4関連の設定はそれほど難しくありません。下図のようにUTMのWANインタフェースに192.168.0.11、LAN1インタフェースに192.168.1.1のアドレスをつけて、デフォルトゲートウェイを192.168.0.1に設定する程度でインターネットと通信できるようになります。なお、UTMなのでデフォルトのフィルタリング設定で、LAN1からWANインターフェース方向のIPv4通信のみが許可されていて、その通信もUTMで監視できるようになっていました。
これで、従来からあったLAN0に加えて、LAN1のサブネットが追加でできました。
UTMにIPv6関連の設定を行う
IPv6関連の設定は少し複雑です。auひかりの環境でホームゲートウェイの配下にUTM(ルータ)を配置してIPv6を有効化しているような情報(ブログなど)がほぼ無く、試行錯誤を重ねながらやってみました。
自分が使えるIPv6アドレスを確認する
まずは、どのIPv6アドレスが使えるのかを確認しました。ホームゲートウェイの管理画面では、ホームゲートウェイのLAN側につけられたIPv6アドレスとして「240f:xx:xx:1:xx:xx:xx:xx」の情報がありました。xxで伏せ字にしたところはそれぞれ次の通りでした。
- 第2~第3フィールド:ISPから割り振られたIPv6アドレスの情報
- 第5~第8フィールド:インタフェースのMACアドレスから計算されたEUI-64形式のアドレス
注目する点は第4フィールドが「1」というところです。ホームゲートウェイにつけられたIPv6アドレスは/64だけですが、実際には/48で割り振られているはずなので、この第4フィールドは自由に使えるだろうと想像しました。そこで、UTMのLAN1インタフェースでは、下図のように「240f:xx:xx:2:xx:xx:xx:xx」と、第4フィールドが「2」のIPv6アドレスを使う方針としました。
UTMにIPv6アドレスを設定する
上記の方針でUTMのWANインタフェースとLAN1インタフェースにIPv6アドレスを設定します。
WAN側
管理画面で「IPv6アドレッシングモード」を「マニュアル」にして、「IPv6アドレスの自動設定」をONにします。これで、第4フィールドが「1」、第5~第8フィールドがEUI-64のアドレスがWANインタフェースに付きます。
LAN1側
管理画面で、「IPv6アドレッシングモード」を「マニュアル」にして、「IPv6アドレス/プレフィックス」を「240f:xx:xx:2:xx:xx:xx/64」にします。
LAN1上の端末がIPv6を使えるようにする
続いて、LAN1上の端末にIPv6アドレスやデフォルトゲートウェイ、DNSサーバの情報を配付する設定を行います。
IPv6のDNSサーバを設定する
管理画面の「IPv6 DNS設定」にプライマリ/セカンダリDNSサーバのIPv6アドレスを設定します。IPv6対応のパブリックDNSサーバはいろいろありますが、今回はGoogle Public DNSのIPv6アドレスを使いました。
https://developers.google.com/speed/public-dns/docs/using?hl=ja
SLAACとDHCPv6を設定する
IPv4の場合、端末にIPアドレスなどの情報を配付する際にはDHCPを使いますが、IPv6の場合はSLAAC(ステートレスアドレス自動設定、RFC 4862)とDHCPv6を使います。
IPv6黎明期にはRA(ルータ広告)の機能だけでIPv6アドレスを配っていましたが、それだとDNSの情報等を配れないために、DHCPv6が開発され、普及してきたと理解していました。しかし、ネットの情報を見ると、Android系の端末がDHCPv6を使えない(Googleのポリシーらしい。。)ので、RAを使ってIPv6アドレスを自動設定するSLAACでIPv6アドレスを配り、さらにDHCPv6をステートレスで使ってDNSサーバのIPv6アドレスを配る必要があります。
UTMでは次のように設定します。
- 「ステートレスアドレス自動設定(SLAAC)」を有効化して、IPv6プレフィックスに「240f:xx:xx:2::/64」を追加します。
- 「DHCpv6サーバ」を有効化して、「DNSサービス」は「システムDNSと同じ」を選択します。「ステートフルサーバ」はOFFのままにします。
IPv6のファイアウォールポリシーを追加する
上記の設定までで、LAN1上の端末からインターネットに向けてのIPv6通信ができるはずでしたが、実際にpingやtraceroute で疎通確認してみると、インターネットに出て行けないことが分かりました。確認するとホームゲートウェイのLAN側のIPv6アドレスにもpingが通らないので、UTMのファイアウォールで落とされていると判断しました。
そこで、UTMの「ファイアウォールポリシー」で「LAN→WAN」のポリシーを次のように追加しました。
- 着信インタフェース: lan
- 発信インタフェース: wan
- 送信元: all(ipv6)
- 宛先: all(ipv6)
- スケジュール: always
- サービス: ALL
- アクション: 許可
設定確認
以上でUTMの設定は完了です。実際にLAN1にWindows端末を接続して、設定が問題無くできているか確認してみました。
ipconfig /all
パワーシェルでipconfig /all コマンドを実行してみたところ、IPv6アドレスがイーサネットアダプタに付与されていて、DNSサーバにもIPv6のGoogle Public DNSのアドレスが表示されます。
ブラウザからIPv6確認サイトをアクセス
IPv6の接続性を確認するサイト(test-ipv6.com)にアクセスしてみました。こちらも問題無く、10点満点となりました。
https://test-ipv6.com/
久しぶりにKame Projectのサイトにアクセスしてみましたが、泳いでいる亀が問題無く見られました。
https://www.kame.net/