カテゴリー
FreeBSD PC

IIJmioのFiberAccess/NFとIPv4固定プロバイダを併用する

ネットワーク環境を更新したのでメモ書きします。

    • フレッツ光で、IIJmioのFiberAccess/NFと、別のプロバイダ(IPv4固定)を併用する設定を行います。
    • IIJmioのDS-Liteを使用する設定を行います。
    • IPv4のデフォルトゲートウェイをDS-Liteに向けて、かつ固定IPアドレスに対する接続の応答を正常に扱えるようにします。
    • FreeBSDによる設定を扱います。
    • ひかり電話無しでの設定に特化しています。
    • mioひかりでも同じ設定が使えます。

概要

2002年からBフレッツを使っていて、今までは以下のような環境で接続していました。

  • 某プロバイダのIPv4固定アドレスサービスにPPPoEを使って接続
  • IPv6を通すために、mpdを使ってOCN IPv6に接続
  • ある1台のホストにNICを2枚刺し、それぞれVSDLモデムとLANに接続。ゲートウェイとして設定。IPv4ではNATを使用。

しかし、最近ではフレッツ光でIPv6接続が行えるようになったので、環境の更新を行いました。

  • VDSLモデムからのLANケーブルをハブにつなぐ。
  • NICを2枚刺すホストをやめる。全てのホストをフラットにハブに接続。
  • IPv6はフレッツ光のIPoE接続を利用する。
  • IPv4はIPv6とDS-Liteを使ってトンネル接続する。
  • 固定IPv4にも同時に接続(フレッツ光のPPPoE)し、対外サービスを継続する。

FiberAccess/NFの設定

まず、IPv6接続環境として、IIJmioのFiberAccess/NFを契約しました。

これは、フレッツ光でIPv6に直接接続するサービスです。IPoE接続なので、PPP等の設定は必要なく、ONUやVDSLモデムから直接IPv6のRAパケットが降ってきます。ONUやVSDLモデムから来るLANケーブルをハブに繋ぐことで、複数台によるインターネット接続が簡単に行えます。今までルータとして使っていたホストも、LAN側のNICだけ接続すればよいです。(OCN-IPv6や、RA送信の設定は削除しましょう)

(2019/3/25追記: mioひかりでも、IPoEオプションを使うことで同じ環境になります)

ここまでの設定は自明なので省略します。DNS設定等はともかくとして、接続すればIPv6のパケットは通るようになるはずです。

なお、ひかり電話無しの場合は/64のアドレスが降ってくるのですが、ひかり電話有りの場合は/48らしいので、工夫が必要になると思います。

DS-Liteの設定

さて、このままではIPv4でのインターネット接続が出来ないので、DS-Liteの設定を行います。
DS-Liteとは、IPv6パケットでIPv4パケットをトンネルする技術で、RFC6333で定義されています。IIJmioでは、DS-Liteのためにトンネル先のホストが設置されています。
なお、DS-Liteでは、外部に向けてサービスを公開することが出来ません。DS-Liteを使ってるユーザー全体で巨大なNATを使っているようなものと考えて下さい。また、2chはIIJmioのDS-Liteからの接続を拒否します(閲覧も出来ません)。

以下の手順でIPv4パケットが外部に通るようになります。

  1. LAN上にあるホストAで、トンネル先に向けてトンネルを掘る。
  2. ホストAで、ゲートウェイ機能を有効にする。
  3. ホストAのIPv4デフォルトルートを、掘ったトンネルのインターフェースにする。
  4. 他のホストのIPv4デフォルトルートを、ホストAにする。

まず手動でテストします。

# ifconfig gif0 create
# ifconfig gif0 inet6 tunnel <ホストAのIPv6アドレス> 2404:8e00::feed:100 prefixlen 128
# ifconfig gif0 up

# sysctl net.inet.ip.forwarding=1

# route add default -interface gif0

ここまで実行したら、ホストAから外部にping(IPv4)を打って、正常に返ってくることを確認して下さい。また、LAN上の他のホストのIPv4デフォルトルートをホストAにして、そのホストから外部にping(IPv4)を打って、正常に返ってくることを確認して下さい。

テストが完了したら、設定をホストAの/etc/rc.confに書き込みます。

ipv6_enable="YES"
ipv6_activate_all_interfaces="YES"
ipv6_ifconfig_bge0="<ホストAの固定的なIPv6アドレス> prefixlen 64"

cloned_interfaces="gif0"
ipv6_ifconfig_gif0="tunnel <ホストAの固定的なIPv6アドレス> 2404:8e00::feed:100 prefixlen 128"

gateway_enable="YES"

defaultrouter="-interface gif0"

以上でDS-Liteの設定は完了です。

固定IPアドレスでのサービスの継続

さて、固定IPv4アドレスは引き続き使いたいので、もう少し設定が必要です。

i-revoでは、月々540円(税込み)で固定IPv4アドレスを割り当ててくれるので、これを契約します。また、PPPoEを使ってi-revoに接続します。

現状の設定では、固定IPアドレスに来たパケットの応答も、デフォルトルート(DS-Lite)を通って出て行ってしまいます。これを解決するには、「IPv4パケットのうち、固定IPアドレスを発信元とし、LANが宛先でないものは、PPPの相手先に送る」という設定が必要です。これは、IPFWを使うことで実現が可能です。

IPFWのルールの適当な番号を見繕って下さい。パケットを通すルール(allow)の前にある必要があります。私の場合、3000番に「allow ip from any to any」があり、IPv4パケットはここにマッチするので、その前の2950番を見繕いました。

/etc/ppp/ppp.linkup に、以下の記述を行って下さい。

<PPPのプロファイル名>:
! ipfw add 2950 forward HISADDR ip from MYADDR to not <LANのIP範囲[ex:192.168.0.0/24]>

/etc/ppp/ppp.linkdown に、以下の記述を行って下さい。

<PPPのプロファイル名>:
! ipfw delete 2950

この設定を行うことで、MYADDR(PPP接続による固定IPアドレス)が発信元で、LAN以外を宛先とするパケットは、HISADDRに送られます。

テストを行います。

  1. /etc/rc.d/ppp restart
  2. 外部(無線LANを無効にしたスマートフォンなど)から、固定IPアドレスに対してpingを打って、正常に返ってくることを確認して下さい。

DNSサーバについて(8/12追記)

この設定では、上流側から来るDHCPv6のパケットも同時に受け入れます。従って、LANの名前解決に独自のDNSサーバを使っていた場合でも、DHCPv6で得られたDNSサーバに接続に行ってしまい。名前解決ができなくなります。
私の場合は、LANのサーバのIPv6アドレス(AAAAレコード)も全てグローバルに名前解決できるようにし、LAN内でのアクセスでも常にFQDNでアクセスすることで解決しました。

参考文献

http://yves2005.pixnet.net/blog/post/54003736-freebsd-ipv6-ds-lite–setup-(ipv4-in-ipv6-tunnel-mode)
http://www.himajin2001.com/fswiki/wiki.cgi?page=%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC-FreeBSD%A4%C72%A4%C4%A4%CENIC%A4%C7%A5%B5%A1%BC%A5%D0%A4%F2%CE%A9%A4%C1%BE%E5%A4%B2%A4%EB

Share this...