В настоящее время основным подходом к внедрению 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, и если уж так, то воспользуемся их фирменной фичей — работой sstp-протокола без сертификатов, потому что он (протокол) хорош всем, а в этой ситуации одновременно прост в настройке. Команды уже знакомы:

/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 — часть 1. Общая настройка CHR. IPv4 to IPv6 на CHR. Туннелирование IPv6 до устройств домашней сети (CHR).

Как начать работать с IPv6 — часть 2. Сетевая безопасность оконечных устройств. Туннелирование IPv6 до устройств домашней сети, которые не умеют работать с VPN. IPv4 to IPv6 на Linux. ← Вы здесь

Как начать работать с IPv6 — часть 3. Туннелирование IPv6 до устройств домашней сети (Linux). Туннелирование IPv6 до мобильных устройств. (ещё не опубликована)

Узнавайте о новых акциях и промокодах первыми из нашего Telegram-канала ????

Комментарии (18)


  1. homeles
    10.10.2023 16:07

    Хм, вопрос.... А как быть если внутри домашней подсетки все девайсы будут под IPv6 (утрирую немного, но все к этому в итоге и идет) ? Если на компах прикрыть от внешних "товарищей" файрволом службы для расшаривания ресурсов - то придется в правилах писать исключения, чтобы свои "компы" таки могли ??? Думается с таким подходом роутер WAN_IPv6-NAT-LAN_IPv4 для домашних подсеток будет еще оооочень долго востребован.


    1. olegtsss Автор
      10.10.2023 16:07

      Здесь проблем нет, для локалок есть link local адреса (на картинке в тексте хорошо видны):
      https://ru.wikipedia.org/wiki/Link-local_address


    1. denaturat
      10.10.2023 16:07

      Вы можете вообще внутри оставить чистый ipv6. Это работает, так, например, делает МТС для мобильных клиентов иногда. Но, конечно, легаси софту плохо и днс нужно транслировать. Но в типовом сценарии когда интернет это браузер это вообще незаметно


      1. olegtsss Автор
        10.10.2023 16:07

        Было бы интересно узнать, какие компании перевели (переводят) свой интранет на чистый ipv6 (без ipv4). Насколько мне известно - Яндекс. Оказывается МТС. Будет интересно узнать и другие.


        1. denaturat
          10.10.2023 16:07

          Я у себя на одной из площадок делаю такое. То есть чистый v6, wpad, squid, вообще никакого ipv4 внутри. Работает, пользователю незаметно. Если пытается какой-то хлам запустить - скорее всего обломается. Забавно. Между филиалами связь тоже удобно, ipv6 реально уникальные адреса. Непривычно немного в работе, особенно в виланах с контрол-плейнами оборудования но надо же как-то себя дрессировать :)


          1. olegtsss Автор
            10.10.2023 16:07

            А на ipv4 сайты как пользователи попадают?


            1. denaturat
              10.10.2023 16:07

              Точно так же как на v6: squid


              1. olegtsss Автор
                10.10.2023 16:07

                И как он работает для https?


  1. Helltraitor
    10.10.2023 16:07

    Ламерский вопрос: что насчет DDOS атак частных пользователей? Время процессора, по идее, тратится на ответ по открытым портам


    1. olegtsss Автор
      10.10.2023 16:07
      +1

      Открытые порты частных пользователей лучше сделать закрытыми для интернета (на шлюзе), чтобы не иметь проблем не только с DOS.


      1. denaturat
        10.10.2023 16:07

        Какой смысл такого интернета? Лучше выкинуть весь старый хлам, калек вроде ардуин с куцыми дырявыми стеками и так далее. Объективно говоря современная ОС что мобильная что для ПК вполне себе выживает(и должна выживать) имея реальный IP без МСЭ между ней и интернетом.


        1. olegtsss Автор
          10.10.2023 16:07
          +1

          Ну вы оставьте открытым порт, который вам нужен наружу. А остальное почикайте на firewall-е шлюза. Это называется - нормально закрытый firewall.


          1. denaturat
            10.10.2023 16:07

            У меня dualstack в ходу давным-давно, я в курсе. Я писал о том, что любое устройство на рынке не должно требовать стороннего файрволла, чтобы не помереть/не стать частью ботнета. То есть штуки типа "SMB, bonjour etc по умолчанию отвечают только в local scope" должны быть дефолтными. Не файрволлом, а в коде сервиса. И переключить только руками.


            1. olegtsss Автор
              10.10.2023 16:07

              Я бы лучше переложил это на шлюз дистрибуции, а не на оконечное устройство.


              1. denaturat
                10.10.2023 16:07

                Это типичное "то, как делать не надо"


                1. olegtsss Автор
                  10.10.2023 16:07
                  +1

                  Не согласен. Оконечные устройства могут не уметь закрывать порты. Кроме того в доверенной сети может быть запущено множество сервисов. И не вижу смысл дублировать функции и тем самым не эффективно задействовать ресурсы. Вообще шлюз на то и шлюз, чтобы решать сетевые L3 задачи. Приведите обоснование своего "то, как делать не надо" .


  1. dimaaannn
    10.10.2023 16:07

    Каждый раз видя статьи про IpV6 у меня возникает вопрос - а ради чего всё это, собственно, надо для SOHO сегмента?

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

    Плюсы IpV6

    • уникальный внешний ipV6 адрес моих устройств в интернете.

    • Возможность создавать свои подсети

    • Можно поднять сайт на кофеварке и он сразу будет доступен всему интернету

    • Нет NAT

    Минусы

    • Куча настройки чтобы всё это контролируемым образом заработало

    • Совершенно неочевидная случайная генерация адресов для устройств

    • Необходимость DNS сервера (с бумажки такие адреса сложновато вбить в браузер)

    • Необходимость настройки фаерволла, чтобы кофеварка осталась только внутри моей подсети

    Я до сих пор не понимаю выгоду от использования данной технологии в бытовом сегменте.


    1. olegtsss Автор
      10.10.2023 16:07

      В первой части статьи в самом начале есть ссылка на перевод хорошей мотивационной статьи по поводу ipv6, рекомендую ознакомиться. Мое мнение следующее: ipv6 - технология, которая сменить в интернете ipv4, как архаизм, оставив ему место на чулан-ресурсах и незамысловатых локалках. Выгода следующая - фонд ipv4 иссякнет, nat станет не эффективным.