eo 光ネットの IPv6 接続を専用ルータ無しに利用する

eo 光ネットの「IPv6インターネット接続の標準提供開始のお知らせ」の通り、2018/08/30 より、PPPoE による IPv6 接続サービスが実施されています。

専用ルーターが必要との表記はありますが、市販されていた手持ちの YAMAHA RTX810 で IPv6 接続できたので、設定方法を備忘録代わりに記載します。

なお、当然ながら、非公式であり、完全に自己責任での内容となりますので、ご注意下さい。また、ルーターのログを見ている限り、プロバイダ側での着信方向フィルタリングは存在しないようですので、ルーター側の設定を間違えると、うっかり自 LAN 内の端末がグローバルからアクセス可能となることもあり得ます。十分注意が必要です。

前提としては、eo 光ネットに IPv4 での PPPoE 接続設定が LAN2 を利用して PP 1 として出来ている状態です。
VLAN を切っているため、IPv6 が当たるインタフェースは vlan3 にしていますが、適宜読み替えて下さい。

以下、追加するコマンドです。

pp select 1 
 ppp ipv6cp use on
 ipv6 pp rip send off
 ipv6 pp secure filter in 300011 300012 300013 300014 300015 300016 310011 310012 310013 319998 319999
 ipv6 pp secure filter out 300011 300012 300013 300014 300015 300016 329998 329999 dynamic 320011 320012 320013 320014 320015 329998 329999
 ipv6 pp dhcp service client
pp enable 1
ipv6 filter 300011 reject-nolog * * udp,tcp 135 *
ipv6 filter 300012 reject-nolog * * udp,tcp * 135
ipv6 filter 300013 reject-nolog * * udp,tcp netbios_ns-netbios_ssn *
ipv6 filter 300014 reject-nolog * * udp,tcp * netbios_ns-netbios_ssn
ipv6 filter 300015 reject-nolog * * udp,tcp 445 *
ipv6 filter 300016 reject-nolog * * udp,tcp * 445
ipv6 filter 310011 pass * * icmp6
ipv6 filter 310012 pass fe80::/10 * udp 546 547
ipv6 filter 310013 pass fe80::/10 * udp 547 546
ipv6 filter 319998 pass * * established
ipv6 filter 319999 reject-nolog * * * * *
ipv6 filter 329998 pass * * * * *
ipv6 filter 329999 reject-nolog * * * * *
ipv6 filter dynamic 320011 * * ftp
ipv6 filter dynamic 320012 * * domain
ipv6 filter dynamic 320013 * * www
ipv6 filter dynamic 320014 * * smtp
ipv6 filter dynamic 320015 * * pop3
ipv6 filter dynamic 329998 * * tcp
ipv6 filter dynamic 329999 * * udp
ipv6 prefix 3 dhcp-prefix@pp1::/64
ipv6 vlan3 address dhcp-prefix@pp1::1/64
ipv6 vlan3 dhcp service server
ipv6 vlan3 rtadv send 3 o_flag=on
ipv6 route default gateway pp 1

と言うわけで、専用ルータでなくとも、YAMAHA のルータでも IPv6 で接続できました。

なお、うちのルータですが、vlan1 に既に固定 IPv6 アドレスが当たっているので、恒常的には設定していません。
IPv6 でも、フィルタ型ルーティングの様なことが出来れば良いのですけれど。

・追記

IPv6 での外へのアクセスを eo 光の IPv6 にしてみました。IPv6 はインタフェースに複数の IPv6 アドレスを付けられるので、この部分は凄く便利ですね。

いつの間にか ip6tables の nat ターゲットで MASQUERADE が出来る様になっていた

最近 Raspberry Pi 2 のカーネルをビルドし直したのですが、いつの間にか、

ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

見たいな事が出来る様になっていました。

と言うことで、DNS64 + NAT64 の記事で、これに対応する追記を記載しました。

Debian 8 + DNS64 + NAT64 on the Raspberry Pi 2

Debian 8 上に DNS64 + NAT64 を設定した備忘録である。例によって無保証である。

2017/02/11 追記: Jool 3.5.x 系でも同じようにインストール出来ることを確認した。

Linux カーネルのビルドは、「Kernel Building – Raspberry Pi Documentation」に記載の通り、DNS64, NAT64 関係は、「DSAS開発者の部屋:Raspberry Pi 2 で NAT64 箱をつくってみた」の通りとなる。

両者のドキュメントに感謝しつつ、実際に設定を行ってみた。なお、私の環境では、USB で NIC を接続して別インタフェースを接続している。

続きを読む

ntpd の IPv6 設定

いまいち、ntpd.conf の restrict において IPv6 ネットワークアドレスの指定方法がよくわからなかったのだけど、調べたら「AccessRestrictions < Support < NTP の『6.5.1.2.1. If you used ‘restrict default ignore’』」に載っていた。

と言うことで、以下のような想定の設定を ntp.conf に行ってみる。

■想定

上位の ntp サーバ: ntp.example.com
IPv4 ネットワークアドレス: 192.168.1.0/24
IPv6 ネットワークアドレス: 2001:db8:1:1::/64

localhost からはフルアクセス、192.168.1.0/24 および 2001:db8:1:1::/64 から時刻の参照だけ許可する。

■設定例 (/etc/ntp.conf)

driftfile /var/lib/ntp/ntp.drift
server ntp.example.com iburst
restrict -4 default ignore
restrict -6 default ignore
restrict 127.0.0.1
restrict ::1
restrict 192.168.1.0 mask 255.255.255.0 noquery
restrict 2001:db8:1:1:: mask ffff:ffff:ffff:ffff:: noquery
restrict ntp.example.com noquery

HE Free IPv6 Tunnel Broker: IPv6 逆引き設定メモ

Hurricane Electric Free IPv6 Tunnel Broker」では、割り当てられた「Routed /64」または「Routed /48」のネットワークに対して、逆引き設定が出来ます。ここでは、その設定方法を記載します。

■前提

今回は、HE より「2001:DB8:1:1::/64」のネットワークが割り当てられているものとして、「2001:DB8:1:1::1」の逆引きとして www.example.jp をあてます。 また、上記逆引きを設定するサーバは、ns.example.jp であるとします。

■必要なもの

HE から割り当てられた「Routed /64」または「Routed /48」のネットワーク。
IPv6 の逆引きが設定できる DNS サーバ。

■自前の DNS サーバに逆引きゾーンを設定する。

ゾーン名は、IPv6 の場合、コロン以外の 1 文字 (4 bit) ずつ、ピリオド区切りで逆から並べて、最後に「ip6.arpa.」を付けます。

「2001:DB8:1:1::/64」は、「2001:0DB8:0001:0001::」なので、ゾーン名は「1.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.ip6.arpa.」となります。

BIND9 の場合、named.conf 等に以下のようにゾーンとゾーンファイルの読み込み設定を行います。

zone "1.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.ip6.arpa." {
	type master;
	file "/etc/bind/zones/2001:db8:1:1::.rev";
	allow-query { any; };
};

次に、「/etc/bind/zones/2001:db8:1:1::.rev」ファイルに対して、逆引きそのものを設定します。 こちらも、下位の 64 bit のインターフェイス ID のコロン以外の 1 文字 (4 bit) ずつ、ピリオド区切りで逆から並べます。

IPv6 アドレス「2001:DB8:1:1::1/64」を分解すると、「2001:0DB8:0001:0001」のネットワークプレフィックス、「0000:0000:0000:0001」のインターフェイス ID となります。ですので、ゾーンファイル中で指定するインターフェイス ID の部分は「1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0」となり、これに対して PTR レコードで割り当てる FQDN を設定します。

「/etc/bind/zones/2001:db8:1:1::.rev」ファイルの例

$TTL 43200
@			IN	SOA	ns.example.jp. root.example.jp. (
			2013081601
			86400
			7200
			1209600
			7200
)

			IN	NS	ns.example.jp.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0	IN	PTR	www.example.jp.

ここまで出来たら、ネームサーバを再起動します。

■ローカルでの確認

逆引きチェック (設定を行ったネームサーバ上で)

$ dig @localhost 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.ip6.arpa. ptr

「;; ANSWER SECTION:」で以下のように逆引きが帰ってくれば OK です。

;; ANSWER SECTION:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.ip6.arpa. 43200 IN PTR www.example.jp.

■ Hurricane Electric Free IPv6 Tunnel Broker のトンネルの設定

「rDNS Delegations」の項目の「Edit」をクリックすると「rDNS Delegated NS1 〜 NS5」まで逆引き DNS サーバの設定が出来るので、今回は「rDNS Delegated NS1」に「ns.example.jp」を入力し、「Save」します。

なお、上記で基本的に完了するのですが、フォーラムで「/48 rDNS delegation works, /64 rDNS doesn’t」なるトピックがあり、割当が /64 のネットワークの場合、逆引きが上手くいかない場合があるようです。私の場合も、設定を行うと、確かに HE 側 DNS サーバのシリアル値は上がっていくのですが、設定が反映されなくて、HE 側に問い合わせたところ、修正をしてもらえました。

■最終確認

自分が使用している ISP 等の DNS サーバなどを参照する環境において、逆引きチェックを実行。

$ dig -x 2001:DB8:1:1::1

「;; ANSWER SECTION:」で以下のように逆引きが帰ってくれば OK です。

;; ANSWER SECTION:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.ip6.arpa. 43200 IN PTR www.example.jp.

なお、これを書いている現在 (2013/08/16) 、HE 側のネームサーバの TTL 値は 3 時間程度になっているので、上記の確認は、HE 側で逆引き DNS サーバの設定してから、3 時間程度経過しないと正しい値が返ってこない可能性があることに注意が必要です。

■その他

IPv4 のサブネットで分割された逆引きより、とってもシンプルでわかりやすいけど、桁数が半端無いので面倒・・・。
dig IPアドレス +trace って便利だと思いました。

■参考

実用 BIND 9で作るDNSサーバ(12):IPv6対応DNSサーバの実現 (1/2) – @IT

RTX810: HE Free IPv6 Tunnel Broker 設定メモ

Hurricane Electric Free IPv6 Tunnel BrokerYAMAHA RTX810 で IPv6 トンネルを設定した備忘録です。

とりあえず動いた、と言うもので、特にフィルタリングの部分については、全く自信が無いので、間違っていたらコメント等で突っ込んでいただけると凄く嬉しいです。

ちなみにルータの環境は、一般的な PPPoE でグローバル IPv4 が PP インタフェースに当たっていて、LAN 内クライアントは IP マスカレードで LAN1 インタフェースからインターネットへ出て行っているようなものを想定しています。

  • ネットワーク条件

    • RTX810 の LAN1 IPv4:
      192.168.1.1/24
    • RTX810 の LAN1 IPv6 :
      2001:DB8:1:1::1/64
    • トンネルのエンドポイント IPv4 :
      192.0.2.1
    • トンネル内サーバ側 IPv6 :
      2001:DB8:1:2::1/64
    • トンネル内クライアント側 IPv6 :
      2001:DB8:1:2::2/64
    • 割り当てられたネットワーク :
      2001:DB8:1:1::/64

    上記の情報について、トンネル関係の IPv4, IPv6 や、割り当てられたネットワークの情報は、HE でトンネルを設定した際に表示されます。
    また、HE 側の管理画面で、トンネルの MTU 値は「1280」にしておきます。

    以下は、RTX810 への設定です。コンソールなり、SSH なりで設定します。設定を行う前に、既存の設定は必ずバックアップしておきます。

  • LAN1 インタフェースに IPv6 アドレスを当てる

    ipv6 lan1 address 2001:DB8:1:1::1/64
  • IPv6 トンネルを通す IPv4 フィルタと静的マスカレードを設定する

    ip filter 601 pass 192.168.1.1 192.0.2.1 ipv6 * *
    ip filter 602 pass 192.0.2.1 192.168.1.1 ipv6 * *
    ip pp secure filter in … 602 …
    ip pp secure filter out … 601 …
    nat descriptor type 101 masquerade
    nat descriptor address outer 101 ipcp
    nat descriptor address inner 101 auto
    nat descriptor masquerade static 101 1 192.168.1.1 ipv6
  • IPv6 用フィルタを定義する。

    # 入力・出力方向共通静的フィルタ (Windows ファイル共有は通過させない)
    ipv6 filter 101 reject-nolog * * udp,tcp 135 *
    ipv6 filter 102 reject-nolog * * udp,tcp * 135
    ipv6 filter 103 reject-nolog * * udp,tcp netbios_ns-netbios_ssn *
    ipv6 filter 104 reject-nolog * * udp,tcp * netbios_ns-netbios_ssn
    ipv6 filter 105 reject-nolog * * udp,tcp 445 *
    ipv6 filter 106 reject-nolog * * udp,tcp * 445
    # 入力方向 ICMP 静的フィルタ (一部の ICMP タイプだけ通過させる)
    ipv6 filter 111 pass * * icmp6 1
    ipv6 filter 112 pass * * icmp6 2
    ipv6 filter 113 pass * * icmp6 3
    ipv6 filter 114 pass * * icmp6 4
    ipv6 filter 115 pass * * icmp6 128
    ipv6 filter 116 pass * * icmp6 129
    ipv6 filter 117 pass * * icmp6 135
    ipv6 filter 118 pass * * icmp6 136
    # 入力方向静的フィルタ (established なパケットしか基本通過させない)
    ipv6 filter 121 reject-nolog 2001:DB8:1:1::/64 * * * *
    ipv6 filter 122 reject-nolog * 2001:DB8:1:2::2 * ssh
    ipv6 filter 123 reject-nolog * 2001:DB8:1:2::2 * telnet
    ipv6 filter 124 reject-nolog * 2001:DB8:1:2::2 * www
    ipv6 filter 125 reject-nolog * 2001:DB8:1:1::1 * ssh
    ipv6 filter 126 reject-nolog * 2001:DB8:1:1::1 * telnet
    ipv6 filter 127 reject-nolog * 2001:DB8:1:1::1 * www
    ipv6 filter 128 reject-nolog * 2001:DB8:1:1::/64 tcp * ident
    ipv6 filter 129 pass * 2001:DB8:1:1::/64 udp domain *
    ipv6 filter 130 pass * 2001:DB8:1:1::/64 established
    ipv6 filter 131 reject-nolog * * * * *
    # 出力方向静的フィルタ (ほとんどスルー)
    ipv6 filter 141 reject-nolog * 2001:DB8:1:1::/64 * * *
    ipv6 filter 142 pass * * * * *
    ipv6 filter 143 reject-nolog * * * * *
    # 出力方向ダイナミックフィルタ (何となく)
    ipv6 filter dynamic 101 * * ftp
    ipv6 filter dynamic 102 * * domain
    ipv6 filter dynamic 103 * * www
    ipv6 filter dynamic 104 * * smtp
    ipv6 filter dynamic 105 * * pop3
    ipv6 filter dynamic 106 * * tcp
    ipv6 filter dynamic 107 * * udp

    上記は、設定後、インターネット側から LAN1 インタフェース側の機器に対して nmap -6 してみて、大丈夫ではあったが、自信は無い。

  • トンネルインタフェースを設定する

    tunnel select 1
     tunnel encapsulation ipip
     tunnel endpoint address 192.168.1.1 192.0.2.1
     ipv6 tunnel address 2001:DB8:1:2::2/64
     ip tunnel mtu 1280
     ipv6 tunnel secure filter in 101 102 103 104 105 106 111 112 113 114 115 116 117 118 121 122 123 124 125 126 127 128 129 130 131
     ipv6 tunnel secure filter out 101 102 103 104 105 106 141 142 143 dynamic 101 102 103 104 105 106 107
     tunnel enable 1
  • IPv6 のデフォルトゲートウェイの設定と LAN1 側にルータ広告を行い、IPv6 パケットを扱うようにする

    ipv6 route default gateway tunnel 1
    ipv6 prefix 1 2001:DB8:1:1::/64
    ipv6 lan1 rtadv send 1
    ipv6 routing on

これで、RTX810 の LAN1 インタフェースに接続した、IPv6 が自動設定された iMac から http://www.kame.net/ にアクセスしたら、カメは踊り・・ません。

ping6 www.kame.net して、ping6 が通るにもかかわらず、です。

通常デュアルスタック環境において、双方がネイティブ IPv6 アドレスを持っている場合、普通は IPv6 で通信が行われるのですが、OS X Lion 以降では、Happy Eyeballs が実装されているらしく、必ずしも IPv6 で通信されるとは限らないため、のようです。

Linux とかだと、こう言う場合でも多分 IPv6 が優先されそうな気がします。その場合でも 6to4 なアドレスに対しては、常に IPv4 が優先されるはずです。(/etc/gai.conf をさわれば優先度を変更できる)

参考サイト

Feel6 がこんなに簡単に終了するはずがない

って思っていたら、ちょっと前にフリービット株式会社より『「Feel6接続サービス」終了のご案内』なんていうメールが届いてた。

サイトにも記載されているが、Feel6 接続サービスの終了は、2013/7/31 12:00 とのことで、自宅 LAN に Feel6 接続サービスから払い出された /48 のプレフィックスのネットワークから /64 を割り当てて使用していたので、さてどうしようかと。

件のメール中には代替サービスとして、「Feel@DTI」の提案もあるのだけど、ネットワークの払い出しではないようで、私の場合は代替にならなくて、結局「Hurricane Electric Free IPv6 Tunnel Broker」に切り替えた。

※というか、私は ISP に eo 光を使っていて、こちらでも IPv6 接続サービスをやっているのだけど、外部からの接続は遮断、専用ルータのレンタルが必須とか言う仕様…。

話を戻して、HE の Tunnel Broker 、海外のトンネリングサービスになるが、東京にトンネルのエンドポイントがある上、/64 のプレフィックスのネットワークを割り当ててくれる。(/48 もアサイン出来る様だが、個人的にはそこまで必要じゃないので今回はそのまま /64 で。)

当然ながら、自宅 LAN の IPv6 ネットワークアドレスは変わってしまうけど、比較的導入が楽だったので、その備忘録。

続きを読む

rsync でネットワーク越しに差分でミラーリングする

自分が契約している VPS のデータを定期的にデータのミラーを差分でローカルサーバに取るように設定した際のメモです。

■前提

VPS 側は固定 IPv4 / IPv6 アドレスをもつ。
ローカルサーバ側は動的 IPv4 / 固定 IPv6 をもつ。

上記から、

  • rsync + ssh を使用する
  • 双方とも固定のアドレスを持っている IPv6 経由を使用する
  • 常に起動している保証が無いローカル側から VPS 側のデータを取りに行く

と言う方法が一番安全と考えました。

なお、ミラーリングなので、VPS 側で無くなったファイルは、ローカルサーバ側でも無くなります。これを防ぐために、ローカルサーバ側は、ミラーリングされるディレクトリについても複数世代バックアップを別媒体に取得しています。

■ネットワーク環境

・VPS
Static IPv4 Address: aaa.bbb.ccc.ddd
Static IPv6 Address: 2002:xxxx:zzzz::1
FQDN : www.example.com

・ローカルサーバ
Dynamic IPv4 Address : www.xxx.yyy.zzz
Static IPv4 Address : 2001:xxxx:yyyy::1

■仕様

VPS の /etc と /home をローカルサーバの /backups ディレクトリにミーラーリングを取るようにします。また、接続開始はローカルサーバから行います。

■方法

・ローカルサーバ

root になります。
次に、ssh のキーペアを作成します。

# ssh-keygen -b 2048 -t rsa -N "" -f /root/.ssh/rsync-backups

/root/.ssh/rsync-backups.pub という公開鍵が出来ているので、これを VPS 側に何らかの方法で転送します。

・VPS

ローカルサーバから転送してきた公開鍵に安全のため、接続元を限定するため、下記の内容を先頭に追加します。

from="2001:xxxx:yyyy::1"

※実際の公開鍵の内容としては「from=”2001:xxxx:yyyy::1″ ssh-rsa xxxxxx…」となります。

この公開鍵を「/root/.ssh/authorized_keys」に追加します。
※なおこのファイルの所有権は root:root で、アクセス権は 600 にしておくべきです。

/etc/ssh/sshd_config について「PermitRootLogin without-password」とします。さらに sshd を再起動します。

・ローカルサーバ

ローカルサーバ側で root になり、以下のコマンドでパスワード不要で VPS 側に root でログインできることを確認します。

# ssh -6 -i ~/.ssh/rsync-backups root@www.example.com

ログイン確認できたら、VPS からログアウトします。

ミラーリング先のディレクトリを作成します。今回はローカルサーバの /backups 以下に取ることにします。

# mkdir /backups

ここまで出来たら、実際にどういう動作をするか、ファイル転送をせずに確認だけ行います。

# rsync -nvaz --delete --force -e "ssh -6 -i /root/.ssh/rsync-backups" \
root@www.example.com:/etc \
root@www.example.com:/home \
/backups/

問題が無ければ、実際に転送してみます。

# rsync -vaz --delete --force -e "ssh -6 -i /root/.ssh/rsync-backups" \
root@www.example.com:/etc \
root@www.example.com:/home \
/backups/

上手く転送できていれば OK です。あとは、cron で定期的に実行するなりすると良いと思います。

■さらにセキュリティを高めるために

rsync を実行中に VPS 側で ps コマンドなどで rsync がどのように実行されているのかを確認します。
この内容を、公開鍵に「command」を追加してあげて、/etc/ssh/sshd_config では「PermitRootLogin forced-commands-only」として、sshd を再起動してあげるとさらに安全になると思います。

Debian GNU/Linux 6.0 で固定 IPv6 設定

IPv6 が使用可能かつ Router Advertisement が流れているネットワークにおいて、サーバの IPv6 アドレスを手動というか、Static に設定する際になかなか意図する設定に出来なかったので、その解決のメモです。

■条件

サーバに割り当てる IPv6 アドレス : xxxx:yyyy:zzzz::2/64
IPv6 ゲートウェイ : xxxx:yyyy:zzzz::1

■設定

  • /etc/sysctl.conf
    net.ipv6.conf.all.forwarding = 0
    net.ipv6.conf.all.accept_ra = 0
    net.ipv6.conf.all.autoconf = 0
    net.ipv6.conf.all.accept_ra_defrtr = 0
    net.ipv6.conf.all.accept_redirects = 0

    IPv6 の自動設定を全てで OFF にしているのだが・・・。

  • /etc/network/interfaces
    auto eth0
    iface eth0 inet6 static
    	address xxxx:yyyy:zzzz::2
    	netmask 64
    	gateway xxxx:yyyy:zzzz::1
    	pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/forwarding 
    	pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra 
    	pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/autoconf 
    	pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_ra_defrtr 
    	pre-up echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_redirects

    何故かインタフェース名を明示しないと設定が効かない。
    なお、この方法以外に pre-up で設定している内容と同等の設定をしかるべき書式で /etc/sysctl.conf で行っても良い。

上記のように、/etc/network/interfaces で、あらためて IPv6 の自動設定を無効にしているのは、/etc/sysctl.conf で本来なら効くはずの設定が何故か効かないからです。

/etc/sysctrl.conf に書いている内容だけでは、手動設定した IPv6 アドレスと、MAC アドレスをもとに自動生成された IPv6 アドレスの併用となってしまいます。(別にそういう運用もありかと思いますが・・・)

私の中では、net.ipv6.conf.all (設定の上書き) が一番強制力が強く、次に net.ipv6.conf.if名、最後に net.ipv6.conf.default (未指定時のデフォルト値) だと思っていたので、意外でした。

■参考にさせて頂いた URL