Лучше установить правила в ip6tables или отключить ipv6?

11

У меня есть следующая конфигурация сети:

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:e0:1c:73:02:09
          inet addr:10.1.4.41  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::2e0:4cff:fe75:309/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:858600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1069549 errors:0 dropped:0 overruns:5 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:142871181 (136.2 MiB)  TX bytes:717982640 (684.7 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:37952 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3396918 (3.2 MiB)  TX bytes:3396918 (3.2 MiB)

В моей сети есть DHCP-сервер, и я могу получить следующую аренду:

lease {
  interface "eth0";
  fixed-address 10.1.4.41;
  option subnet-mask 255.255.0.0;
  option routers 10.1.255.253;
  option dhcp-lease-time 120;
  option dhcp-message-type 5;
  option domain-name-servers 82.160.125.52,213.199.198.248,82.160.1.1;
  option dhcp-server-identifier 192.168.22.22;
  renew 3 2014/01/01 18:34:41;
  rebind 3 2014/01/01 18:35:30;
  expire 3 2014/01/01 18:35:45;
}

Я могу свистеть 127.0.0.1, ::1, 10.1.4.41:

$ ping 10.1.4.41
PING 10.1.4.41 (10.1.4.41) 56(84) bytes of data.
64 bytes from 10.1.4.41: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 10.1.4.41: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 10.1.4.41: icmp_seq=3 ttl=64 time=0.085 ms
^C
--- 10.1.4.41 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.065/0.075/0.085/0.008 ms

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.055 ms
^C
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.055/0.059/0.066/0.005 ms

$ ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms
^C
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.037/0.046/0.052/0.006 ms

Я не могу пропинговать адрес ipv6 fe80::2e0:4cff:fe75:309:

$ ping6 fe80::2e0:4cff:fe75:309
connect: Invalid argument

Я установил некоторые правила iptables (ipv4):

# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N TCP
-N UDP
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A OUTPUT -m conntrack --ctstate INVALID -j DROP

И это работает, как и ожидалось для ipv4. Но когда я проверяю ip6tables, я вижу, что некоторые пакеты идут туда:

# ip6tables -nvL
Chain INPUT (policy ACCEPT 381 packets, 27624 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 390 packets, 26296 bytes)
 pkts bytes target     prot opt in     out     source               destination

Я следовал этому руководству, и мне сказали, что я должен скопировать конфигурацию iptables (ipv4) и вставить ее в ip6tables (ipv6). Но когда я делаю это, ни один пакет не может пройти через правило RELATED,ESTABLISHEDв таблице ipv6. Все они отбрасываются из-за цепной политики INPUT ( DROP).

# ip6tables -nvL
Chain INPUT (policy DROP 5 packets, 360 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all      eth0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0
    0     0 ACCEPT     all      tun0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID
    0     0 UDP        udp      *      *       ::/0                 ::/0                 ctstate NEW
    0     0 TCP        tcp      *      *       ::/0                 ::/0                 tcp flags:0x17/0x02 ctstate NEW
    0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
    0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID

Chain TCP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain UDP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Как вы можете видеть, нет выходных пакетов, так почему же Google и стек обмена пытаются подключиться к моей машине? И как они это делают, потому что даже я не могу проверить свой IPv6-адрес?

Они также говорят, что если у моего провайдера нет ipv6 (в аренде нет записи ipv6), я должен отключить ipv6 и делал это раньше, используя ipv6.disable=1. Я задал похожий вопрос на meta.stackoverflow.comи получил ответ, что не должен отключать ipv6.

Я понятия не имею, что делать. У меня есть некоторые проблемы с подключением, я имею в виду, что иногда я не могу получить доступ к страницам при обмене стека или Google, у меня также есть проблемы с pastebin.com. В каждом случае есть одинаковые симптомы - после ввода адреса в моем браузере мне приходится иногда ждать несколько минут, чтобы получить доступ к сайту, и после перезагрузки 2-3 раза, я могу просматривать его свободно, по крайней мере, для определенный период времени.

Михаил Морфиков
источник

Ответы:

13

Ваш IPv6-адрес начинается с fe80:и, следовательно, является локальным адресом. Такие адреса можно использовать только по той же ссылке, что и сетевой интерфейс. Поскольку в каждом сетевом интерфейсе существует одна и та же локальная подсеть, вам необходимо указать, какой интерфейс вы хотите использовать. Например, когда вы хотите пропинговать локальный адрес ссылки.

Попробуйте один из следующих ping6примеров. Оба делают то же самое:

ping6 fe80::2e0:4cff:fe75:309%eth0
ping6 -I eth0 fe80::2e0:4cff:fe75:309

Это также означает, что только системы в вашей локальной ссылке (вашей локальной сети) могут использовать этот локальный адрес ссылки для подключения к вашей системе. Маршрутизаторы не будут маршрутизировать эти адреса. Google или Stack Exchange не могут отправлять трафик IPv6 на ваш компьютер, потому что у вашего компьютера нет IPv6-адреса, который был бы доступен / маршрутизируем от них.

Итак, что IPv6 трафика являются вы видите на вашем интерфейсе? Вероятно, такие вещи, как mDNS ( многоадресный DNS ) и другие протоколы, которые могут автоматически подключаться по локальной ссылке. Например, Apple Airplay и Windows Home Group .

Ваши правила брандмауэра не хватает очень важную вещь: ICMPv6. IPv6 использует ICMP намного больше, чем IPv4, и не позволяя пакетам ICMP входить в него, это может серьезно подорвать ваш трафик, потому что вы не будете получать сообщения об ошибках, связанных с этим трафиком. Это может привести к длительным задержкам / тайм-аутам. Разрешение трафика ICMPv6 обычно не повредит, поэтому вы можете добавить это к правилам вашего брандмауэра:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Если вы хотите заблокировать ping6пакеты (хотя я не очень понимаю, почему люди все еще делают это в наши дни, это затрудняет отладку подключения), вы можете добавить это, как и в предыдущей ACCEPTстроке:

ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j DROP

Это особенно важно, когда вы получаете реальное глобальное подключение IPv6 к вашей машине, но это не повредит, если вы уже подготовитесь к этому :-)

Сандер Штеффанн
источник
1
Я получаю это сейчас. Я добавил icmpv6правило, но ограничено 20 / мин, и я вижу, что пакеты идут туда. ping6 -I eth0 fe80::2e0:4cff:fe75:309тоже работает.
Михаил Морфиков
2

При управлении системами я всегда придерживаюсь позиции, что все, что мне явно не нужно для предоставления услуг в указанной системе, должно быть отключено. Эта философия распространяется на все, будь то:

  • удаление ненужного программного обеспечения
  • отключение рабочего стола с графическим интерфейсом на сервере
  • отключение и / или исключение ненужного оборудования
  • отключение IPv6
  • отключение ненужных сервисов
  • и т.п.
SLM
источник
У меня та же философия, но в этом случае я действительно не знаю, что делать. Некоторые люди говорят, что я должен отключить ipv6, другие говорят что-то другое. У меня проблемы, даже когда ipv6 отключен.
Михаил Морфиков
@MikhailMorfikov - ваш провайдер выполняет какие-либо прокси / NAT, где они заставляют своих клиентов использовать IPv6 только для доступа к провайдеру. Я не думаю, что это проблема для вас, иначе у вас был бы адрес IPv6, а вы просто подумали об этом.
СЛМ
Я понятия не имею, возможно, я должен спросить их, и, возможно, они что-то сделают и решат проблему.
Михаил Морфиков
2

Они также говорят, что если у моего провайдера нет ipv6 (в аренде нет записи ipv6), я должен отключить ipv6 и сделал это раньше, используя ipv6.disable = 1. Я задал похожий вопрос на meta.stackoverflow.com и получил ответ, что не должен отключать ipv6.

Конечно, вы не увидите аренду IPv6-адреса с DHCP - для этого и нужен DHCPv6: DHCP и DHCPv6 несовместимы.

Как отключить IPv6 или нет: если он вам не нужен, а ваш провайдер еще не предоставляет его, выключите его, но приготовьтесь к его внедрению . Это включает в себя удаление / перепроектирование всего, что явно зависит от устаревшего IP-адреса, такого как жестко закодированные IP-адреса или использование широковещательной рассылки.

Кстати, отключите IPv6: имейте в виду, что, например, Microsoft считает IPv6 неотъемлемой частью операционной системы, поэтому отключение IPv6 может повлиять на поддержку, которую вы получаете от них.

countermode
источник