
В настоящее время основным подходом к внедрению 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)
 - Helltraitor10.10.2023 16:07- Ламерский вопрос: что насчет DDOS атак частных пользователей? Время процессора, по идее, тратится на ответ по открытым портам  - olegtsss Автор10.10.2023 16:07+1- Открытые порты частных пользователей лучше сделать закрытыми для интернета (на шлюзе), чтобы не иметь проблем не только с DOS.  - denaturat10.10.2023 16:07- Какой смысл такого интернета? Лучше выкинуть весь старый хлам, калек вроде ардуин с куцыми дырявыми стеками и так далее. Объективно говоря современная ОС что мобильная что для ПК вполне себе выживает(и должна выживать) имея реальный IP без МСЭ между ней и интернетом.  - olegtsss Автор10.10.2023 16:07+1- Ну вы оставьте открытым порт, который вам нужен наружу. А остальное почикайте на firewall-е шлюза. Это называется - нормально закрытый firewall.  - denaturat10.10.2023 16:07- У меня dualstack в ходу давным-давно, я в курсе. Я писал о том, что любое устройство на рынке не должно требовать стороннего файрволла, чтобы не помереть/не стать частью ботнета. То есть штуки типа "SMB, bonjour etc по умолчанию отвечают только в local scope" должны быть дефолтными. Не файрволлом, а в коде сервиса. И переключить только руками.  - olegtsss Автор10.10.2023 16:07- Я бы лучше переложил это на шлюз дистрибуции, а не на оконечное устройство.  - denaturat10.10.2023 16:07- Это типичное "то, как делать не надо"  - olegtsss Автор10.10.2023 16:07+1- Не согласен. Оконечные устройства могут не уметь закрывать порты. Кроме того в доверенной сети может быть запущено множество сервисов. И не вижу смысл дублировать функции и тем самым не эффективно задействовать ресурсы. Вообще шлюз на то и шлюз, чтобы решать сетевые L3 задачи. Приведите обоснование своего "то, как делать не надо" . 
 
 
 
 
 
 
 
 - dimaaannn10.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?