В настоящее время основным подходом к внедрению IPv6 является dual-stack, когда устройство одновременно настроено на функционирование обоих IP-протоколов. Это и понятно, ведь основная часть интернета работает на версии IPv4. Механизм 6to4 позволяет подключить ваше устройство IPv4 к брокеру, создав туннель в IPv6.
В первой части цикла статей показана настройка облачного маршрутизатора на routeros. В текущем материале продолжим раскручивать полученное решение, а затем перенесём соединение с брокером на Linux. Но сначала отдельно поговорим о сетевой безопасности подключаемого к IPv6 оборудования. Для понимания происходящих процессов рекомендуется ознакомиться с предыдущей статьёй, так как с целью исключения болтологии вводный материал повторяться не будет.
▍ Сетевая безопасность оконечных устройств
Важно понимать, что назначенный IPv6-адрес теперь светится в самый настоящий интернет напрямую, без всяких nat-технологий (в новом мире
nmap -6 2001:459:14:210::2
25/tcp filtered smtp
135/tcp open msrpc
445/tcp open microsoft-ds
1025/tcp open NFS-or-IIS
1026/tcp open LSA-or-nterm
1027/tcp open IIS
1030/tcp open iad1
1040/tcp open netsaint
3389/tcp open ms-wbt-server
5357/tcp open wsdapi
В IPv4 такое не встретишь, чтобы домашний Windows-компьютер прямо вот так вот был открыт на весь мир, а в IPv6 — пожалуйста. Поэтому соответствующее антивирусное обеспечение или встроенный брандмауэр здесь пригодятся. Но можно на сетевом уровне обойтись и без них, грамотно настроив firewall на chr. Для этого нужно узнать, какие службы на клиенте запущены и готовы работать с tcp- и udp-подключениями из внешнего мира:
# Для windows
netstat -abp tcp -ab
netstat -abp udp -ab
# Для linux
# netstat -tlnp
# netstat -ulnp
Активные подключения
Имя Локальный адрес Внешний адрес Состояние
TCP 0.0.0.0:135 RUVDS:0 LISTENING RpcSs [svchost.exe]
TCP 0.0.0.0:445 RUVDS:0 LISTENING Не удается получить сведения о владельце
TCP 0.0.0.0:1025 RUVDS:0 LISTENING [wininit.exe]
TCP 0.0.0.0:1026 RUVDS:0 LISTENING eventlog [svchost.exe]
TCP 0.0.0.0:1027 RUVDS:0 LISTENING Schedule [svchost.exe]
TCP 0.0.0.0:1030 RUVDS:0 LISTENING [lsass.exe]
TCP 0.0.0.0:1040 RUVDS:0 LISTENING [services.exe]
TCP 0.0.0.0:3389 RUVDS:0 LISTENING CryptSvc [svchost.exe]
TCP 0.0.0.0:5357 RUVDS:0 LISTENING
После этого создаём джентльменский набор правил в IPv6 firewall (в dual-stack сетевой экран следует настраивать как для IPv4, так и отдельно для IPv6), дополнив его правилами блокировки tcp- и udp-портов, работа которых не должна светиться в интернет:
/ipv6 firewall filter
add action=accept chain=input comment="Accept established,related" connection-state=established,related
add action=drop chain=input comment="Drop invalid" connection-state=invalid
add action=accept chain=input comment="Accept ICMP" protocol=icmpv6
add action=accept chain=input comment="defconf: accept UDP traceroute" port=33434-33534 protocol=udp
add action=drop chain=input comment="Drop all input"
add action=accept chain=forward comment="Accept established,related" connection-state=established,related
add action=drop chain=forward comment="Drop invalid" connection-state=invalid
add action=accept chain=forward comment="Accept ICMP" protocol=icmpv6
add action=accept chain=forward comment="Accept forward LAN packets" in-interface=pptp-in1 out-interface=ipv6_tunnel
add action=drop chain=forward comment="My windows TCP ports" dst-port=135,445,1025,1026,1027,1030,1040,3389,5357 in-interface=ipv6_tunnel out-interface=pptp-in1 protocol=tcp
add action=drop chain=forward comment="My windows UDP ports" dst-port=123,500,3702,4500,5353,5355 in-interface=ipv6_tunnel out-interface=pptp-in1 protocol=udp
Если необходим параноидальный режим безопасности, то можно ничего не вычислять, а просто обойтись одним блокирующим правилом, и всё тоже будет работать:
/ipv6 firewall filter add action=drop chain=forward comment="Drop all forwards"
Но тонкая настройка всегда может пригодиться в будущем. Результат повторного сканирования tcp- и udp-портов уверенно демонстрирует, что всё прикрыто, а значит безопасно:
nmap -6 2001:459:14:210::2
Nmap scan report for 2001:470:28:231::2
Host is up (0.12s latency).
Not shown: 984 closed ports
PORT STATE SERVICE
25/tcp filtered smtp
135/tcp filtered msrpc
445/tcp filtered microsoft-ds
1025/tcp filtered NFS-or-IIS
1026/tcp filtered LSA-or-nterm
1027/tcp filtered IIS
1030/tcp filtered iad1
1040/tcp filtered netsaint
3389/tcp filtered ms-wbt-server
5357/tcp filtered wsdapi
nmap -6 2001:470:28:231::2 –sU
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-03 15:29 MSK
Host is up (0.12s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
123/udp open|filtered ntp
500/udp open|filtered isakmp
3702/udp open|filtered ws-discovery
4500/udp open|filtered nat-t-ike
5353/udp open|filtered zeroconf
5355/udp open|filtered llmnr
Несмотря на простоту самого туннеля pptp, выход в IPv6-сеть он обеспечил. Закрыв вопрос с безопасностью клиентской машины, проверяем работу и исследуем новую часть интернет, доступа в которую ранее не было. Различные тесты можно пройти и при помощи браузера:
ping 2001:4860:4860::8888
ping -6 google.com
ping -4 google.com
▍ Туннелирование IPv6 до устройств домашней сети, которые не умеют работать с VPN
Получение маршрутизируемого в интернете IPv6-адреса позволяет подключаться к любому устройству из домашней сети напрямую. Это может быть удобно и интересно одновременно, особенно в контексте личных проектов из раздела сделай сам. Собирать рабочие решения и заставлять их трудиться на благо бывает полезно. Но не всегда есть возможность на оконечном оборудовании использовать VPN-клиенты. Тогда можно реализовать несколько другую схему, которая, кстати говоря, отражает механизмы, работающие на backend-стороне туннельного брокера.
Настроим следующую связку. В качестве VPN-клиента до chr будем использовать роутер домашней сети. У меня это будет тоже mikrotik, и если уж так, то воспользуемся их
/ip pool add name=pool_for_tunnel_in_lan ranges=192.168.99.1-192.168.99.2
/ppp profile add local-address=pool_for_tunnel_in_lan name=my_ppp_tunnels remote-address=pool_for_tunnel_in_lan use-encryption=required
/ppp secret add name=user01 profile=my_ppp_tunnels service=sstp password="123"
/interface sstp-server add name=sstp-in1 user=user01
/interface sstp-server server set authentication=mschap2 default-profile=my_ppp_tunnels enabled=yes
Однако на это раз автоматическое конфигурирование интерфейса (advertise=no) не будет работать, поэтому назначим статическую маршрутизацию IPv6 для интерфейса. Закрепим на обратной стороне туннеля небольшую /126 сеть. Разрешающее правило для firewall также расположим ранее правила drop для цепочки input:
/ipv6 address add address=2001:470:28:231::1/126 advertise=no interface=sstp-in1
/ipv6 route add disabled=no distance=1 dst-address=2001:470:28:231::4/126 gateway=2001:470:28:231::2 routing-table=main scope=30 target-scope=10
/ip firewall filter add action=accept chain=input comment="Accept SSTP" dst-port=443 protocol=tcp
Далее на домашнем роутере поднимем sstp-клиент, зададим на туннельном и bridge-интерфейсах IPv6-адреса из разных сетей, настроим маршрутизацию. Выходит некоторый аналог работы сервера брокера:
/interface sstp-client
add authentication=mschap2 connect-to=ip_адрес_chr disabled=no max-mtu=1280 \
name=sstp-out1 password=123 profile=default-encryption user=user01
/ipv6 address
add address=2001:470:28:231::2/126 advertise=no interface=sstp-out1
add address=2001:470:28:231:5/126 advertise=no interface=bridge
/ipv6 route
add distance=1 dst-address=2000::/3 gateway=2001:470:28:231::1
Имеем следующее распределение адресов:
Первая сеть:
- 2001:470:28:231::0/126 — сеть;
- 2001:470:28:231::1/126 — со стороны туннельного интерфейса chr;
- 2001:470:28:231::2/126 — со стороны туннельного интерфейса домашнего роутера;
- 2001:470:28:231::3/126 — не используется в нашей схеме («последний» адрес в IPv4-сетях является широковещательным, а в IPv6-сетях обычным).
Вторая сеть:
- 2001:470:28:231::4/126 — сеть;
- 2001:470:28:231::5/126 — на bridge-интерфейсе домашнего роутера;
- 2001:470:28:231::6/126 — для устройства из домашней сети;
- 2001:470:28:231::7/126 — не используется в нашей схеме.
Из соображений безопасности, чтобы в локальной сети не могло быть более одного труженика IPv6, о котором администратору не известно, можно попробовать прокинуть маршрут только до одного устройства, например 2001:470:28:231::6/126. Сделать это не получится. Routeros не разрешит задать IPv6-маршрут до конкретного хоста. Вместо этого неявно будет исправлен роут до всей сети:
/ipv6 route add disabled=no distance=1 dst-address=2001:470:28:231::6/126 \
gateway=2001:470:28:231::2 routing-table=main scope=30 target-scope=10
/ipv6 route print
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, s - STATIC; + - ECMP
Columns: DST-ADDRESS, GATEWAY, DISTANCE
# DST-ADDRESS GATEWAY DISTANCE
…
1 As 2001:470:28:231::4/126 2001:470:28:231::2 1
Применим статическую IPv6-адресацию на устройстве из домашней сети, которое не умеет или не хочет работать с VPN-протоколами, как показано на рисунках ниже:
Сеть заведётся, dual-stack во всей красе. Осталось настроить firewall, это также можно сделать на chr или домашнем роутере. Уже описано выше. Когда на устройстве нет возможности посмотреть, какие соединения прослушиваются, следует прибегнуть к сетевому сканеру вроде nmap или connection tracking, если он есть у вашего маршрутизатора. По мне так nmap проще, но нужно помнить, что с параметрами по умолчанию он сканирует только порты до 1024 включительно, а также все порты с большими номерами, упомянутыми в файле nmap-services для протокола, по которому идёт сканирование, чего в 99% случаев достаточно. Чтобы отсканировать вообще все tcp- и udp-порты, применяются следующие ключи (готовьтесь к длительному ожиданию):
nmap -6 2001:470:28:231::2 –p0-65535
nmap -6 2001:470:28:231::2 –sU –p0-65535
▍ IPv4 to IPv6 на Linux
Проведённые настройки облачного маршрутизатора на routeros достаточно просты и наглядны. Однако арендовать целый сервер, чтобы установить на него chr только для доступа в IPv6, не обязательно. Всё это можно проделать и непосредственно в Linux. Сервер помимо этой изыскательской задачи может быть комбайном, нагруженным другими интересными и практическими функциями, как это обычно и бывает у практичных системных администраторов. Дальнейшее описание будет вестись на базе debian 11, к которому прикрутим IPv6. Чтобы подключиться к брокеру, добавим и запустим новый интерфейс:
nano /etc/network/interfaces
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:459:13:210::2
netmask 64
endpoint 216.66.80.90
local ip_адрес_сервера
ttl 255
gateway 2001:459:13:210::1
ifup he-ipv6
ip a
…
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit ip_адрес_сервера peer 216.66.80.90
inet6 2001:459:13:210::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::b905:f816/64 scope link
valid_lft forever preferred_lft forever
Сервер создал туннель в IPv6-интернет, который мы протянем до локалки. Вследствие этого VDS станет самым настоящим маршрутизатором, который должен передавать forward-пакеты далее по сети, для этого активируем IPv4- и IPv6-пересылки:
nano /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
sysctl -p
Можно тестировать соединение, проще всего это сделать, кинув пинги на адреса из нового диапазона. Также в Linux опционально настроим резолвинг на IPv6 DNS-серверах:
nano /etc/resolv.conf
nameserver 77.88.8.8
nameserver 77.88.8.1
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
▍ Промежуточные выводы
Во второй части цикла статей показан подход к обеспечению безопасности подключаемых к IPv6-клиентов. Настроено туннелирование до устройств сети, которые не умеют работать с vpn, используя домашний роутер в качестве шлюза на примере конфигурирования sstp и статической маршрутизации. Используя полученный практический опыт, перенесли подключение к брокеру IPv6 на Linux. В последней части материала настроим туннелирование IPv6 до устройств домашней сети посредством удобного и безопасного протокола l2tp. А для работы (в первую очередь мобильных устройств) дополнительно организуем ikev2, сделав на сервере неплохую связку для кроссплатформенного доступа в новый мир.
Как начать работать с IPv6 — часть 2. Сетевая безопасность оконечных устройств. Туннелирование IPv6 до устройств домашней сети, которые не умеют работать с VPN. IPv4 to IPv6 на Linux. ← Вы здесь
Как начать работать с IPv6 — часть 3. Туннелирование IPv6 до устройств домашней сети (Linux). Туннелирование IPv6 до мобильных устройств. (ещё не опубликована)
Узнавайте о новых акциях и промокодах первыми из нашего Telegram-канала ????
Комментарии (18)
Helltraitor
10.10.2023 16:07Ламерский вопрос: что насчет DDOS атак частных пользователей? Время процессора, по идее, тратится на ответ по открытым портам
olegtsss Автор
10.10.2023 16:07+1Открытые порты частных пользователей лучше сделать закрытыми для интернета (на шлюзе), чтобы не иметь проблем не только с DOS.
denaturat
10.10.2023 16:07Какой смысл такого интернета? Лучше выкинуть весь старый хлам, калек вроде ардуин с куцыми дырявыми стеками и так далее. Объективно говоря современная ОС что мобильная что для ПК вполне себе выживает(и должна выживать) имея реальный IP без МСЭ между ней и интернетом.
olegtsss Автор
10.10.2023 16:07+1Ну вы оставьте открытым порт, который вам нужен наружу. А остальное почикайте на firewall-е шлюза. Это называется - нормально закрытый firewall.
denaturat
10.10.2023 16:07У меня dualstack в ходу давным-давно, я в курсе. Я писал о том, что любое устройство на рынке не должно требовать стороннего файрволла, чтобы не помереть/не стать частью ботнета. То есть штуки типа "SMB, bonjour etc по умолчанию отвечают только в local scope" должны быть дефолтными. Не файрволлом, а в коде сервиса. И переключить только руками.
olegtsss Автор
10.10.2023 16:07Я бы лучше переложил это на шлюз дистрибуции, а не на оконечное устройство.
denaturat
10.10.2023 16:07Это типичное "то, как делать не надо"
olegtsss Автор
10.10.2023 16:07+1Не согласен. Оконечные устройства могут не уметь закрывать порты. Кроме того в доверенной сети может быть запущено множество сервисов. И не вижу смысл дублировать функции и тем самым не эффективно задействовать ресурсы. Вообще шлюз на то и шлюз, чтобы решать сетевые L3 задачи. Приведите обоснование своего "то, как делать не надо" .
dimaaannn
10.10.2023 16:07Каждый раз видя статьи про IpV6 у меня возникает вопрос - а ради чего всё это, собственно, надо для SOHO сегмента?
В процессе настройки я сделал некоторые выводы. Поправьте меня, если я где то заблуждаюсь.
Плюсы IpV6
уникальный внешний ipV6 адрес моих устройств в интернете.
Возможность создавать свои подсети
Можно поднять сайт на кофеварке и он сразу будет доступен всему интернету
Нет NAT
Минусы
Куча настройки чтобы всё это контролируемым образом заработало
Совершенно неочевидная случайная генерация адресов для устройств
Необходимость DNS сервера (с бумажки такие адреса сложновато вбить в браузер)
Необходимость настройки фаерволла, чтобы кофеварка осталась только внутри моей подсети
Я до сих пор не понимаю выгоду от использования данной технологии в бытовом сегменте.
olegtsss Автор
10.10.2023 16:07В первой части статьи в самом начале есть ссылка на перевод хорошей мотивационной статьи по поводу ipv6, рекомендую ознакомиться. Мое мнение следующее: ipv6 - технология, которая сменить в интернете ipv4, как архаизм, оставив ему место на чулан-ресурсах и незамысловатых локалках. Выгода следующая - фонд ipv4 иссякнет, nat станет не эффективным.
homeles
Хм, вопрос.... А как быть если внутри домашней подсетки все девайсы будут под IPv6 (утрирую немного, но все к этому в итоге и идет) ? Если на компах прикрыть от внешних "товарищей" файрволом службы для расшаривания ресурсов - то придется в правилах писать исключения, чтобы свои "компы" таки могли ??? Думается с таким подходом роутер WAN_IPv6-NAT-LAN_IPv4 для домашних подсеток будет еще оооочень долго востребован.
olegtsss Автор
Здесь проблем нет, для локалок есть link local адреса (на картинке в тексте хорошо видны):
https://ru.wikipedia.org/wiki/Link-local_address
denaturat
Вы можете вообще внутри оставить чистый ipv6. Это работает, так, например, делает МТС для мобильных клиентов иногда. Но, конечно, легаси софту плохо и днс нужно транслировать. Но в типовом сценарии когда интернет это браузер это вообще незаметно
olegtsss Автор
Было бы интересно узнать, какие компании перевели (переводят) свой интранет на чистый ipv6 (без ipv4). Насколько мне известно - Яндекс. Оказывается МТС. Будет интересно узнать и другие.
denaturat
Я у себя на одной из площадок делаю такое. То есть чистый v6, wpad, squid, вообще никакого ipv4 внутри. Работает, пользователю незаметно. Если пытается какой-то хлам запустить - скорее всего обломается. Забавно. Между филиалами связь тоже удобно, ipv6 реально уникальные адреса. Непривычно немного в работе, особенно в виланах с контрол-плейнами оборудования но надо же как-то себя дрессировать :)
olegtsss Автор
А на ipv4 сайты как пользователи попадают?
denaturat
Точно так же как на v6: squid
olegtsss Автор
И как он работает для https?