(更新 2018/8/1)ip6tablesの設定変更の必要あり
(注意)
8月1日以降、東京リージョンでは「(この記事内の旧情報)フィルタルール例」でうまく通信できなくなってしまった。
代わりに、ICMPv6関係では、次の設定を用いる必要があった。
ip6tables -A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
ip6tables -A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
ip6tables -A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
ip6tables -A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
ip6tables -A INPUT -s 2xxx:xxxx:xxxx:xxxx::1/128 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
ip6tables -A INPUT -s 2xxx:xxxx:xxxx:xxxx::1/128 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
ip6tables -A INPUT -s fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
ip6tables -A INPUT -s fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
※2xxx:xxxx:xxxx:xxxx::1 は、割り当てられたGUAの先頭64bit::1である。
上記はICMPv6だけ抜粋したものです。
実際の通信には、さらに下記旧情報を参考にして、ICMPv6以外の設定を加える必要があります。
しかし、ip6tables -L -v コマンドで、通過パケットの統計情報を確認すると、
最後の2行(太字)で設定したパスフィルタにはパケットが通過しており、
それ以外のフィルタは0パケットのままだった。
このことから、ICMPv6で必要なのはただ2行分だけかもしれない。
さらに追跡調査する必要がある。
以下は、旧情報としてあげておきます。考え方は共通するものがあるので、
ご参考にしてください。
-----旧情報↓------
上記はICMPv6だけ抜粋したものです。
実際の通信には、さらに下記旧情報を参考にして、ICMPv6以外の設定を加える必要があります。
しかし、ip6tables -L -v コマンドで、通過パケットの統計情報を確認すると、
最後の2行(太字)で設定したパスフィルタにはパケットが通過しており、
それ以外のフィルタは0パケットのままだった。
このことから、ICMPv6で必要なのはただ2行分だけかもしれない。
さらに追跡調査する必要がある。
以下は、旧情報としてあげておきます。考え方は共通するものがあるので、
ご参考にしてください。
-----旧情報↓------
さくらのVPS環境(東)の仮想マシンでIPv6通信を行う場合、
次のようにip6tablesを設定すると、うまくインターネット側とのやりとりができた。さくらVPSでは、IPアドレスは静的に設定するため、下記ではDHCP関係の通信は考慮していない。
下記に加えて、
インターネット側にあるマシンのGUAをACCEPTするフィルタをさらに追加することで、
インターネット側から開始する接続も可能になった。
■考え方
IPv6では、IPv4とは異なり、隣接するマシンを探索するブロードキャストでもIP通信を行う。
・ipv6-icmp neighbour-solicitation(icmpv6-type 135)
・pv6-icmp neighbour-advertisement(icmpv6-type 136)
この2種類のICMPパケットの入力を許可しなければ、通信不可能になってしまう。
また、さくらのVPS環境では、このICMPパケットのフィルタリングルールで使うIPv6アドレスとして、何パターンか用意する必要があった。
無用な通信の入力を避けるため、AnyWhereは使用したくなかった。
下記の例では、ipv6-icmp neighbour パケットの入力と、ステートフルインスペクションを考慮して作成したものである。
しかしIPv6においてICMPの役割は重要で、これ以外のタイプのICMPの入力も必要になってくる。
例えば、パケットが大きすぎて経路上のルーターで分割が必要になった際に通知される情報もICMPの別のタイプで通知される。
下記の例では、これらの通知を受け取ることができない。
それでもとりあえず、下記の設定で、システムのアップデートを行うことができた。
■フィルタルール例
# cat /etc/sysconfig/ip6tables
# Generated by ip6tables-save v1.4.7 on Wed Mar 28 21:31:02 2018※2xxx:xxxx:xxxx:xxxx::1 は、割り当てられたGUAの先頭64bit::1である。
*filter
:INPUT DROP [2:144]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [7219:625541]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED -j ACCEPT
-A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
-A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -d ff02::/16 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
-A INPUT -s 2xxx:xxxx:xxxx:xxxx::1 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A INPUT -s 2xxx:xxxx:xxxx:xxxx::1 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
COMMIT
# Completed on Wed Mar 28 21:31:02 2018
○マシン起動直後に、各フィルタを通ったパケットの状態を表示させた。
# ip6tables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all lo any anywhere anywhere
27 5321 ACCEPT all eth0 any anywhere anywhere state ESTABLISHED
0 0 ACCEPT all eth0 any anywhere anywhere state RELATED
1 72 ACCEPT ipv6-icmp any any anywhere fe80::/64 ipv6-icmp neighbour-solicitation
0 0 ACCEPT ipv6-icmp any any anywhere fe80::/64 ipv6-icmp neighbour-advertisement
15 1080 ACCEPT ipv6-icmp any any anywhere ff02::/16 ipv6-icmp neighbour-solicitation
0 0 ACCEPT ipv6-icmp any any anywhere ff02::/16 ipv6-icmp neighbour-advertisement
1 72 ACCEPT ipv6-icmp any any 2xxx:xxxx:xxxx:xxxx::1/128 anywhere ipv6-icmp neighbour-solicitation
1 72 ACCEPT ipv6-icmp any any 2xxx:xxxx:xxxx:xxxx::1/128 anywhere ipv6-icmp neighbour-advertisement
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 45 packets, 6237 bytes)
pkts bytes target prot opt in out source destination
○数分経過後に、同様に結果を表示させた。
# ip6tables -L -v
Chain INPUT (policy DROP 7 packets, 504 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all lo any anywhere anywhere
42 6521 ACCEPT all eth0 any anywhere anywhere state ESTABLISHED
0 0 ACCEPT all eth0 any anywhere anywhere state RELATED
147 10584 ACCEPT ipv6-icmp any any anywhere fe80::/64 ipv6-icmp neighbour-solicitation
237 16240 ACCEPT ipv6-icmp any any anywhere fe80::/64 ipv6-icmp neighbour-advertisement
119 8568 ACCEPT ipv6-icmp any any anywhere ff02::/16 ipv6-icmp neighbour-solicitation
0 0 ACCEPT ipv6-icmp any any anywhere ff02::/16 ipv6-icmp neighbour-advertisement
1 72 ACCEPT ipv6-icmp any any 2xxx:xxxx:xxxx:xxxx::1/128 anywhere ipv6-icmp neighbour-solicitation
1 72 ACCEPT ipv6-icmp any any 2xxx:xxxx:xxxx:xxxx::1/128 anywhere ipv6-icmp neighbour-advertisement
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 549 packets, 43501 bytes)
pkts bytes target prot opt in out source destination
<参考>
・IPv6 - multicast address
< http://www.infraexpert.com/study/ipv6z10.html > 2018年3月30日
・VPS OSセットアップ情報(CentOS 6)
< https://help.sakura.ad.jp/hc/ja/articles/206053672-OS%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E6%83%85%E5%A0%B1-CentOS-6- > 2018年3月30日