Я столкнулся с проблемой доступности IPv6 на моем сервере.
ping6
и traceroute6
протестировано на моем стабильном Debian Wheezy, актуально)AAAA
запись для веб-сайта существует и работает правильноip6tables INPUT
таблица настроена так, чтобы разрешать запросы HTTP так же, как iptables (политика по умолчанию DROP
+ TCP 80 ACCEPT
правило):
Chain INPUT (policy DROP 648 packets, 46788 bytes)
pkts bytes target prot opt in out source destination
6 480 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80
Я сузил проблему до того, что если я установил политику по умолчанию на ACCEPT
, HTTP-соединение работает, иначе нет.
Таким образом, кажется, может потребоваться перенаправление некоторых других портов? oO
Может ли это быть связано с некоторой конфигурацией ядра стека маршрутизации / IPv6?
Вот результат sudo ip6tables --line-numbers -nvL
:
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 8169 784K ACCEPT all * * ::/0 ::/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22
3 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80
4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:443
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Ребята, вы должен не игнорировать ICMPv6, как вы это делали для устаревшего IP - ICMPv6 и особенно протокол обнаружения соседей (NDP) жизненно важно для правильного функционирования IPv6. (NDP, среди прочего, заменяет ARP.)
Это значит, что ты должен разрешить хотя бы для типов 133-136 ICMPv6 из локальной ссылки (т. е. fe80::/10
). Более того, вы должен разрешить приход определенных сообщений об ошибках, например, маршрутизаторы больше не фрагментируются. Вы также не хотите отбрасывать ссылки на локальные многоадресные сообщения.
Полная история рассказана в RFC 4890.
Ниже приведен отрывок с одной из моих машин, хоста vm, который действует как маршрутизатор:
#! /bin/sh
drop () {
/sbin/ip6tables --jump DROP --append "$@";
}
accept () {
/sbin/ip6tables --jump ACCEPT --append "$@";
}
chain () {
/sbin/ip6tables --new-chain "$@"
}
ICMP_RATELIMIT="--match limit --limit 2/s"
# ...
# Validate ingoing ICMPv6 messages
#
chain ICMPv6_IN
# error messages
# allow error messages that are related to previously seen traffic
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type destination-unreachable --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type packet-too-big --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type ttl-exceeded --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type parameter-problem --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
# accept neighbor discovery
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type neighbor-solicitation $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type neighbor-advertisement $ICMP_RATELIMIT
# accept router discovery
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type router-solicitation '!' --src ff00::/8 --in-interface cafe0 $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type router-advertisement --src fe80::/10 --in-interface wlp3s0 $ICMP_RATELIMIT
# ping
# accept replies to my ping requests
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type echo-reply --match conntrack --ctstate ESTABLISHED,RELATED
# allow ping from my network(s)
accept ICMPv6_IN --src $COUNTERMODE --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT
# allow link-local unicast ping
accept ICMPv6_IN --dst fe80::/10 --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT
## allow multicast ping from local link
#accept ICMPv6_IN --dst ff00::/8 --src fe80::/10 --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT
# multicast listener discovery v1
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 130 --in-interface cafe0
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 131 --in-interface cafe0
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 132 --in-interface cafe0
# multicast listener discovery v2
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 143 --in-interface cafe0
# drop everything else
drop ICMPv6_IN