У меня есть капля DigitalOcean, которая используется для нескольких вещей, в первую очередь в качестве веб-хоста и SMTP-сервера. Недавно я начал заниматься IPv6 и успешно настроил его на VPS; ping6
отлично работает с google.com и т. д. Локальная сеть LAN настроена на IPv6 через slaac и может без проблем пинговать и подключаться к капле DO.
У меня проблемы с настройкой ip6tables
. Я выполнил базовую конфигурацию, которая разрешает только SSH, Web и SMTP, но после добавления правил все перестает иметь возможность подключаться к VPS через IPv6. Как только я смываю столы, все в порядке. Также кажется, что если я настраиваю соединение (например, web или ssh) перед добавлением правил, соединения работают после добавления правил, это ненадолго. Я не уверен, что блокирует соединения на данный момент, любые рекомендации были бы полезны.
ip6tables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1880 121K ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED
2 136 ACCEPT all lo * ::/0 ::/0
1 84 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:25
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80
1 80 ACCEPT tcp * * ::/0 ::/0 tcp dpt:443
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:587
774 55932 DROP all * * ::/0 ::/0
Chain FORWARD (policy ACCEPT 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
2537 168K ACCEPT all * * ::/0 ::/0
ОБНОВИТЬ: Добавлен оператор журнала для записи некоторых журналов, затем продолжился и попытался подключиться к SSH от клиента, который, как я знаю, не работал. Он не подключался, и я сдался, подождав, может быть, 10 секунд.
Mar 29 08:57:55 cloud kernel: [170352.518576] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0
Mar 29 08:57:56 cloud kernel: [170353.518091] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0
Mar 29 08:57:57 cloud kernel: [170354.517936] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0
Mar 29 08:57:59 cloud kernel: [170356.517573] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0
Почему SRC fe80::1
? Это определенно не исходный IP-адрес, с которого я подключаюсь (сокращенный префикс 2600:1700
). Кроме того, летнее время ff02::1:ffe2:4001
который, похоже, тоже настроен на интерфейсе:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 04:01:3a:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 104.236.XXX.XXX/18 brd 104.236.XXX.XXX scope global eth0
valid_lft forever preferred_lft forever
inet6 2604:a880:800:XXXX::YYYY:4001/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::601:3aff:fe85:dd01/64 scope link
valid_lft forever preferred_lft forever
ip -6 route
2604:a880:800:10::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
fe80::/64 dev tap0 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via 2604:a880:800:XXXX::1 dev eth0 metric 1024 pref medium
Как просили, ip6tables-save
ip6tables-save
# Generated by ip6tables-save v1.6.0 on Thu Mar 29 09:03:33 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -j LOG
-A INPUT -j DROP
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Thu Mar 29 09:03:33 2018
Все узлы IPv6 имеют локальные адреса канала, которые находятся в fe80::/10
сеть. Узлы будут использовать локальную адресацию для различных вещей, которые остаются в локальной ссылке (она не может быть маршрутизирована), поэтому вы должны разрешить такую адресацию в своих правилах.
IPv6 не поддерживает широковещательную рассылку, поэтому активно использует многоадресную рассылку. Узлы будут иметь несколько одноадресных / произвольных адресов на интерфейсе, и узел должен подписаться на многоадресный адрес запрошенного узла для каждого из этих адресов. Многоадресный адрес запрошенного узла основан на последних 24 битах одноадресного адреса, поэтому, если все ваши одноадресные / многоадресные адреса имеют одни и те же последние 24 бита, тогда у вас будет только одна многоадресная группа запрошенного узла для интерфейса (это идеал).
IPv6 Neighbor Discover использует многоадресный адрес запрошенного узла. Поскольку IPv6 не имеет широковещательной передачи, ARP не используется для связывания адреса уровня 2 с адресом уровня 3. IPv6 использует для этого ND, который использует многоадресный адрес запрошенного узла.